AHP層次分析法基礎(chǔ)內(nèi)容及python代碼實現(xiàn)

概述

  • 層次分析法是指將一個復(fù)雜的多目標決策問題作為一個系統(tǒng)傀顾,將目標分解為多個目標或準則骗灶,進而分解為多指標(或準則友多、約束)的若干層次攀隔,通過定性指標模糊量化方法算出層次單排序(權(quán)數(shù))和總排序刻炒,以作為目標(多指標)决采、多方案優(yōu)化決策的系統(tǒng)方法。
  • 層次分析法是將決策問題按總目標坟奥、各層子目標树瞭、評價準則直至具體的備投方案的順序分解為不同的層次結(jié)構(gòu),然后用求解判斷矩陣特征向量的辦法爱谁,求得每一層次的各元素對上一層次某元素的優(yōu)先權(quán)重晒喷,最后再加權(quán)和的方法遞階歸并各備擇方案對總目標的最終權(quán)重,此最終權(quán)重最大者即為最優(yōu)方案访敌。
  • 層次分析法比較適合于具有分層交錯評價指標的目標系統(tǒng)凉敲,而且目標值又難于定量描述的決策問題。

基本步驟

1.建立層次結(jié)構(gòu)模型

  • 將問題包含的因素分層:最高層(解決問題的目的);中間層(選擇為實現(xiàn)總目標而采取的各種措施爷抓、方案所必須遵循的準則势决。也可稱策略層、約束層蓝撇、準則層等)果复;最低層(用于解決問題的各種措施、方案等)唉地。把各種所要考慮的因素放在適當(dāng)?shù)膶哟蝺?nèi)据悔。用層次結(jié)構(gòu)圖清晰地表達這些因素的關(guān)系。
  • 以干部選拔模型為具體實例展開論述耘沼。
  • 對三個干部候選人y1极颓、y2 、y3群嗤,按選拔干部的五個標準:品德菠隆、才能、資歷狂秘、年齡和群眾關(guān)系骇径,構(gòu)成如下層次分析模型: 假設(shè)有三個干部候選人y1、y2 者春、y3破衔,按選拔干部的五個標準:品德,才能钱烟,資歷晰筛,年齡和群眾關(guān)系,構(gòu)成如下層次分析模型:


    選拔干部層次分析模型.png

2.構(gòu)造成對比較矩陣

  • 比較第i個元素與第j個元素相對于上一層某個因素的重要性時拴袭,使用數(shù)量化的相對權(quán)重a_{ij}來描述读第。設(shè)共有n個元素參與比較,則A=(a_{ij})_{n×n}稱為成對比較矩陣拥刻。
標度 含義
a_{ij}=1 i與同樣重要性
a_{ij}=3 i比j稍微重要
a_{ij}=5 i比j明顯重要
a_{ij}=7 i比j強烈重要
a_{ij}=9 i比j極端重要
2怜瞒,4,6般哼,8 上述兩相鄰判斷的中值
倒數(shù) A和B相比如果標度為3吴汪,則B和A相比就是1/3
  • 選拔干部考慮5個條件:品德x1,才能x2蒸眠,資歷x3漾橙,年齡x4,群眾關(guān)系x5黔宛。某決策人用成對比較法近刘,得到成對比較矩陣如下:
    A= \left( \begin{matrix} 1 & 2 & 7 & 5 & 5\\ 1/2 & 1 & 4 & 3 & 3 \\ 1/7 & 1/4 & 1 & 1/2 & 1/3 \\ 1/5 & 1/3 & 2 & 1 & 1 \\ 1/5 & 1/3 & 3 & 1 & 1 \end{matrix} \right)

3.一致性檢驗

  • 一致矩陣
    一致矩陣.jpg

    如果A是完全一致的成對比較矩陣擒贸,應(yīng)該有a_{ij}a_{jk}=a_{ik},1\leq i,j,k\leq n.
  • 實際上,在構(gòu)造成對比較矩陣時并不一定能滿足一致矩陣的要求觉渴。因此介劫,退而要求成對比較矩陣具有一定的一致性,即可以允許成對比較矩陣存在一定程度的不一致性案淋。
  • 對一致矩陣座韵,其絕對值最大的特征值等于該矩陣的維數(shù)。對成對比較矩陣的一致性要求轉(zhuǎn)化為:其絕對值最大的特征值和該矩陣的維數(shù)相差不大踢京。


    一致性檢驗步驟.png
  • 上述對比矩陣A的絕對值最大的特征值為5.141誉碴,則CI=\frac{5.141-5}{5-1}=0.03525查表值RI=1.12,故RC=\frac{CI}{RI}=0.0315 \lt0.1瓣距。
    所以對比矩陣A的一致性可以接受黔帕。

4.權(quán)重的計算

  • 上述對比矩陣A的絕對值最大的特征值所對應(yīng)的特征向量為: p= \begin{bmatrix} -0.8399 & -0.4655 & -0.1014 & -0.1738 & -0.1935 \end{bmatrix}
  • 將該向量標準化,使得它的各分量都大于零蹈丸,各分量之和等于 1成黄。該特征向量標準化后為: w= \begin{bmatrix} 0.4734 & 0.2624 & 0.0572 & 0.0980 & 0.1091 \end{bmatrix}
  • 經(jīng)過標準化后向量稱為權(quán)向量。這里權(quán)向量反映了決策者選拔干部時逻杖,視品德條件最重要奋岁,其次是才能,再次是群眾關(guān)系荸百,年齡因素闻伶,最后才是資歷。各因素的相對重要性由權(quán)向量的各分量所確定够话。

5.層次總排序及決策

  • 要從三個候選人y1蓝翰,y2,y3中選一個總體上最適合上述五個條件的候選人更鲁。對此霎箍,對三個候選人y1奇钞,y2,y3分別比較他們的品德(x1)景埃,才能(x2)媒至,資歷(x3),年齡(x4)拒啰,群眾關(guān)系(x5)甲捏。
  • 先成對比較三個候選人的品德,得成對比較陣
    B1= \left(\begin{matrix} 1 & 1/3 & 1/8 \\3 & 1 & 1/3 \\8 & 3 & 1 \end{matrix} \right)
  • 對B1進行一致性檢驗,然后求得B1的權(quán)向量w1=\begin{bmatrix} 0.0819 & 0.2363 & 0.6817\end{bmatrix}
  • 分別比較三個候選人的才能获三,資歷,年齡理疙,群眾關(guān)系得成對比較陣:
    B2=\left(\begin{matrix} 1 & 2 & 5 \\ 1/2 & 1 & 2 \\ 1/5 & 1/2 & 1 \end{matrix}\right) B3=\left(\begin{matrix} 1 & 1 & 3 \\ 1 & 1 & 3 \\ 1/3 & 1/3 & 1 \end{matrix}\right)
    B4 =\left( \begin{matrix} 1 & 3 & 4 \\ 1/3 & 1/3 & 1\\8 & 3 & 1 \end{matrix}\right) B5=\left( \begin{matrix} 1 & 1/3 & 1/8 \\ 3 & 1 & 1/3 \\8 & 3 & 1 \end{matrix}\right)
  • 相應(yīng)的權(quán)向量為
    w2 =\begin{bmatrix} 0.5954 & 0.2764 & 0.1283\end{bmatrix} w3 =\begin{bmatrix} 0.4286 & 0.4286 & 0.1429\end{bmatrix} w4=\begin{bmatrix} 0.6337 & 0.1919 & 0.1743\end{bmatrix} w5=\begin{bmatrix} 0.3047 & 0.1667 & 0.5286 \end{bmatrix}
  • 由上述數(shù)據(jù)巷折,我們可以得到如下的一張表格:
權(quán)重指標 y1 y2 y3
x1 0.4734 0.0819 0.2363 0.6817
x2 0.2624 0.5954 0.2764 0.1283
x3 0.0572 0.4286 0.4286 0.1429
x4 0.0989 0.6337 0.1919 0.1743
x5 0.1091 0.3047 0.1667 0.5286
總分 0.3148 0.2459 0.4393

其中芯丧,總分的計算為\sum_{j=1}^5 x_j y_{ij},其中x_i代表第j個指標的權(quán)重波附,y_{ij}代表第i個候選人的第j個指標的得分艺晴。

  • 從三個候選人的得分情況看,y3的得分最高叶雹,故y3是第一干部候選人财饥。

總結(jié)

使用層次分析法换吧,

  • 首先折晦,要分析系統(tǒng)中各因素之間的關(guān)系,建立系統(tǒng)的遞階層次結(jié)構(gòu)沾瓦;
  • 其次满着,對于同一層次的各元素關(guān)于上一層某一準則的重要性進行兩兩比較谦炒,構(gòu)造兩兩比較矩陣;
  • 接著风喇,由判斷矩陣計算被比較元素對于該準則的相對權(quán)重宁改,并進行一致性檢驗;
  • 最后魂莫,計算各層元素對系統(tǒng)目標的合成權(quán)重还蹲,并進行排序。

參考文獻

https://wiki.mbalib.com/wiki/%E5%B1%82%E6%AC%A1%E5%88%86%E6%9E%90%E6%B3%95

附python代碼

import numpy as np
'''
@Description:
    求解矩陣的權(quán)向量
@para:
    成對比較矩陣
@return:
    權(quán)向量
'''
def abhWeightVector(Mat):
    sizeMat = Mat.shape[0]
    #print(Mat)
    #print(sizeMat)

    # 計算矩陣A的特征值耙考,特征向量
    eigenvalueMat, eigenvectorMat = np.linalg.eig(Mat)
    #print("特征值:", eigenvalueMat)
    #print("特征向量:", eigenvectorMat)
    
    # 將所有特征值取絕對值
    absEigenvalueMat = map(abs, eigenvalueMat)
    absEigenvalueMat = list(absEigenvalueMat)  
    #print(absEigenvalueMat)
    
    # 絕對值最大的特征值
    maxEigenvalueMat = max(absEigenvalueMat)
    #print("絕對值最大的特征值:", maxEigenvalueMat)
    
    # 絕對值最大的特征值的索引
    maxEigenvalueIndexMat = absEigenvalueMat.index(maxEigenvalueMat)
    #print(maxEigenvalueIndexMat)
    
    # 絕對值最大的特征值對應(yīng)的特征向量
    maxEigenvectorMat = eigenvectorMat[:, maxEigenvalueIndexMat]
    #print("絕對值最大的特征值對應(yīng)的特征向量:", maxEigenvectorMat)
    
    # 將上述特征向量標準化谜喊,即權(quán)向量   
    standardizeVectorMat = list(map(abs, maxEigenvectorMat)) / sum(list(map(abs, maxEigenvectorMat)))
    #print(standardizeVectorMat)
    
    # 計算不一致程度CI
    CI = (maxEigenvalueMat - sizeMat) / (sizeMat - 1)
    #print(CI)
    
    # 平均隨機一致性指標RI
    listRI = [0, 0, 0.58, 0.90, 1.12, 1.24, 1.32, 1.41, 1.45]
    
    #計算隨機一致性比率
    CR = CI / listRI[sizeMat - 1]
    #print(CR)
    
    return standardizeVectorMat
   

MatA = np.array([[1, 2, 7, 5 ,5],
                 [1/2, 1, 4, 3, 3],
                 [1/7, 1/4, 1, 1/2, 1/2],
                 [1/5, 1/3, 2, 1, 1],
                 [1/5, 1/3, 3, 1, 1]])
standardizeVectorMatA = abhWeightVector(MatA)
print(standardizeVectorMatA)

MatB1 = np.array([[1, 1/3, 1/8],
                  [3, 1, 1/3],
                  [8, 3, 1]])
standardizeVectorMatB1 = abhWeightVector(MatB1)
print(standardizeVectorMatB1)

MatB2 = np.array([[1, 2, 5],
                  [1/2, 1, 2],
                  [1/5, 1/2, 1]])
standardizeVectorMatB2 = abhWeightVector(MatB2)
print(standardizeVectorMatB2)

MatB3 = np.array([[1, 1, 3],
                  [1, 1, 3],
                  [1/3, 1/3, 1]])
standardizeVectorMatB3 = abhWeightVector(MatB3)
print(standardizeVectorMatB3)

MatB4 = np.array([[1, 3, 4],
                  [1/3, 1, 1],
                  [1/4, 1, 1]])
standardizeVectorMatB4 = abhWeightVector(MatB4)
print(standardizeVectorMatB4)

MatB5 = np.array([[1, 4, 1/4],
                  [1, 1, 1/4],
                  [4, 1, 1]])
standardizeVectorMatB5 = abhWeightVector(MatB5)
print(standardizeVectorMatB5)

MatB = np.array([standardizeVectorMatB1, 
                 standardizeVectorMatB2, 
                 standardizeVectorMatB3, 
                 standardizeVectorMatB4, 
                 standardizeVectorMatB5])
print(MatB)

sumY1 = 0
sumY2 = 0
sumY3 = 0
for i in range(0, MatA.shape[0]):
    sumY1 += standardizeVectorMatA[i] * MatB[i][0]
    sumY2 += standardizeVectorMatA[i] * MatB[i][1]
    sumY3 += standardizeVectorMatA[i] * MatB[i][2]
    
sumY = [sumY1, sumY2, sumY3]
print(sumY)
maxY = max(sumY)
theBestIndex = sumY.index(maxY)
print(theBestIndex)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市倦始,隨后出現(xiàn)的幾起案子斗遏,更是在濱河造成了極大的恐慌,老刑警劉巖鞋邑,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件诵次,死亡現(xiàn)場離奇詭異,居然都是意外死亡枚碗,警方通過查閱死者的電腦和手機逾一,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肮雨,“玉大人嬉荆,你說我怎么就攤上這事】岷” “怎么了鄙早?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長椅亚。 經(jīng)常有香客問我限番,道長,這世上最難降的妖魔是什么呀舔? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任弥虐,我火速辦了婚禮,結(jié)果婚禮上媚赖,老公的妹妹穿的比我還像新娘霜瘪。我一直安慰自己,他們只是感情好惧磺,可當(dāng)我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布颖对。 她就那樣靜靜地躺著,像睡著了一般磨隘。 火紅的嫁衣襯著肌膚如雪缤底。 梳的紋絲不亂的頭發(fā)上顾患,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天,我揣著相機與錄音个唧,去河邊找鬼江解。 笑死,一個胖子當(dāng)著我的面吹牛徙歼,可吹牛的內(nèi)容都是我干的犁河。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼魄梯,長吁一口氣:“原來是場噩夢啊……” “哼呼股!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起画恰,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤彭谁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后允扇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體缠局,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年考润,在試婚紗的時候發(fā)現(xiàn)自己被綠了狭园。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡糊治,死狀恐怖唱矛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情井辜,我是刑警寧澤绎谦,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站粥脚,受9級特大地震影響窃肠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜刷允,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一冤留、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧树灶,春花似錦纤怒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春州既,著一層夾襖步出監(jiān)牢的瞬間谜洽,已是汗流浹背萝映。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工吴叶, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人序臂。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓蚌卤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親奥秆。 傳聞我的和親對象是個殘疾皇子逊彭,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 文章轉(zhuǎn)載自 這里 最近在看數(shù)學(xué)建模的一些算法..一愣一愣的..發(fā)現(xiàn)一篇博客講解得很易懂..轉(zhuǎn)載收藏。轉(zhuǎn)載正文之后可...
    無令便逐風(fēng)閱讀 4,885評論 1 5
  • 如果寫這篇文章僅僅是介紹層次分析法的理論构订,顯得完全沒有必要侮叮。層次分析法作為最早接觸到的一批算法,登山悼瘾、旅游的決策案...
    巴拉巴拉_9515閱讀 32,065評論 0 5
  • 之前有整理過怎樣判斷指標的重要性囊榜,讀書筆記-確定指標重要性的方法 其中一個是矩陣圖法,就是指標兩兩進行對比亥宿,用0卸勺、...
    橘貓吃不胖閱讀 54,741評論 0 62
  • 如果你相信它是真的,它就是真的烫扼。 不管我選擇相信什么曙求,對我來說都會變成真的。 如果你忽然陷入經(jīng)濟困境映企,那就表明在你...
    緣方_8190閱讀 1,038評論 0 2
  • 記得第一次相遇悟狱,落幕黃昏月臺里,你含羞的小心翼翼堰氓,沉默不語芽淡。 我不敢向你靠近,卻陪你走過四季豆赏,我們相互了解彼此挣菲,種...
    黑色的煙火_23cd閱讀 274評論 0 0