層次分析法(AHP)
1.算法簡述與原理分析
? 層次分析法是一種主觀賦值評價方法也是一個多指標綜合評價算法,常用于綜合評價類模型。層次分析法將與決策有關(guān)的元素分解成目標、準則、方案等多個層次,并在此基礎(chǔ)上進行定性和定量分析,是一種簡單、實用的算法。
? 原理:是在分析一個現(xiàn)象或問題之前,首先將現(xiàn)象或問題根據(jù)他們的性質(zhì)分解為相關(guān)因素,并依據(jù)因素之間的關(guān)系形成一個多層次的結(jié)構(gòu)模型。然后通過經(jīng)驗或?qū)<襾砼袛嗟蛯釉貙Ω邔釉氐南鄬χ匾?,并根?jù)重要性的程度得出權(quán)重排序。
2.AHP層次分析法過程
層次分析法進行建模,大致分為以下四步:
1.分析系統(tǒng)中各因素之間的關(guān)系,建立系統(tǒng)的遞階層次結(jié)構(gòu)。
2.對于同一層次的個元素關(guān)于上一層次中某一準則的重要性兩兩比較,構(gòu)造兩兩比 較矩陣(判斷矩陣)。
3.由判斷矩陣計算被比較元素對于該準則的相對權(quán)重,并進行一致性檢驗(檢驗通過權(quán)重才能用)。
4.填充權(quán)重矩陣,根據(jù)矩陣計算得分,得出結(jié)果。
2.1構(gòu)建層次結(jié)構(gòu)模型
即將所有相關(guān)因素分為目標層、準則層和方案層
2.2構(gòu)造判斷矩陣
即把準則層的指標進行兩兩判斷,確定各準則層對目標層的權(quán)重
對于準則層A我們可以構(gòu)建:
q其中A中的元素滿足:
w
i
=
1
n
∑
j
=
1
n
a
i
j
∑
k
=
1
n
a
k
j
,
(
i
=
1
,
2
,
…
,
n
)
…
…
…
…
…
(
2
)
{w_i} = \frac{1}{n}\sum\limits_{j = 1}^n {\frac{{{a_{ij}}}}{{\sum\limits_{k = 1}^n {{a_{kj}}} }},(i = 1,2, \ldots ,n)}……………(2)
wi?=n1?j=1∑n?k=1∑n?akj?aij??,(i=1,2,…,n)……………(2)
矩陣里面寫什么簡單來說就是假如有三個元素A、B、C,A和B相比A重要多少,A比C中要多少,B比C中要多少,這個“多少”我們通常使用Santy的1-9標度方法給出,即:
2.3層次單排序
大白話說一下,就是求解各個指標的權(quán)重。計算方法有三種:算數(shù)平均法、幾何平均法和特征值法。(小tips:在實際建模中,不同的計算方法可能會導(dǎo)致結(jié)果有所偏差,為了保證結(jié)果的穩(wěn)健性,可以采用多種方法分別對權(quán)值進行求解,避免單一方法所需產(chǎn)生的誤差,使得出的結(jié)論更全面有效。)
舉個栗子,這是一個判斷矩陣。
2.3.1方法1:算術(shù)平均法求權(quán)重
Step1:將判斷矩陣按照列歸一化(每個元素除以其所在列的和,如1/(1+1/2+1/4)=0.5882)
Step2:將歸一化的列相加(按行求和)
Step3:將相加后的每個元素除以n即可得到對應(yīng)的權(quán)重向量
轉(zhuǎn)換為數(shù)學(xué)公式就是:
w i = 1 n ∑ j = 1 n a i j ∑ k = 1 n a k j , ( i = 1 , 2 , … , n ) … … … … … ( 2 ) {w_i} = \frac{1}{n}\sum\limits_{j = 1}^n {\frac{{{a_{ij}}}}{{\sum\limits_{k = 1}^n {{a_{kj}}} }},(i = 1,2, \ldots ,n)}……………(2) wi?=n1?j=1∑n?k=1∑n?akj?aij??,(i=1,2,…,n)……………(2)
2.3.2方法2:幾何平均法求權(quán)重(又叫方根法)
舉個栗子:
Step1:計算每行乘積的m次方,得到一個m維向量
景色: 1 ? 5 ? 5 ? 1 3 ? 8 5 = 2.3162 \sqrt[5]{{1*5*5*\frac{1}{3}*8}} = 2.3162 51?5?5?31??8?=2.3162
費用: 1 5 ? 1 ? 1 4 ? 1 6 ? 2 5 = 0.4409 \sqrt[5]{{\frac{1}{5}*1*\frac{1}{4}*\frac{1}{6}*2}} = 0.4409 551??1?41??61??2?=0.4409
居住: 1 5 ? 4 ? 1 ? 1 5 ? 3 5 = 0.8635 \sqrt[5]{{\frac{1}{5}*4*1*\frac{1}{5}*3}} = 0.8635 551??4?1?51??3?=0.8635
飲食: 3 ? 6 ? 5 ? 1 ? 6 5 = 3.5195 \sqrt[5]{{3*6*5*1*6}} = 3.5195 53?6?5?1?6?=3.5195
旅途: 1 8 ? 1 2 ? 1 3 ? 1 6 ? 1 5 = 0.3222 \sqrt[5]{{\frac{1}{8}*\frac{1}{2}*\frac{1}{3}*\frac{1}{6}*1}} = 0.3222 581??21??31??61??1?=0.3222
Step2:把向量標準化即為權(quán)重向量,即得到權(quán)重
設(shè)SUM=2.3162+0.4409+0.8635+3.5195+0.3222
則 景色:2.3162/SUM=0.3104
? 費用:0.4409/SUM=0.0591
? 居住:0.8635/SUM=0.1157
? 飲食:3.5195/SUM=0.4716
? 旅途:0.3222/SUM
轉(zhuǎn)換為數(shù)學(xué)公式為:
w
i
 ̄
=
∏
j
=
1
m
a
i
j
m
…
…
…
…
(
1
)
\overline {{w_i}} = \sqrt[m]{{\prod\limits_{j = 1}^m {{a_{ij}}} }}…………(1)
wi??=mj=1∏m?aij??…………(1)
w i = w i  ̄ ∑ j = 1 m w j  ̄ … … … … ( 2 ) {w_i} = \frac{{\overline {{w_i}} }}{{\sum\nolimits_{j = 1}^m {\overline {{w_j}} } }}…………(2) wi?=∑j=1m?wj??wi???…………(2)
2.3.3方法3:特征值法求權(quán)重
一致矩陣有一個特征值為n,其余特征值均為0。特征值為n時,對應(yīng)的特征向量剛好為:
k
[
1
a
11
,
1
a
12
,
…
,
1
a
1
n
]
T
(
k
≠
0
)
k{\left[ {\frac{1}{{{a_{11}}}},\frac{1}{{{a_{12}}}}, \ldots ,\frac{1}{{{a_{1n}}}}} \right]^T}(k \ne 0)
k[a11?1?,a12?1?,…,a1n?1?]T(k=0)
那么我們直接可以將特征向量歸一化即可求得權(quán)重向量。
2.4一致性檢驗
2.4.1求解最大特征值
求得權(quán)重矩陣后,可以計算最大特征跟,公式為:
λ
max
?
=
1
n
∑
i
=
1
n
(
A
W
)
i
W
i
{\lambda _{\max }} = \frac{1}{n}\sum\limits_{i = 1}^n {\frac{{{{(AW)}_i}}}{{{W_i}}}}
λmax?=n1?i=1∑n?Wi?(AW)i??
其中n為維度數(shù),例如之前我們舉得例子因素為景色、費用、居住、飲食、旅途時,n=5。AW為:判斷矩陣*標準化后的權(quán)重,然后按行的累加值。
還是舉個栗子:
判斷矩陣A為:
標準化權(quán)重W為:
其中A*W為:(就是對應(yīng)位置相乘)
AW的值就是按行相加。
則最大特征值為:
λ
max
?
=
x
/
n
=
5.416
{\lambda _{\max }} = x/n = 5.416
λmax?=x/n=5.416
其中,x=AW1/W1+AW2/W2+…+AWn/Wn。n為矩陣階數(shù)。
2.4.2求解CI、RI、CR值,判斷一致性是否通過
Step1:一致性指標CI值的求解公式為:
C
I
=
λ
max
?
?
n
n
?
1
CI = \frac{{{\lambda _{\max }} - n}}{{n - 1}}
CI=n?1λmax??n?
將2.4.1的例子代入可得CI=0.1042
Step2:平均隨機一致性指標RI值是通過查表得出來的:
將2.4.1的例子代入可得RI=1.12
Step3:計算一致性比例CR:
C
R
=
C
I
/
R
I
CR=CI/RI
CR=CI/RI
將Step1和Step2的計算結(jié)果代入可得CR=0.093
Step4:判斷是否通過一致性檢驗:
CR<0.1 時,表明判斷矩陣 A 的一致性程度被認為在容許的范圍內(nèi),此時可用 A 的特征向量開展權(quán)向量計算;若 C.R.≥0.1, 說明我們在構(gòu)建判斷矩陣時出現(xiàn)了邏輯錯誤,需要重新構(gòu)建判斷矩陣。如例題中CR=0.093<0.1,則視為檢驗合格。
Matlab實現(xiàn)代碼(只需要替換判斷矩陣即可)
A=[1 2 3 4 5;1/2 1 2 3 4;1/3 1/2 1 2 3;1/4 1/3 1/2 1 2;1/5 1/4 1/3 1/2 1];
%disp('請輸入準則層判斷矩陣A(n階)');
%A=input('A=');
[n,n]=size(A);
Sum_A=sum(A);
SUM_A=repmat(Sum_A,n,1);
Stand_A=A./SUM_A;
disp('算術(shù)平均法求權(quán)重的結(jié)果為:')
disp(sum(Stand_A,2)./n);
Prduct_A=prod(A,2);
Prduct_n_A=Prduct_A.^(1/n);
disp('幾何平均法求權(quán)重的結(jié)果為:')
disp(Prduct_n_A./sum(Prduct_n_A));
[V,D]=eig(A);%求得特征向量和特征值
%求出最大特征值和它所對應(yīng)的特征向量
tempNum=D(1,1);
pos=1;
for h=1:n
if D(h,h)>tempNum
tempNum=D(h,h);
pos=h;
end
end
w=abs(V(:,pos));
w=w/sum(w);
t=D(pos,pos);
disp('準則層特征向量w=');disp(w);disp('準則層最大特征根t=');disp(t);
%以下是一致性檢驗
CI=(t-n)/(n-1);RI=[0 0 0.52 0.89 1.12 1.26 1.36 1.41 1.46 1.49 1.52 1.54 1.56 1.58 1.59 1.60 1.61 1.615 1.62 1.63];
CR=CI/RI(n);
if CR<0.10
disp('此矩陣的一致性可以接受!');
disp('CI=');disp(CI);
disp('CR=');disp(CR);
else disp('此矩陣的一致性驗證失敗,請重新進行評分!');
end
disp('請輸入方案層各因素對準則層各因素權(quán)重的成對比較陣');
for i=1:n
disp('請輸入第');disp(i);disp('個準則層因素的判斷矩陣B');disp(i);
end
disp('此矩陣的一致性可以接受!');
disp('CI=');disp(CI);
disp('CR=');disp(CR);
else disp('此矩陣的一致性驗證失敗,請重新進行評分!');
end
disp('請輸入方案層各因素對準則層各因素權(quán)重的成對比較陣');
for i=1:n
disp('請輸入第');disp(i);disp('個準則層因素的判斷矩陣B');disp(i);
end
.
.
.
.
.
.文章來源:http://www.zghlxwxcb.cn/news/detail-490314.html
參考文章:https://mpaidata.blog.csdn.net/article/details/122081827文章來源地址http://www.zghlxwxcb.cn/news/detail-490314.html
到了這里,關(guān)于層次分析法(AHP)詳解+完整代碼的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!