由 陈欣. 模糊层次分析法在方案优选方面的应用[J]. 计算机工程与设计,2004,25(10):1847-1849. DOI:10.3969/j.issn.1000-7024.2004.10.069.
根据假期数模训练题改编的python代码,自己改美观点吧:
from numpy import * B=[] print('指标排名:') for i in range(0,8): B.append(int(input())) S=zeros(shape=(8,8)) for i in range(0,len(B)): for j in range(i,len(B)): if B[i]==B[j]: S[i][j]=0.5 S[j][i]=0.5 if B[i]>B[j]: S[i][j]=0 S[j][i]=1 if B[i]<B[j]: S[i][j]=1 S[j][i]=0 print("A-B优先关系矩阵:") print(S) #B-C优先关系矩阵 C=[0]*8 C[0]=array([[0.5,0,0,1],[1,0.5,0,1],[1,1,0.5,1],[0,0,0,0.5]]) C[1]=array([[0.5,0,0,0],[1,0.5,0,0],[1,1,0.5,0],[1,1,1,0.5]]) C[2]=array([[0.5,1,1,1],[0,0.5,0,1],[0,1,0.5,1],[0,0,0,0.5]]) C[3]=array([[0.5,1,0,0],[0,0.5,0,0],[1,1,0.5,1],[1,1,0,0.5]]) C[4]=array([[0.5,1,1,1],[0,0.5,1,1],[0,0,0.5,0],[0,0,1,0.5]]) C[5]=array([[0.5,1,1,1],[0,0.5,0,1],[0,1,0.5,1],[0,0,0,0.5]]) C[6]=array([[0.5,0,1,1],[1,0.5,1,1],[0,0,0.5,1],[0,0,0,0.5]]) C[7]=array([[0.5,0,0,0],[1,0.5,0,0],[1,1,0.5,0],[1,1,1,0.5]]) #转换成模糊一致矩阵 S=array(S) p=S.sum(axis=1) for i in range(0,8): for j in range(0,8): S[i][j]=(p[i]-p[j])/(8*2)+0.5 print('A-B模糊一致矩阵:') print(S) print('B-C模糊一致矩阵:') for i in range(0,8): r=C[i].sum(axis=1) for j in range(0,4): for k in range(0,4): C[i][j][k]=(r[j]-r[k])/(4*2)+0.5 print(C[i]) #层次单排序 su=[1]*8 for i in range(0,8): for j in range(0,8): su[i]*=S[i][j] su[i]=su[i]**(1/8) SU=sum(su) su=array(su) w0=su/SU print('各指标权重:') print(w0) w=[] for i in range(0,8): zu=[1]*4 for j in range(0,4): for k in range(0,4): zu[j]*=C[i][j][k] zu[j]=zu[j]**(1/4) ZU=sum(zu) zu=array(zu) w.append(zu/ZU) print(w[i]) #层次总排序 w0=array(w0) w=array(w) y=dot(w0.T,w) print('总分:') y=y.T m=dict() n=['C1','C2','C3','C4'] for i in range(0,4): m[n[i]]=y[i] print(m)