其主要用於解決評價類問題(例如:選擇哪種方案最好、哪位運動員或者員工表現的更優秀)
一個很典型的層次分析法案例:
確定評價目標:
高考完後小明想要去旅遊,有三個目的地供他選擇:
- 蘇杭
- 北戴河
- 桂林
確定評價準則:
假如小明要選擇目的地,他同時考慮以下的條件,我們稱爲評價準則:
- 景色
- 花費
- 居住
- 飲食
- 交通
確定評價準則的判斷矩陣:
在這之前,我們要介紹一下重要程度表:
當兩個條件互相比較時,誰比誰重要,可以用這張表的數值(1~9)來進行打分。
我們要依次確定這個五個條件的權重以便小明選擇目的地,假如我們問小明:
博主 :”小明,你覺得這五個條件對你來說對於選擇目的地來說更重要啊?“
小明:”一次讓我來說的話可能不太好判斷,每個我感覺都挺重要啊。。。“
於是我們就會遇到這樣的問題,但條件很多時,我們就不好一下子直接說出哪一個條件對於目的地的選擇更加重要(或者說在小明心中的權重)。所以這個時候我們可以構造一個表格來兩兩比較:
觀察以上表格,分成三個部分:
- 對角線以上
拿景色與花費做例子,景色相比與花費,小明覺得景色對於他來說要求不是那麼高,反而會更在意花費,所以景色相對於花費的值是1/2
-
對角線
由於表格的對角線是條件與自己相比,所以值爲1(同等重要)
-
對角線以下
既然對角線以上是景色比花費,那麼對角線就是花費比景色,正好相反
所以我們看到,對角線以下的是對角線以上的倒數,由於有五個評價準則,所以一共要兩兩比較:
次就可以填滿整張表。
下面是結果:
總結:上面的上面這個表是一個5 X 5的方陣,我們記爲A
,對應的元素爲:
這個方陣有如下特點:
aij
的意思是i
與指標𝑗
相比,𝑖
的程度- 當
𝑖 = 𝑗
時,兩個指標相同,因此同等重要記爲1,這就解釋了主對角線元素爲1。 𝑎ij> 0
且滿足𝑎ij X 𝑎ji = 1
(我們稱滿足這一條件的矩陣爲正互反矩陣)
上面這個矩陣就是層次分析法中的判斷矩陣,得到了判斷矩陣,就可以計算出權重了
確定目標的判斷矩陣:
既然評價準則之間有判斷矩陣,在小明心中,對於景色來說,蘇杭,北戴河,桂林之間可能也有不同的分數,他可能覺得在景色方面,桂林更勝一籌,那麼桂林的分數就要比其它兩個的分數要高,那這樣單單就景色來說,蘇杭,北戴河,桂林之間就要兩兩之間進行比較,其它的條件也是同樣如此,於是我們可以類比以上的表格:
- 景色:
- 花費
- 居住
- 飲食
- 交通
一致矩陣的概念
由於以上表格都是我們問,小明答,有很強的主觀意願,所以這張表表格很可能出錯,下面我們就來看一個錯誤的例子:
如上圖所示,出現了不一致的現象,那麼我們來看一個一致的矩陣:
我們觀察這個矩陣,它的各行各列成比例,我們稱這個矩陣爲一致矩陣,我們可以用數學符號來表達:
所以,綜上所述:各行(各列)之間成倍數關係的矩陣爲一致矩陣。
總結:
- 矩陣中每個元素都大於0且對角線元素爲1的矩陣我們成爲正互反矩陣
- 在層次分析法中,我們構造的判斷矩陣都是正互反矩陣
- 若正互反矩陣滿足各行各列成比例,我們稱爲一致矩陣
所以,我們得到的判斷矩陣一定是正互反矩陣,由於跟實際情況中可變的因素有很多,所以我們的正互反矩陣在現實生活中很難滿足各行各列成比例,所以也就很難讓正互反矩陣成爲一致矩陣,但是我們可以對正互反矩陣進行一致性檢驗,讓它在一定的範圍誤差內,在此誤差內我們可以看作其滿足一致性矩陣的條件,所以我們在得到了判斷矩陣(正互反矩陣)後要進行一致性檢驗
對判斷矩陣進行一致性檢驗:
原理: 檢驗我們構造的判斷矩陣和一致矩陣是否有太大的差別。
一致性檢驗的步驟:
-
計算判斷矩陣的特徵值:
如果特徵值中有虛數,則比較的是特徵值的模長。 這個由於計算較爲繁瑣,我們可以交給MATLAB完成,使用eig命令既可以計算特徵值,也可以計算特徵向量。
當最大特徵值等於矩陣階數的時候,我們的正互反矩陣才爲一致矩陣:
當最大特徵值與n相差越大時,我們得到的矩陣越不一致。 -
計算一致性指標
CI
:
-
查找對應的平均隨機一致性指標
RI
:
注:在實際運用中,n很少超過10,如果指標的個數大於10,則可考慮建立 二級指標體系,或使用我們以後要學習的模糊綜合評價模型。
-
計算一致性比例
CR
:
-
對一致性比例
CR
進行判斷:如果
CR<0.1
,則判斷矩陣的一致性可以接受。
如果CR>0.1
,則要對判斷矩陣進行修正。
計算判斷矩陣的權重:
計算權重有三種方法:
算數平均法求權重:
步驟:
- 將判斷矩陣按照列歸一化(每一個元素除以其所在列的和)
我們看一個例子:
第一列:
第二列:
第三列:
於是我們得到以下表格:
- 將歸一化的各行相加:
相加後我們得到以下表格:
- 除以
n
得到最後的權重
幾何平均法求權重:
步驟:
-
將
A
的元素按照行相乘得到一個新的列向量在MATLAB中使用prod(A,2)命令即可以對一行進行相乘
A =
1.0000 2.0000 5.0000
0.5000 1.0000 2.0000
0.2000 0.5000 1.0000
使用prod(A,2)
命令:
>> prod(A,2)
ans =
10.0000
1.0000
0.1000
- 將新的向量的每個分量開
n
次方
>> ans.^(1/3)
ans =
2.1544
1.0000
0.4642
- 對該列向量進行歸一化即可得到權重向量
結果:
注: 權重和應爲1,這裏由於四捨五入所以會有可以忽略的差距。
特徵值法求權重:
步驟:
1.在MATLAB
中使用eig
命令求特徵值和特徵向量:
A =
1.0000 2.0000 5.0000
0.5000 1.0000 2.0000
0.2000 0.5000 1.0000
>> [v,r] = eig(A)
v =
-0.8902 + 0.0000i -0.8902 + 0.0000i -0.8902 + 0.0000i
-0.4132 + 0.0000i 0.2066 + 0.3578i 0.2066 - 0.3578i
-0.1918 + 0.0000i 0.0959 - 0.1661i 0.0959 + 0.1661i
r =
3.0055 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i
0.0000 + 0.0000i -0.0028 + 0.1290i 0.0000 + 0.0000i
0.0000 + 0.0000i 0.0000 + 0.0000i -0.0028 - 0.1290i
找出最大特徵值爲3.0055
2. 對求出的特徵向量進行歸一化即可得到我們的權重:
最大特徵值對應的特徵向量
-0.8902 + 0.0000i
-0.4132 + 0.0000i
-0.1918 + 0.0000i
歸一化:
0.5954
0.2764
0.1283
三種方法計算的權重結果:
將計算結果填入權重表,得到:
計算評價準則的權重:
- 得到評價準則的判斷矩陣:
- 用三種方法計算權重:
- 填入表格:
求出其它評價準則對應的權重:
彙總結果得到權重矩陣:
根據權重表格計算每個目標的得分:
類似我們求出:
結果:
因此最佳的旅遊景點是桂林
總結:
1.建立層次結構:
2.構造準則層之間判斷矩陣:
3.構造方案層之間判斷矩陣:
4.對以上每個判斷矩陣進行一致性檢驗(通過後才能計算權重):
5.通過檢驗後根據權重矩陣計算得分,並進行排序
三種方法計算權重:
注意事項:
- 一致矩陣不需要進行一致性檢驗,只有非一致矩陣的判斷矩陣才需要進行一致性檢驗
- 在論文寫作中,應該先進行一致性檢驗,通過檢驗後再計算權重,以上講解的只是爲了順應計算過程。
- 特徵值可用
MATLAB
進行計算,如果特徵值中有虛數,則比較的是特徵值的模長。 - 如果
CR > 0.1
,我們可以往一致矩陣上調整(這個就看你自己了,反正評委也不知道是吧~) - 平均隨機一致性指標
RI
的表格中n
最多是15
層次分析法的一些侷限性:
- 評價的準則層
n
不能太多(一般不超過十個),太多的話n
(最多是15)會很大,判斷矩陣和一致矩陣差異可能會很大。
代碼(含有詳細註釋):
disp('請輸入判斷矩陣A')
A=input('A=');
[n,n] = size(A);
% % % % % % % % % % % % %方法1: 算術平均法求權重% % % % % % % % % % % % %
Sum_A = sum(A);
SUM_A = repmat(Sum_A,n,1);
Stand_A = A ./ SUM_A;
disp('算術平均法求權重的結果爲:');
disp(sum(Stand_A,2)./n)
% % % % % % % % % % % % %方法2: 幾何平均法求權重% % % % % % % % % % % % %
Prduct_A = prod(A,2);
Prduct_n_A = Prduct_A .^ (1/n)
disp('幾何平均法求權重的結果爲:');
disp(Prduct_n_A ./ sum(Prduct_n_A))
% % % % % % % % % % % % %方法3: 特徵值法求權重% % % % % % % % % % % % %
[V,D] = eig(A);
Max_eig = max(max(D));
[r,c]=find(D == Max_eig , 1);
disp('特徵值法求權重的結果爲:');
disp( V(:,c) ./ sum(V(:,c)) )
% % % % % % % % % % % % %下面是計算一致性比例CR的環節% % % % % % % % % % % % %
CI = (Max_eig - n) / (n-1);
RI=[0 0.0001 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]; %注意哦,這裏的RI最多支持 n = 15
% 這裏n=2時,一定是一致矩陣,所以CI = 0,我們爲了避免分母爲0,將這裏的第二個元素改爲了很接近0的正數
CR=CI/RI(n);
disp('一致性指標CI=');disp(CI);
disp('一致性比例CR=');disp(CR);
if CR<0.10
disp('因爲CR<0.10,所以該判斷矩陣A的一致性可以接受!');
else
disp('注意:CR >= 0.10,因此該判斷矩陣A需要進行修改!');
end
可以參考的矩陣:
將以下五個矩陣依次輸入以上代碼中就可以直接求出各種結果
評價準則:
[1, 1/2, 4, 3, 3;
2, 1, 7, 5, 5;
1/4, 1/7, 1, 1/2, 1/3;
1/3, 1/5, 2, 1, 1;
1/3, 1/5, 3, 1, 1]
景色:
[1,2,5;
1/2,1,2;
1/5,1/2,1;]
花費:
[1,1/3,1/8;
3,1,1/3;
8,3,1;]
居住:
[1,1,3;
1,1,3;
1/3,1/3,1;]
飲食:
[1,3,4;
1/3,1,1;
1/4,1,1;]
交通 :
[1,1,1/4;
1,1,1/4;
4,4,1;]