【評價演算法】層次分析法

一、概述

層次分析法(AHP)是將要決策的問題及其有關因素分解成目標、準則、方案等層次,進而進行定性和定量分析的決策方法。它的特徵是合理地將定性與定量決策結合起來,按照思維、心理的規律把決策過程細緻化(層次化、數量化)。

層次分析法廣泛地應用到處理複雜的決策問題,而決策是基於該方法計算出的權重,所以也常用來確定指標的權重。

層次分析法的基本思路與人們對一個決策問題的思維、判斷過程大體上是一樣的。例如,選購一台筆記本電腦,假設有三種不同品牌款式的筆記本電腦A、B、C供選擇。我們一般會根據價格、外觀、重量、用途、功耗、品牌等一些準則去反覆比較這個三個候選。首先,會確定這些準則在自己心目中各佔多大比重,不同的人這種比重會有很大差異(喜歡玩遊戲的人看重硬體性能和散熱、預算有限的人看重價格等)。其次,還會就每一個準則將A、B、C進行對比,比如A最便宜,B次之;C性能最好,B次之;C的品牌最知名等。最後,將這兩個層次的比較判斷進行綜合,在A、B、C中確定一台作為最符合自己需求的電腦。

二、演算法步驟

1. 將問題條理化、層次化,建立層次結構模型

1)最高層(目標層)——只有一個元素:決策目標;

2)中間層(準則層)——考慮的因素,決策的準則、子準則;

3)最底層(方案層)——決策時的備選方案、措施。

層次分析法要解決的問題是,求出最底層對最高層的相對權重,以此對最底層的方案、措施進行排序,選擇最優方案。

注1:為了避免兩兩比較判斷過於複雜,每層次中各元素所支配的元素一般不要超過9個,否則應劃分為若干子層;

注2:層次分析法只考慮相鄰兩個層次間自上向下的支配作用,認為同一層次的元素間相互獨立,若考慮進來需要網路分析法(ANP)。

例如前文提到的選購筆記本電腦的決策模型,可以建立如下的層次結構:

2. 構造判斷矩陣(成對比較矩陣)

構造好層次模型後,針對某一層來講,在比較第 i 個元素與第 j 個元素相對於上一層某個因素的重要性時,使用數量化的相對重要度 a_{ij} 來表示,假設共有 n 個元素參與比較,則矩陣

A = egin{pmatrix} a_{11} & cdots & a_{1n} \ vdots & ddots & vdots \ a_{n1} & dots & a_{nn} end{pmatrix} =ig(a_{ij}ig)_{n 	imes n}

稱為判斷矩陣(或成對比較矩陣)。

Saaty根據絕大多數人認知事物的心理習慣,建議用1~9及其倒數作為標度來確定 a_{ij} 的值。如下表所示:

其中,2, 4, 6, 8分別介於1, 3, 5, 7, 9對應的重要程度之間。顯然,A中的元素滿足:

i) a_{ij}> 0

ii) a_{ji} = 1/a_{ij}

iii) a_{ii} = 1

稱為正互反矩陣。

例如,選購筆記本電腦模型中,可以根據實際三台電腦的重量得到電腦對準則層B3的判斷矩陣(對於定量指標, a_{ij} 可以取筆記本電腦 ji 的重量之比,重量越輕越好):

A_{B_3-C} = egin{pmatrix} 1 & 1/3 & 1/5 \ 3 & 1 & 3/5 \ 5 & 5/3 & 1 end{pmatrix}

3. 判斷矩陣的一致性檢驗與層次單排序

定義:n 階正互反矩陣 ig(a_{ij}ig)_{n 	imes n} 滿足 a_{ik} cdot a_{kj} = a_{ij}

(對應 a_{ij}=w_i/w_j ,故需要 a_{ik} cdot a_{kj} =(w_i/w_k)/(w_k/w_j)= a_{ij} ),則稱

ig(a_{ij}ig)_{n 	imes n} 為一致性矩陣。

註:一致性即判斷的一種傳遞性,比如 a 的重要性是 b2 倍, b 的重要性是 c3 倍,則 a 的重要性得是 c6 倍。否則就是判斷的不一致。

判斷矩陣是否為一致性矩陣,有如下定理:

定理: n 階正互反矩陣 A 為一致性矩陣的充要條件是, A 的最大特徵值 [{lambda _{{
m{max}}}}{
m{;}} = n]

在實際操作中,由於客觀事物的複雜性以及人們對事物判斷比較時的模糊性,很難構造出完全一致的判斷矩陣。因此,Satty在構造層次分析法時,提出了一致性檢驗,所謂一致性檢驗是指判斷矩陣允許有一定不一致的範圍。

一致性檢驗步驟如下

(1)計算判斷矩陣 A 的最大特徵值 lambda_{max}

(2)求出一致性指標(Consistencey Index):


m{CI} = frac{lambda_{max} -n}{n-1}

CI=0 表示完全一致,CI 越大越不一致;

(3)用隨機模擬取平均的方法,求相應的平均隨機一致性指標RI, 或者直接用Satty模擬1000次得到的RI表:

(4)計算一致性比率:


m{CR} = frac{
m{CI}}{
m{RI}}

(5)判斷,當 [{
m{CR}} < 0.1] 時,認為判斷矩陣 A 有滿意的一致性;若 
m{CR} geq 0.1 ,應考慮修正判斷矩陣 A

通常用特徵根法從判斷矩陣導出,單一準則下元素相對排序權重。特徵根法的基本思想是,當正互反矩陣 ig(a_{ij}ig)_{n 	imes n} 為一致性矩陣時,對應於判斷矩陣的最大特徵根 lambda_{max} 的特徵向量,經歸一化後(使向量中各元素之和等於1)即為排序權向量,為 ww 的元素為同一層次因素對於上一層次某因素相對重要性的排序權值,這一過程稱為層次單排序。

4. 計算各元素對目標層的合成權重(層次總排序)

為了實現層次分析法的最終目的,需要從上而下逐層進行各層元素對目標合成權重的計算。

設已計算出第 k-1n_{k-1} 個元素相對於目標的合成權重為:

w^{(k-1)} = ig( w_1^{k-1}, , w_2^{k-1}, , dots, , w_{n_k-1}^{k-1} ig)

再設第 k 層的 n_k 個元素關於第 k-1 層第 j 個元素( j=1, cdots, n_k-1 )的單一準則排序權重向量為:

u_j^k = ig( u_{1j}^{(k)}, , u_{2j}^{(k)}, , cdots,, u_{n_kj}^{(k)} ig)

上式對 k 層的 n_k 個元素是完全的,若某些元素不受第 k-1 層第 j 個元素支配,相應位置用 0 補充,於是得到 n_k 	imes n_{k-1} 階矩陣:

U^{(k)} = egin{pmatrix} u_{11}^{(k)} & u_{12}^{(k)} & cdots & u_{1n_{k-1}}^{(k)} \ u_{21}^{(k)} & u_{22}^{(k)} & cdots & u_{2n_{k-1}}^{(k)} \ vdots & vdots & ddots & vdots \ u_{n_k1}^{(k)} & u_{n_k2}^{(k)} & cdots & u_{n_kn_{k-1}}^{(k)} end{pmatrix}

從而可以得到第 k 層的 n_k 個元素關於目標層的合成權重向量:

w^{(k)} = U^{(k)} w^{(k-1)}

按遞歸展開得

w^{(k)} = U^{(k)}U^{(k-1)}dots U^{(3)}w^{(2)}

寫成分量形式為

w_i^{(k)} = sum_{j=1}^{n_k-1} u_{ij}^{(k)}w_j^{(k-1)}, qquad i=1, cdots, n_k

各層元素對目標層的合成排序權重向量是否可以滿意接受,與單一準則下的排序問題一樣,需要進行綜合一致性檢驗:

:實際應用中,整體一致性檢驗常不予進行。主要原因是,整體考慮十分困難;其次若每個單一準則下的判斷矩陣具有滿意的一致性,而整體達不到滿意的一致性時,調整起來非常困難。另外,整體一致性的背景也不如單一準則下的背景清晰,它的必要性有待進一步研究。

三、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}——存儲第 k+1 層與第 k 層的結構( k=1, cdots, n );

設第 k 層有 m_k 個元素,其中第 j 元素與第 k+1 層的結構關係存儲到 C{k}{…, j} 中( j=1,cdots,m_k ),需要存儲的信息有:

受第 j 元素支配的第 k+1 層各元素的判斷矩陣

k+1 層各元素是否受第 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%發獎金。

參考文獻

  1. 吳鵬. Matlab高效編程技巧與應用:25個案例分析,北京:北京航空航天大學出版社,2010.
  2. 吳剛, 張敬信 等. 數學建模與數學實驗,中國商業出版社, 2017.

版權所有,轉載請註明。

推薦閱讀:

TAG:層次分析法AHP | MATLAB | 數學建模 |