試論基於Matlab的層次分析法與運用

才智咖 人氣:1.69W

摘要:本文通過使用Matlab軟體進行程式設計,在滿足同一層次中各指標對所有的下級指標均產生影響的假定條件下,實現了層次分析法的分析運算。本程式允許使用者自由設定指標層次結構內的層次數以及各層次內的指標數,通過程式的迴圈,使用者只需輸入判斷矩陣的部分資料,程式可依據層次分析法的計算流程進行計算並作出判斷。本程式可以方便地處理層次分析法下較大的運算量,解決層次分析法的效率問題,提高計算機輔助決策的時效性。

試論基於Matlab的層次分析法與運用

關鍵詞:Matlab層次分析法 判斷矩陣 決策

在當前資訊化、全球化的大背景下,傳統的手工計算已不能滿足人們高效率、高準確度的決策需求。因此計算機輔助決策當仁不讓地成為了管理決策的新工具、新方法。基於此,本文在充分發揮計算機強大運算功能的基礎上,選用美國MathWorks公司的整合數學建模環境Matlab R2009a作為開發平臺,使用M語言進行程式設計,對計算機輔助決策在層次分析法中的運用進行討論。試圖通過程式實現層次分析法在計算機系統上的運用,為管理決策探索出新的道路職稱論文。

1 層次分析法的計算流程

根據層次分析法的相關理論,層次分析法的基本思想是將複雜的決策問題進行分解,得到若干個下層指標,再對下層指標進行分解,得到若干個再下層指標,如此建立層次結構模型,然後根據結構模型構造判斷矩陣,進行單排序,最後,求出各指標對應的權重係數,進行層次總排序。

1.1 構造層次結構模型 在進行層次分析法的分析時,最主要的步驟是建立指標的層次結構模型,根據結構模型構造判斷矩陣,只有判斷矩陣通過了一致性檢驗後,方可進行分析和計算。其中,結構模型可以設計成三個層次,最高層為目標層,是決策的目的和要解決的問題,中間層為決策需考慮的因素,是決策的準則,最低層則是決策時的備選方案。一般來講,準則層中各個指標的下級指標數沒有限制,但在本文中設計的程式尚且只能在各指標具有相同數量的下級指標的假定下,完成層次分析法的分析,故本文後文選取的案例也滿足這一假定。

1.2 建立判斷矩陣 判斷矩陣是表示本層所有因素針對上一層某一個因素的相對重要性的比較給判斷矩陣的要素賦值時,常採用九級標度法(即用數字1到9及其倒數表示指標間的相對重要程度),具體標度方法如表1所示。

1.3 檢驗判斷矩陣的一致性 由於多階判斷的複雜性,往往使得判斷矩陣中某些數值具有前後矛盾的可能性,即各判斷矩陣並不能保證完全協調一致。當判斷矩陣不能保證具有完全一致性時,相應判斷矩陣的特徵根也將發生變化,於是就可以用判斷矩陣特徵根的變化來檢驗判斷的一致性程度。在層次分析法中,令判斷矩陣最大的特徵值為λmax,階數為 n,則判斷矩陣的一致性檢驗的指標記為:

CI的值越大,判斷矩陣的一致性越差。當階數大於2時,判斷矩陣的一致性指標CI與同階平均隨機一致性指標RI之比稱為隨機一致性比率,其中RI的值由表2確定,CR的計算公式為:

當CR0.1時,即可認為判斷矩陣具有滿意的一致性。然而由於在為各指標間相互重要性程度大小的判定過程中存在人為主觀因素,因此在判斷矩陣不能通過一致性檢驗時,需要對各指標間相互重要性程度重新進行賦值,直至其通過矩陣一致性檢驗。其最大特徵值對應的特徵向量即為該指標相對於上一級指標的重要性排序。

1.4 進行層次總排序 在通過層次單排序得出各指標相對上一級指標的重要性排序向量後,沿遞階層次結構逐級依次由下往上進行矩陣計算,則可得到各底層指標對最高層的相對重要性權重,從而可對各底層指標的優先次序進行排序,找出重點指標並予以特別關注。

2 Matlab層次分析法程式設計思路

Matlab是矩陣實驗室(Matrix Laboratory)的簡稱,是美國MathWorks公司出品的數學軟體,用於演算法開發、資料視覺化、資料分析以及數值計算的高階技術計算語言和互動式環境。Matlab可以進行矩陣運算、繪製函式和資料影象、設計演算法、建立使用者介面、連線用其他程式語言編寫的程式等。Matlab以矩陣為計算單位, 採用M語言作為程式語言,與C語言有諸多相似之處,並可方便地與C/C++、Microsoft Excel等工具和軟體進行結合併進行程式碼共享和資料交換,可以方便地進行數值分析、影象處理等功能,配合功能強大的統計和金融工具箱,Matlab已經可以在概率統計、經濟管理等方面發揮強大的作用。

筆者所程式設計序即是運用Matlab豐富的函式、矩陣運算和程式控制功能,探索其在層次分析法分析中的運用。程式通過三層迴圈結構,按照表1所示的方法和規則,實現多個層次上各個判斷矩陣的輸入和生成,並可以通過計算它們的特徵值,按照上述公式 ⑴、公式⑵和表2所示的方法進行矩陣的一致性檢驗。當所有的判斷矩陣一致性檢驗均通過後,程式將對各層次從下往上依次計算,最終得出各底層指標相對於準則層的權重係數,從而有助於選擇最優方案,程式流程如圖1所示,其中的平行四邊形表示輸入資料,菱形表示判斷,根據判斷結果的不同出現2個分支。

程式中,用於生成判斷矩陣的部分程式如下:

for a=1:mp

for b=1:mp

A(b,b)=1;

if a   fprintf(‘Line %i, Row %i“n‘,[a;b]);

A(a,b)=input(‘Please input the value: ‘);

A(b,a)=1/A(a,b);

end

end

生成層次總排序權重矩陣的部分程式如下:

for r=p-1:1

v=[‘vect=vect*vector‘ int2str(r)];

evalc(v)

end

fprintf(‘The final judging vector is:‘)

fprintf(‘“n%.4f‘,vect)

[m,maxpl]=max(vect);

fprintf(‘“n“nThe Scheme %i is the best solution.“n“n‘,maxpl)

其中,mp為該層內的指標數,p為指標的層數,均在程式開始時由使用者指定;vect初始被賦值為空矩陣,經迴圈後生成第一指標層的判斷向量;m為vect向量的最大值,maxpl記錄該最大值所處的位置。

由於本程式結構上的限制,本程式尚且只能在同一層次各個指標均對所有下一層次指標產生影響時處理層次分析法的問題,故本文舉例亦遵照該假定進行。