层次分析法的python代码和原理

import torch

# 输入判断矩阵
print("输入判断矩阵")
A_str = input("A=").split()
# 使用input函数获取用户输入的字符串,并通过split方法将其分割成行列表。
A = torch.tensor([[float(x) for x in row.split(',')] for row in A_str], dtype=torch.float32).cuda()
# 使用列表推导式将每一行字符串分割成数字,并转换为浮点数,然后创建一个PyTorch张量(Tensor)。
# 将张量的数据类型指定为torch.float32。
# 使用.cuda()方法将张量移动到GPU上,以便进行GPU加速计算
n = A.size(0)  # 获取矩阵的行数,即n
# 获取矩阵A的行数,并将其存储在变量n中。
# 方法一 算术平均法求权重
Sum_A = torch.sum(A, dim=0)
Stand_A = A / Sum_A
# 计算A的每一列的和,得到Sum_A。
# 将矩阵A的每个元素除以其所在列的和,得到标准化后的矩阵Stand_A。
print("平均值为")
w1 = torch.sum(Stand_A, dim=1) / n
print(w1)
# 打印信息提示。
# 计算标准化矩阵Stand_A的每一行的平均值,得到权重向量w1。
# 打印权重向量w1

# 方法二, 特征值法求权重
eigenvalues, eigenvectors = torch.eig(A, eigenvectors=True)
# 使用torch.eig函数计算矩阵A的特征值和特征向量。
Max_eig = torch.max(eigenvalues[:, 0])
index = torch.argmax(eigenvalues[:, 0])
# 从特征值中找到最大的实部特征值,并存储在Max_eig中。
# 找到最大特征值的索引,并存储在index中。
print("特征值求权重的结果为:")
w2 = eigenvectors[:, index] / torch.sum(eigenvectors[:, index])
print(w2)
# 打印信息提示。
# 将对应的特征向量归一化,得到权重向量w2。
# 打印权重向量w2。
print("两种方法的平均值为:")
print((w1 + w2) / 2)
# 打印信息提示。
# 计算两种方法得到的权重的平均值,并打印。

# 计算一致性比例CR
CI = (Max_eig - n) / (n - 1)
# 计算一致性指标(CI),它是最大特征值与矩阵大小之差除以矩阵大小减1。
RI = torch.tensor([0.0001, 0.52, 0.89, 1.12, 1.36, 1.41, 1.46, 1.49, 1.52, 1.54, 1.56, 1.58, 1.59],
                  dtype=torch.float32).cuda()
# 创建一个包含随机一致性指标(RI)值的张量,并将其移动到GPU上
CR = CI / RI[n - 1]
# 计算一致性比例(CR),它是CI除以对应的RI值

print("最大特征值为:")
print(Max_eig)
print("一致性指标为CI=")
print(CI)
print("一致性比例为CR=")
print(CR)
# 打印最大特征值、一致性指标CI和一致性比例CR。
if CR < 0.10:
    print("CR<0.10,该判断矩阵的一致性可以接受")
else:
    print("注意,CR >=0.10,该判断举证需要进行修改!")
# 根据CR的值判断矩阵的一致性是否可以接受,并打印相应的信息。如果CR小于0.10,则认为矩阵的一致性是可以接受的;否则,需要进行修改。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值