今天用將近一天的時間學習了層次分析模型(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),就得到總的分數,排序,作出決策。