模糊层次分析法python

由 陈欣. 模糊层次分析法在方案优选方面的应用[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)

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值