层次分析模型

一、算法简介

决策问题:面临多种方案,需要根据一定的标准选择某一种方案

归一化处理(让指标在同一数量级,且保证在同一指标下其差距不变):

 给指标加上权重(加权)

科学地设定权重?

 

 

 

二、python代码

import numpy as np
#numpy Pandas matolotlib 这三个库需要掌握
A=np.array([[1,2,3,5],[1/2,1,1/2,2],[1/3,2,1,2],[1/5,1/2,1/2,1]])
n=A.shape[0]#获取A的行数,1则是获取列数
#求出最大特征值以及对应的特征向量
#np.linalg.eig用于计算方阵的特征值和特征向量
eig_val,eig_vec=np.linalg.eig(A)
max_eig=max(eig_val)#特征值的最大值
CI=(max_eig-n)/n
#RI最多支持n=15
RI=[0,0.0001,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]
CR=CI/RI[n-1]
print('一致性指标CI=',CI)
print('一致性比例CR=',CR)
if CR<0.10:
    print('A矩阵的一致性可以接受')
    #np.sum计算一维数组中所有元素的总和
    #通过axis控制对行或对列,行(1),列(0)
    #算术平均法求权重
    Asum=np.sum(A,axis=0)
    stand_A=A/Asum#归一化处理
    Asumr=np.sum(stand_A,axis=1)
    weight=Asumr/n#计算权重向量
    print(weight)
    #几何平均法求权重——————————————————————————————————
    #np.prod计算一维数组中所有元素的乘积
    prod_A=np.prod(A,axis=1)
    #对新的向量求1/n次方
    prod_n_A=np.power(prod_A,1/n)
    #归一化处理
    re_prod_A=prod_n_A/np.sum(prod_n_A)
    print(re_prod_A)
    #特征值法求权重——————————————————————————————
    max_index=np.argmax(eig_val)
    max_vector=eig_vec[:,max_index]
    weight=max_vector/np.sum(max_vector)#归一化处理
    print(weight)
else:
    print("矩阵需要修改")
    #修改函数



猜你喜欢

转载自blog.csdn.net/m0_74807013/article/details/140648799