今天用將近一天的時間學習了層次分析模型(AHP),主要參考了一份pdf,這個網站,和暨南大學章老師的課件,現寫出一些自己總結的要點。
一、層次分析法的基本步驟:
角度一:
實際問題——分解——>多個因素——建立——>層次結構—
—確定——>諸因素的相對重要性——計算——>權向量—
—判斷——>綜合決策
角度二:
建立層次結構模型——>構造判斷矩陣——>層次單排序——>一致性檢驗——>層次總排序。
二、幾個理解的重點
1.正反矩陣
注意:


這里想了下,用最大特征根的特征向量替代A,可能是為了最大限度的保存原始數據(A)的信息量(不確定。。。)
3.一致性檢驗

一致性檢驗,具體還要涉及組合一致性檢驗。
三、MATLAB實現
這里先是搜的資料,看到這段代碼,代碼寫得很清晰,這里直接貼在這里。
clc;
clear;
A=[1 1.2 1.5 1.5;
0.833 1 1.2 1.2;
0.667 0.833 1 1.2;
0.667 0.833 0.833 1];
%因素對比矩陣A,只需要改變矩陣A
[m,n]=size(A); %獲取指標個數
RI=[0 0 0.58 0.90 1.12 1.24 1.32 1.41 1.45 1.49 1.51];
R=rank(A); %求判斷矩陣的秩
[V,D]=eig(A); %求判斷矩陣的特征值和特征向量,V特征值,D特征向量;
tz=max(D);
B=max(tz); %最大特征值
[row, col]=find(D==B); %最大特征值所在位置
C=V(:,col); %對應特征向量
CI=(B-n)/(n-1); %計算一致性檢驗指標CI
CR=CI/RI(1,n);
if CR<0.10
disp('CI=');disp(CI);
disp('CR=');disp(CR);
disp('對比矩陣A通過一致性檢驗,各向量權重向量Q為:');
Q=zeros(n,1);
for i=1:n
Q(i,1)=C(i,1)/sum(C(:,1)); %特征向量標准化
end
Q %輸出權重向量
else
disp('對比矩陣A未通過一致性檢驗,需對對比矩陣A重新構造');
end
這里是對AHP的一個初步的認識,之后還要深入學習,到時候再繼續總結。
#############2016-10-11補更#######################
今天交流群有人問起AHP的一個問題,不太會,就回來再次復習一下,又學到一點知識。看看之前寫的,感覺好亂。。。也不刪除了,就當個預備知識和。。娛樂吧。
這里主要寫下一些要點和細節。
一、AHP流程

1.建立層次結構模型

2.構建Z-C判斷矩陣,設為A。
這里我們要確定准則層C中,各個因素的權重,為此我們要計算判斷矩陣A的最大的特征值及其特征向量。
此時,我們要對A進行一致性檢驗,只有A為一致陣(關於一致陣,前文有說明)或者其不一致程度在一個特定范圍內時,才能將其特征根對應的特征向量作為被比較因素的權量。
一般情況下,矩陣A是不一致的,所以我們此時要進行一致性檢驗(具體在前文也有說明)。
通過一致性檢驗后,就計算得到A的最大特征值及其對應的特征向量,這個特征向量即為各個准則的權重。

3.構建C-P矩陣,層次單排序。


對應的特征向量矩陣如下:

這個矩陣的每一行代表一個候選人的在健康,知識業務等六個方面的權重大小。
4.構建Z-P矩陣,層次總排序,決策。

總的來說AHP還是那句,先分解再綜合。拿上面的例子來說,我要從三人中選一名領導,那么我通過6個不同的角度來為這三人打分,首先確定這6個角度在你心目中的比重大小(Z-C),之后再通過對比看三人分別在這6個角度的得分(C-P)。最后再和對應角度的權重相乘(Z-P),就得到總的分數,排序,作出決策。
