AHP層次分析法
1.層次分析法
實(shí)現(xiàn)標(biāo)準(zhǔn)之間相對(duì)重要程度,并給出決策方案中每個(gè)標(biāo)準(zhǔn)的權(quán)重,利用權(quán)數(shù)求出各個(gè)方案的優(yōu)劣次序。
2.應(yīng)用步驟
1.建立層次結(jié)構(gòu)模型
該層主要有三個(gè)方面:
- 目標(biāo)層
- 準(zhǔn)則層
- 領(lǐng)域?qū)樱ǜ鞣N解決問(wèn)題的措施和方案)
這里選擇了一個(gè)旅游問(wèn)題的層次分析模型來(lái)直觀的展示三個(gè)層的關(guān)系:
如果將三個(gè)層放在實(shí)際解決問(wèn)題的時(shí)候,其依次對(duì)應(yīng)的就是:
目標(biāo)層:考慮解決什么樣的問(wèn)題?
準(zhǔn)則層:考慮解決問(wèn)題的決策因素?
領(lǐng)域?qū)樱嚎紤]解決問(wèn)題的方案。
2.構(gòu)造判斷矩陣
1)判斷矩陣標(biāo)度方法表
比較各層各個(gè)因素對(duì)于下一層的重要性,其判斷矩陣需要使用判斷矩陣aij的標(biāo)度方法表:
2) 構(gòu)造判斷矩陣A:
先構(gòu)造方案層的各個(gè)判斷矩陣(Pn——Cn):
構(gòu)造準(zhǔn)則層對(duì)于目標(biāo)層的各個(gè)判斷矩陣(Cn——O):
3.計(jì)算單層權(quán)向量并做一致性檢驗(yàn)
能否確認(rèn)層次單排序,需要進(jìn)行一致性檢驗(yàn),一致性檢驗(yàn)指的是判斷矩陣確定不一致的允許范圍。
4.一致性檢驗(yàn)
1) 層次分析法中構(gòu)造的判斷矩陣是正互反矩陣。
小tips
:正互反矩陣中各行各列是否呈倍數(shù)關(guān)系,即可判斷其是否為一致矩陣。
2)一致性檢驗(yàn)原理:
檢驗(yàn)我們構(gòu)造的判斷矩陣和一致矩陣是否有太大的差別,也就是檢驗(yàn)特征值和n相差大小。
3)一致性檢驗(yàn)數(shù)學(xué)原理
由引理可知:一直矩陣有一個(gè)特征值為n,其余特征值均為0。并且,當(dāng)特征值為n時(shí),對(duì)應(yīng)的特征向量剛好為:從上圖可以看出,當(dāng)判斷矩陣越不一致時(shí),最大特征值與n相差就越大。
4)一致性檢驗(yàn)計(jì)算過(guò)程
Q1
:為什么要這樣構(gòu)造CI,為什么要以0.1為劃分依據(jù)。答
:通過(guò)多次蒙特卡羅模擬得到的最佳方案。
5.一致矩陣計(jì)算權(quán)重
1)求權(quán)重實(shí)例:
2)求權(quán)重的幾種方法:
方法一:
算術(shù)平均法求權(quán)重方法二:
幾何平均法求權(quán)重方法三:
特征值法求權(quán)重
步驟1:求出矩陣A的最大特征值和對(duì)應(yīng)的特征向量
步驟2:對(duì)求出的特征向量進(jìn)行歸一化得到權(quán)重
6.層次總排序及其一致性檢驗(yàn)
- 計(jì)算某一層次所有因素對(duì)于最高層(總目標(biāo))相對(duì)重要性的權(quán)重,稱為層次總排列。
- 這一過(guò)程是從最高層次到最低層次依次進(jìn)行。
3.層次分析法的一些局限性
1)評(píng)價(jià)的決策層不能太多,太多的話n會(huì)很大,判斷矩陣和一致矩陣差異性可能會(huì)很大
2) 如果決策層中指標(biāo)的數(shù)據(jù)是已知的,如何利用這些數(shù)據(jù)來(lái)使得評(píng)價(jià)更標(biāo)準(zhǔn)?
4.單層AHP應(yīng)用(領(lǐng)域?qū)右呀?jīng)給出):旅游目的地選擇代碼實(shí)例
- Cn層到O層的判斷矩陣:
- 輸入判斷矩陣:
import numpy as np
A=np.array([[1,1/2,4,3,3],
[2,1,7,5,5],
[1/4,1/7,1,1/2,1/3],
[1/3,1/5,2,1,1],
[1/3,1/5,3,1,1]])
print(A)
3. 判斷矩陣的形狀:
[m,n]=A.shape
print(m,n)
4. 輸出矩陣A的特征值和特征向量:
V,D=np.linalg.eig(A)
print("特征值為:")
print(V)
print("特征向量:")
print(D)
5. 輸出最大特征值和特征向量:
max_V=np.max(V)
print(max_V)
k=[i for i in range(len(V)) if V[i]==max_V]
max_D=-D[:,k]
print(max_D)
6. 計(jì)算權(quán)重:
weight=np.zeros((n,1))
weight
for i in range(0,n):
weight[i]=max_D[i]/np.sum(max_D)
Q=weight
print(Q)
7. 一致性檢驗(yàn):
CI=(max_V-n)/(n-1)
RI=[0,0,0.58,0.9,1.12,1.24,1.32,1.41,1.45,1.49,1.52,1.54,1.56,1.58,1.59]
RI_1=RI[n-1]
CR=CI/RI_1
if CR>=0.1:
print('沒有通過(guò)特征值檢驗(yàn)')
else:
print('通過(guò)一致性檢驗(yàn)')
8. 計(jì)算評(píng)分:
假設(shè)已知蘇杭、北戴河、桂林三個(gè)方案層對(duì)于準(zhǔn)則層的評(píng)分:
p = np.mat('8 7 6 8 7;7 8 8 7 8;5 7 6 7 7')
score=p*Q
for i in range(len(score)):
print("score{}:".format(i),float(score[i]))
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-763004.html
5.多層AHP應(yīng)用:旅游選擇問(wèn)題代碼實(shí)例
import numpy as np
def AHP(array_matrix):
#N的維度(行)
N=array_matrix.shape[0]
#RI表
list_RI=[0,0,0.52,0.89,1.12,1.26,1.36,1.41,1.46,1.49,1.52,1.54,1.56,1.58,1.59]
#求特征值和特征向量
arr_V,arr_D=np.linalg.eig(array_matrix)
#求最大特征值
max_arr_V=np.max(arr_V)
#最大特征值對(duì)應(yīng)的index
max_index=[i for i in range(len(arr_V)) if arr_V[i]==np.max(arr_V)]
max_arr_D=-arr_D[:,max_index]
#特征向量歸一化(求權(quán)重)
max_arr_D=max_arr_D/sum(max_arr_D)
CI=(max_arr_V-N)/(N-1)
RI=list_RI[N-1]
#進(jìn)行一致性檢驗(yàn)
is_consistence=False
if N<3:
is_consistence=True
elif CI<0.1:
is_consistence=True
else:
is_consistence=False
#返回最大特征值,最大特征向量,是否滿足一致性檢驗(yàn)
return max_arr_V,max_arr_D,is_consistence
a=np.array(["蘇杭","北戴河","桂林"])
#Cn——O 準(zhǔn)則層——目標(biāo)層判斷矩陣
A=np.array([[1,1/2,4,3,3],[2,1,7,5,5],[1/4,1/7,1,1/2,1/3],[1/3,1/5,2,1,1],[1/3,1/5,3,1,1]])
#Pn——Cn 領(lǐng)域?qū)印獪?zhǔn)則層判斷矩陣
B1 = np.array([[1,2,4],[1/2,1,2],[1/4,1/2,1]])
B2 = np.array([[1,1/3,1/8],[3,1,1/3],[8,3,1]])
B3 = np.array([[1,1,3],[1,1,3],[1/3,1/3,1]])
B4 = np.array([[1,3,4],[1/3,1,1],[1/4,1,1]])
B5 = np.array([[1,1,1/4],[1,1,1/4],[4,4,1]])
#將準(zhǔn)則層因素判斷矩陣合并方便計(jì)算
B=np.array([B1,B2,B3,B4,B5])
#返回準(zhǔn)則層——目標(biāo)層判斷矩陣的 最大特征值、對(duì)應(yīng)特征向量、是否滿足一致性檢驗(yàn)
A_max_arr_V,A_max_arr_D,A_is_consistence=AHP(A)
#分別返回判斷矩陣B的 最大特征值、對(duì)應(yīng)特征向量、是否滿足一致性檢驗(yàn)
B_max_arr_V=[]
B_max_arr_D=[]
All_B_is_consistence=[]
for i in B:
max_B_arr_V1,max_B_arr_D1,B_is_consistence=AHP(i)
B_max_arr_V.append(max_B_arr_V1)
B_max_arr_D.append(max_B_arr_D1)
All_B_is_consistence.append(B_is_consistence)
if not A_is_consistence:
print("準(zhǔn)則層對(duì)目標(biāo)層的判斷矩陣未通過(guò)一致性檢驗(yàn),請(qǐng)進(jìn)行修改")
else:
if not all(All_B_is_consistence):
for i in range(len(All_B_is_consistence)):
if not All_B_is_consistence[i]:
print("方案曾對(duì)于準(zhǔn)則層各個(gè)因素判斷矩陣第"+str(i+1)+"個(gè)矩陣未通過(guò)一致性檢驗(yàn),請(qǐng)進(jìn)行修改")
else:
#總排序:準(zhǔn)則層的最大特征向量的轉(zhuǎn)置乘以目標(biāo)層的最大特征向量,找到總排序中最大的
w_total=np.array(B_max_arr_D).T.dot(A_max_arr_D)
print("所有判斷矩陣均通過(guò)一致性檢驗(yàn)!\n方案層對(duì)目標(biāo)層的權(quán)重為:")
print(w_total)
choose=np.argmax(w_total)
print(choose)
print("最佳方案為第"+str(np.argmax(w_total)+1)+"個(gè)方案,該方案為"+a[np.argmax(w_total)])
輸出方案結(jié)果:
綜上所述,AHP層次分析法求解最終方案為桂林文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-763004.html
到了這里,關(guān)于【AHP層次分析法】原理+應(yīng)用步驟+旅游目的地選擇實(shí)例應(yīng)用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!