冉偉剛
摘要:許多人利用層次分析法解決工作中遇到的問題時,受計算條件的限制 ,不能方便的給出結果,從而影響現場決策。利用 MATLAB對層次分析法的判斷、分析和計算過程進行處理后,為決策者提供方便、友好的對話界面,當決策者輸入自己的層次結構方案和判斷矩陣后迅速得出相應的結果,為解決實際問題提供一個快捷的方法。
關鍵詞:AHP;層次分析法;MATLA
中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2015)13-0234-02
Abstract: Many people use AHP to solve the problems encountered in the work, due to the calculation conditions, the results are not convenient, thus affecting the on-site decision-making. TheAHP judgment, analysis and calculation process using MATLAB, and provide a convenient and friendly interface for decision makers, decision makers when the input hierarchy of the program and their own judgment matrix quickly after the corresponding results, provide aquick method for solving practical problems.
Key words: AHP; Analytic Hierarchy Process;MATLAB
1 層次分析法簡介
層次分析法( The Analytic Hierarchy Process,簡稱AHP)由美國運籌學家T.L.Saaty提出,是一種定性與定量相結合的多目標決策分析技術,其基本原理是將待評價或識別的復雜問題分解成若干層次,由專家或決策者對所列指標通過重要程度的兩兩比較逐層進行判斷評分,利用計算判斷矩陣的特征向量確定下層指標對上層指標的貢獻程度或權重,從而得到最基層指標對于總體目標的重要性權重排序[1]。
AHP方法多用于戰(zhàn)略目標體系的層次結構分析和決策研究,也可應用于系統(tǒng)診斷中的重要性排序。本文結合實例介紹其工作步驟和具體方法,以及用MATLAB計算的過程。
2 層次分析法
1)明確問題,建立層次結構
本論文以一個例子來說明。假設研究對象是某工業(yè)企業(yè)。已知該企業(yè)的主要問題是多年經營虧損,經濟效益不好,希望通過系統(tǒng)診斷方法,找出影響企業(yè)經濟情況不好的因素,并給出解決問題的途徑。
為此,首先要請若干名專家對企業(yè)存在的問題進行診斷。經討論共提出7個問題,問題的層次結構如圖1所示。
2)分層次建立判斷矩陣
所謂判斷矩陣,是指用來分析第k+1層問題對與其對應的第K層問題相對重要性而建立的矩陣表達式。建立判斷矩陣一般自上而下地進行,即首先分析第二層B中各因素相對A而言的相對重要性,為此可構成A-B判斷矩陣。其一般形式如下:
bij的數值一般由若干熟悉情況的專家,按規(guī)定的記分標準分別打分,然后匯總取平均值。
同理,可得第三層C中各因素相對第二層B而言的相對重要性矩陣B1、B2、B3。
3)層次單排序
根據判斷矩陣去推算第K+1層各因素對第K層問題的相對重要性系數叫層次單排序。例如根據A—B判斷矩陣,去推算Bi(i=1,2,3)對問題A的相對重要性系數,記成WBi(i=1,2,3)。用向量表示成:
[WB=WB1WB2WB3且i=13WBi=1]
WBi的計算方法有三種:算術平均值法、幾何平均值法和最大特征根法。這里MATLAB程序使用最大特征根法。
最大特征根法是先求出根據專家評定得出的判斷矩陣B的最大特征根λmax,然后按下式:
3 MATLAB的實現
AHP法MATLAB可以定義一個m函數AHP來實現,代碼如下所示:
function [W,S]=AHP(AB,BC_R,B1,B2,B3)
[row1, col1] = size(BC_R);
[A,WA]= maxeigvalvec(AB);
[A,WB1]=maxeigvalvec(B1);
[A,WB2]=maxeigvalvec(B2);
[A,WB3]=maxeigvalvec(B3);
[RIA,CRA,CIA] = sglsortexamine(AB);
CI=[];
RI=[];
if nargin>=3
[RI1,CR1,CI1] = sglsortexamine(B1);
RI=[RI RI1];
CI=[CI CI1];
j=1;
for i=1:col1
if BC_R(1,i)==1
BC(1,i)=WB1(j);
j=j+1;
else
BC(1,i)=0;
end
end
end
{ nargin>=4、nargin>=5的情況和nargin>=3是一樣的就不在贅述}
RI
CI
W=WA'*BC;
BC=BC'
[Y,S]=sort(W,'descend');
S
%層次總排序的一致性檢驗
if (CI*WA)/(RI*WA)<0.1
disp('恭喜!恭喜!層次總排序通過一致性檢驗')
end
代碼解釋如下:
其中:函數參數AB是A—B矩陣,B1是B1—C矩陣,B2是B2—C矩陣,B3是B3—C矩陣,BC_R是B和C的關系矩陣,若B與C有關系則值是1,無關系是0,例如:在這個例子中BR_C是:
BR_C=
即矩陣BR_C第一行是B1與C1、C2、C3、C4、C5有關系,第二行是B2與C的C3、C4、C6、C7有關系,第三行是B3與C的C5、C6、C7有關系。
函數maxeigvalvec (AB)是求矩陣AB的最大特征根。
函數sglsortexamine(AB)是用來對AB矩陣進行一致性檢驗的,如果矩陣通過一致性檢驗則顯示['恭喜你!',inputname(1),'此矩陣通過一致性檢驗!'] ;否則顯示['對不起',inputname(1), '矩陣沒通過一致性檢驗,請重新調整判斷矩陣']。我們知道,為了層次排序的有效性,必須對判斷矩陣的評定結果進行一致性檢驗,所以用函數sglsortexamine()來進行一致性檢驗,方便用戶查看判斷矩陣是否合理,如果不能通過一致性檢驗,就要對矩陣進行改進。為把握起見,最后還對層次總排序就行了一致性檢驗,如果層次總排序通過一致性檢驗,則會顯示“恭喜!恭喜!層次總排序通過一致性檢驗”。
W=WA'*BC;為最后的層次總排序值。
最后用[Y,S]=sort(W,'descend');函數對W進行了排序,S的值就是排序的結果,S的值一目了然的顯示排序結果。
只要正確寫入層次分析法AHP函數的參數AB,BC_R,B1,B2,B3,即可一步計算出排序結果,方便易行。
4 結束語
AHP法是一種定性與定量相結合的、系統(tǒng)化、層次化的分析方法,由于它在處理復雜的決策問題上的實用和有效性,很快在世界范圍得到重視,它的應用以遍及經濟計劃和管理、能源政策和分配、行為科學、軍事指揮、運輸、農業(yè)、教育、人才、醫(yī)療、環(huán)境等領域,為了更好的實用它,本文論述了層次排序法的過程用MATLAB的m函數來實現,實現了用MATLAB的m函數一步出結果,免去了繁瑣的計算過程,給人們使用AHP法帶來方便。
參考文獻:
[1] 胡明甫. AHP層次分析法及MATLAB的應用研究[J]. 鋼鐵技術, 2004(2): 36-38.
[2] 李紹勤, 劉飛, 張崇. 層次分析法在車輛事故分析中的應用[J]. 陜西師范大學學報: 自然科學版, 2004(6): 214-218.
[3] 宋飛, 趙法鎖. 地下工程風險分析的層次分析法及MATLAB應用[J]. 地球科學與環(huán)境學報, 2008(9): 292-296.
[4] 焦樹鋒. AHP 法中平均隨機一致性指標的算法及MA TLAB 實現[J]. 太原師范學院學報: 自然科學版, 2006(12): 45-47.