【評價演算法】層次分析法
一、概述
層次分析法(AHP)是將要決策的問題及其有關因素分解成目標、準則、方案等層次,進而進行定性和定量分析的決策方法。它的特徵是合理地將定性與定量決策結合起來,按照思維、心理的規律把決策過程細緻化(層次化、數量化)。
層次分析法廣泛地應用到處理複雜的決策問題,而決策是基於該方法計算出的權重,所以也常用來確定指標的權重。
層次分析法的基本思路與人們對一個決策問題的思維、判斷過程大體上是一樣的。例如,選購一台筆記本電腦,假設有三種不同品牌款式的筆記本電腦A、B、C供選擇。我們一般會根據價格、外觀、重量、用途、功耗、品牌等一些準則去反覆比較這個三個候選。首先,會確定這些準則在自己心目中各佔多大比重,不同的人這種比重會有很大差異(喜歡玩遊戲的人看重硬體性能和散熱、預算有限的人看重價格等)。其次,還會就每一個準則將A、B、C進行對比,比如A最便宜,B次之;C性能最好,B次之;C的品牌最知名等。最後,將這兩個層次的比較判斷進行綜合,在A、B、C中確定一台作為最符合自己需求的電腦。
二、演算法步驟
1. 將問題條理化、層次化,建立層次結構模型
1)最高層(目標層)——只有一個元素:決策目標;
2)中間層(準則層)——考慮的因素,決策的準則、子準則;
3)最底層(方案層)——決策時的備選方案、措施。
層次分析法要解決的問題是,求出最底層對最高層的相對權重,以此對最底層的方案、措施進行排序,選擇最優方案。
注1:為了避免兩兩比較判斷過於複雜,每層次中各元素所支配的元素一般不要超過9個,否則應劃分為若干子層;
注2:層次分析法只考慮相鄰兩個層次間自上向下的支配作用,認為同一層次的元素間相互獨立,若考慮進來需要網路分析法(ANP)。
例如前文提到的選購筆記本電腦的決策模型,可以建立如下的層次結構:
2. 構造判斷矩陣(成對比較矩陣)
構造好層次模型後,針對某一層來講,在比較第 個元素與第 個元素相對於上一層某個因素的重要性時,使用數量化的相對重要度 來表示,假設共有 個元素參與比較,則矩陣
稱為判斷矩陣(或成對比較矩陣)。
Saaty根據絕大多數人認知事物的心理習慣,建議用1~9及其倒數作為標度來確定 的值。如下表所示:
其中,2, 4, 6, 8分別介於1, 3, 5, 7, 9對應的重要程度之間。顯然,A中的元素滿足:
i)
ii)
iii)
稱為正互反矩陣。
例如,選購筆記本電腦模型中,可以根據實際三台電腦的重量得到電腦對準則層B3的判斷矩陣(對於定量指標, 可以取筆記本電腦 與 的重量之比,重量越輕越好):
3. 判斷矩陣的一致性檢驗與層次單排序
定義:若 階正互反矩陣 滿足
(對應 ,故需要 ),則稱
為一致性矩陣。
註:一致性即判斷的一種傳遞性,比如 的重要性是 的 倍, 的重要性是 的 倍,則 的重要性得是 的 倍。否則就是判斷的不一致。
判斷矩陣是否為一致性矩陣,有如下定理:
定理: 階正互反矩陣 為一致性矩陣的充要條件是, 的最大特徵值 。
在實際操作中,由於客觀事物的複雜性以及人們對事物判斷比較時的模糊性,很難構造出完全一致的判斷矩陣。因此,Satty在構造層次分析法時,提出了一致性檢驗,所謂一致性檢驗是指判斷矩陣允許有一定不一致的範圍。
一致性檢驗步驟如下:
(1)計算判斷矩陣 的最大特徵值 ;
(2)求出一致性指標(Consistencey Index):
CI=0 表示完全一致,CI 越大越不一致;
(3)用隨機模擬取平均的方法,求相應的平均隨機一致性指標RI, 或者直接用Satty模擬1000次得到的RI表:
(4)計算一致性比率:
(5)判斷,當 時,認為判斷矩陣 有滿意的一致性;若 ,應考慮修正判斷矩陣 。
通常用特徵根法從判斷矩陣導出,單一準則下元素相對排序權重。特徵根法的基本思想是,當正互反矩陣 為一致性矩陣時,對應於判斷矩陣的最大特徵根 的特徵向量,經歸一化後(使向量中各元素之和等於1)即為排序權向量,為 , 的元素為同一層次因素對於上一層次某因素相對重要性的排序權值,這一過程稱為層次單排序。
4. 計算各元素對目標層的合成權重(層次總排序)
為了實現層次分析法的最終目的,需要從上而下逐層進行各層元素對目標合成權重的計算。
設已計算出第 層 個元素相對於目標的合成權重為:
再設第 層的 個元素關於第 層第 個元素( )的單一準則排序權重向量為:
上式對 層的 個元素是完全的,若某些元素不受第 層第 個元素支配,相應位置用 補充,於是得到 階矩陣:
從而可以得到第 層的 個元素關於目標層的合成權重向量:
按遞歸展開得
寫成分量形式為
各層元素對目標層的合成排序權重向量是否可以滿意接受,與單一準則下的排序問題一樣,需要進行綜合一致性檢驗:
注:實際應用中,整體一致性檢驗常不予進行。主要原因是,整體考慮十分困難;其次若每個單一準則下的判斷矩陣具有滿意的一致性,而整體達不到滿意的一致性時,調整起來非常困難。另外,整體一致性的背景也不如單一準則下的背景清晰,它的必要性有待進一步研究。
三、Matlab實現
實現層次分析法的Matlab函數:ahp.m
function [W,ahpResult] = ahp(C)%層次分析法%C為n×1的元胞數組,存儲整個層次模型結構:第2層對第1層、第3層對第2層、...第n+1層對第n層%假設第k層有m_k個元素,從左到右依次編號1,...,m_k%C{k}也是元胞數組, k=1,...,n%C{k}{1,j}存儲受第j元素支配的第k+1層各元素的判斷矩陣(j=1,2,...,m_k)%C{k}{2,j}存儲第k+1層各元素是否受第k層第j元素支配的(m_k+1)*1的邏輯數組,1表示支配,0表示不受支配%W返回方案層對目標層的最終權重向量%ahpResult為n×1的元胞數組, 存儲層次分析過程各層的結果信息, ahpResult{k}也是元胞數組%ahpResult{k}{1,j}返回第k+1層所有元素相對第k層j元素的權重向量, 第k+1層元素不受第k層j元素支配的權重為0%ahpResult{k}{2,j}返回第k+1層所有元素相對於第k層第j元素的判斷矩陣的最大特徵值%ahpResult{k}{3,j}返回第k+1層所有元素相對於第k層第j元素的判斷矩陣的一致性比率C.R.RI=[0 0 0.58 0.90 1.12 1.24 1.32 1.41 1.45 1.49 1.51]; % 平均隨機一致性指標n = length(C); %得到C的長度n, 於是知道模型總層數為n+1ahpResult = cell(n,1); %存儲各層結果信息for k = 1:n m_k = size(C{k},2); %k層的元素個數 ahpResult{k} = cell(m_k,1); for kk = 1:m_k%求第k+1層各元素對第k層kk元素的成對比較矩陣的特徵值和特徵向量 [V,D] = eig(C{k}{1,kk}); [maxD,ind] = max(diag(D)); % 求最大特徵值和其位置%為存儲第k+1層所有元素相對k層kk元素的權重預留出空間, 長度應等於C{k}{2,kk}的長度 ahpResult{k}{1,kk} = zeros(length(C{k}{2,kk}),1);%將相應正互反矩陣屬於最大特徵值的特徵向量歸一化後賦給%ahpResult{k}{1,kk}中相應位置(由邏輯數組C{k}{2,kk}決定)ahpResult{k}{1,kk}(C{k}{2,kk})=V(:,ind)/sum(V(:,ind)); ahpResult{k}{2,kk} = maxD; %C{k}{1,kk}正互反矩陣的最大特徵值 nn = size(C{k}{1,kk},1); %C{k}{1,kk}的階數 ahpResult{k}{3,kk} = (maxD-nn)/(nn-1)/RI(nn); %相應的一致性比率C.R. end endW = ahpResult{1}{1,1};for k = 2:n%cat(2,ahpResult{k}{1,:})把k+1層所有元素相對k層各個元素的權重向量橫向排在一起生成權重矩陣U^(k) W = cat(2,ahpResult{k}{1,:})*W; end
用該函數實現層次分析法的關鍵是,把整個層次結構存入嵌套元胞數組 C 中:
C{k}——存儲第 層與第 層的結構( );
設第 層有 個元素,其中第 元素與第 層的結構關係存儲到 C{k}{…, j} 中( ),需要存儲的信息有:
受第 元素支配的第 層各元素的判斷矩陣
第 層各元素是否受第 層第 元素支配(即有沒有連線)
所以需要兩個位置,即 C{k}{1,j} 和 C{k}{2, j}。
四、具體案例
例1 某工廠有一筆企業留成利潤,需要決定如何分配使用。已經決定有三種用途:獎金、集體福利措施、引進技術設備。考察準則也有三個:是否能調動職工的積極性、是否有利於提高技術水平、考慮改善職工生活條件。建立如下圖所示層次模型:
經過工廠決策人員討論,得到如下判斷矩陣:
(1)第2層對第1層。
三個元素C1, C2, C3都受A支配,判斷矩陣C{1}{1,1}為
相應的邏輯數組C{1}{2,1}為[true true true]。
(2)第3層對第2層。
1)第3層對第2層第1個元素C1:
受C1支配的只有兩個元素P1和P2,判斷矩陣C{2}{1,1}為
相應的邏輯數組C{2}{2,1}為[true true false]。
2)第3層對第2層第2個元素C2:
受C2支配的只有兩個元素P2和P3,判斷矩陣C{2}{1,2}為
相應的邏輯數組C{2}{2,2}為[false true true]。
3)第3層對第2層第3個元素C3:
受C3支配的只有兩個元素P1和P2,判斷矩陣C{2}{1,3}為
相應的邏輯數組C{2}{2,3}為[true true false]。
(3)有了上面的分析,層次模型的元胞數組表示C已經確定,調用函數ahp.m即可。
代碼:C = cell(2,1); %共n+1=3層, 故n=2C{1}{1,1} = [1 1/5 1/3;5 1 3;3 1/3 1];%第2層(C層)關於第1層(目標層A)的判斷矩陣C{1}{2,1} = [true true true];%相應的邏輯數組C{2}{1,1} = [1 1/3;3 1];%第3層(P層)關於第2層第1元素C1的判斷矩陣C{2}{2,1} = [true true false]; %相應的邏輯數組C{2}{1,2} = [1 1/5;5 1];%第3層(P層)關於第2層第2元素C2的判斷矩陣C{2}{2,2} = [false true true]; %相應的邏輯數組C{2}{1,3} = [1 2;1/2 1];%第3層(P層)關於第2層第3元素C3的判斷矩陣C{2}{2,3} = [true true false]; %相應的邏輯數組[W,ahpResult]=ahp(C); %調用ahp函數求解W %輸出總排序的權重向量
運行結果:
W就是方案層各個方案所佔的比重,可見引進技術設備所佔比重最大,改善員工福利次之。體現在獎金分配上,即用全部留成利潤的53.08%引進技術設備,27.08%改善員工福利,19.84%發獎金。
參考文獻
- 吳鵬. Matlab高效編程技巧與應用:25個案例分析,北京:北京航空航天大學出版社,2010.
- 吳剛, 張敬信 等. 數學建模與數學實驗,中國商業出版社, 2017.
版權所有,轉載請註明。
推薦閱讀: