失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 层次分析法python代码_Python 实现层次分析法

层次分析法python代码_Python 实现层次分析法

时间:2024-03-31 05:32:29

相关推荐

层次分析法python代码_Python 实现层次分析法

import csv

import numpy as np

import tensorflow as tf

#大概的思路是:

#1.首先输入每个指标下面对应的对比矩阵,每个这个矩阵是由专家比较每两个

#指标之间的相对性重要性形成的,将这个矩阵作为输入,首先计算这个矩阵是否能

#通过一致性的检验。在计算一致性时,要先求出该矩阵的特征值和特征向量。

'''c1,c2 = np.linalg.eig(C)

print (c1)

# [ 2. 1.]

print (c2)

#[[ 0.89442719 0.70710678]

# [ 0.4472136 0.70710678]]'''

class AHP:

def __init__(self,array):

self.row = len(array)

self.col = len(array[0])

def get_tezheng(self,array):#获取特征值和特征向量

te_val ,te_vector = np.linalg.eig(array)

list1=list(te_val)

print("特征值为:",te_val)

print("特征向量为:",te_vector)

#得到最大特征值对应的特征向量

max_val = np.max(list1)

index = list1.index(max_val)

max_vector = te_vector[:,index]

print("最大的特征值:"+str(max_val)+" 对应的特征向量为:"+str(max_vector))

return max_val,max_vector

def RImatrix(self,n):#建立RI矩阵

d = {}

n1 = [1,2,3,4,5,6,7,8,9]

n2 = [0,0,0.58,0.90,1.12,1.24,1.32,1.41,1.45]

for i in range(n):

d[n1[n]] = n2[n]

print("该矩阵在一致性检测时采用的RI值为:",d[n1[n]])

return d[n1[n]]

def test_consitstence(self,max_val,RI):#测试一致性

CI = (max_val-self.row)/(self.row-1)

CR = CI/RI

if CR < 0.10 :

print("判断矩阵的CR值为 "+str(CR) + "通过一致性检验")

return True

else:

print("判断矩阵的CR值为 "+str(CR) + "判断矩阵未通过一致性检验,请重新输入判断矩阵")

return False

def normalize_vector(self,max_vector):#特征向量归一化

vector_after_normalization=[]

sum0 = np.sum(max_vector)

for i in range(len(max_vector)):

vector_after_normalization.append(max_vector[i]/sum0)

print("该级指标的权重权重矩阵为: "+str(vector_after_normalization))

return vector_after_normalization

def weightCalculator(self, normalMatrix):#计算最终指标对应的权重值

#layers weight calculations.

listlen = len(normalMatrix) -1

layerWeights = list()

while listlen > -1:

sum = float()

for i in normalMatrix:

sum+= i[listlen]

sumAverage = round(sum / len(normalMatrix),3)

layerWeights.append(sumAverage)

listlen-=1

return layerWeights

import csv

import numpy as np

import tensorflow as tf

def main():#这里需要确定指标的规模即多少个一级指标,多少个二级指标,这样才能确定要计算多少个对比矩阵

array1=[]

array2=[]

def define_structure():

level_structure = []

level = int(input("请输入指标的级数:"))#输入比如说这是个三级指标体系

level0 = input("请输入一级下指标的个数:")

level.append(level0)

level2 = []

for i in range(level):#每一级指标下有多少具体的指标个数

rate_num = input("请输入" +str(i) "层下指标的个数:")

#level2.append(rate_num)

for j in range(rate_num ):

two_level_for_one = int(input("请输入第" +str(i)+ " 个一级指标对应的下级指标的个数:"))

level_structure.append(two_level_for_one )

return level_structure

n = level_structure

def creat_matrix(n):

for i in n:

length = input("请输入指标对比矩阵的阶数:")

length = int(length)

count=0

for i in range(length):

for j in range(length):

count += 1

x = input("请输入指标对比矩阵的第"+str(count)+ " 个元素:")

x = float(x)

array1.append(x)

for i in range(length*length):

if (i+1)%length==0:

array2.append(array1[i-length+1:i+1])

print(array2)

array2=np.mat(array2)

a=AHP(array2)

max_val,max_vector = a.get_tezheng(array2)

RI= a.RImatrix(length)

flag = a.test_consitstence(max_val,RI)

if flag:

weight = a.normalize_vector(max_vector)

main()

如果觉得《层次分析法python代码_Python 实现层次分析法》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。