AHP(层次分析法)python实现_python ahp_Go~Go~Go~的博客-程序员秘密

技术标签: 算法  python  线性代数  

一、源代码
输入正互反矩阵,先进行一致性检验,判断是否通过,通过后返回权重。

def AHP(A) -> np.array:
    # 平均随机一致性指标。
    RI_dict = {1: 0, 2: 0, 3: 0.58, 4: 0.90, 5: 1.12, 6: 1.24, 7: 1.32, 8: 1.41, 9: 1.45, 10: 1.49}
    n = len(A)
    for i in range(1, n):
        for k in range(i):
            A[i][k] = 1 / A[k][i]
    A = np.array(A)
    w, v = np.linalg.eig(A)
    lambda_max = np.max(abs(w))
    index = list(w).index(abs(w).max())
    CI = (lambda_max - n) / (n - 1)
    RI = RI_dict[n]
    CR = CI / RI
    y = 0
    if CR < 0.1:
        print("随机一致性指标为{},判断矩阵具有满意的一致性。".format(CR))
        x = v[:, index].sum(axis=0)  # 对列向量求和,对于第一列求和
        y = v[:, index] / x  # 第一列进行归一化处理
        print("最大的特征值为:", lambda_max)
        print("对应的特征向量为:", abs(y).round(3))
    else:
        print("随机一致性指标为{},判断矩阵不具有满意的一致性。".format(CR))
    print("各指标权重为:", abs(y))
    return abs(y)

二、例子

X = [[1, 1 / 5, 1, 1 / 3, 1, 1],
     [5, 1, 5, 3, 7, 7],
     [1, 1 / 5, 1, 3, 5, 5],
     [3, 1 / 3, 1 / 3, 1, 1, 1],
     [1, 1 / 7, 1 / 5, 1, 1, 1],
     [1, 1 / 7, 1 / 5, 1, 1, 1]]
W = AHP(X)
print()
print(W)

输出

随机一致性指标为0.0993908598585786,判断矩阵具有满意的一致性。
最大的特征值为: 6.616223331123187
对应的特征向量为: [0.083 0.475 0.205 0.108 0.065 0.065]
各指标权重为: [0.0828432  0.47512185 0.2046549  0.10769012 0.06484497 0.06484497]

[0.0828432  0.47512185 0.2046549  0.10769012 0.06484497 0.06484497]

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/js010111/article/details/120245369

智能推荐

JSF简单实例及无法正常访问的解决方法(404和The markup in the document preceding the root element must be well-formed. )_jsf 404 errorpage_ly91的博客-程序员秘密

一、HTTP Status 404 - /JSFLoginDemo/userLogin.faces去除如下红色配置即可正常访问:xml version="1.0" encoding="UTF-8"?> xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instan

Android4.4 SystemUI分析之DessertCase_dztai的博客-程序员秘密

在SystemUI中有一个Activity可以显示所有的Logo这个Activity涉及到的图标存放在SystemUI/res/drawable-nodpi目录下在这里我自己写了个小的测试程序,把相关的文件拿出来DessertCase.java、DessertCaseDream.java、DessertCaseView.java,只要是在DessertCaseView这个V

一步一个脚印学习WCF系列之WCF契约设计—2-复杂类型序列化之可序列化类型SerializableAttribute..._weixin_34319999的博客-程序员秘密

  阅读目录  一:数据序列化流程图  二:SerializableAttribute  一:数据序列化流程图    在WCF当中是通过序列化器来进行序列化的,大家可以通过这个图看到,如果我们希望传递一个数据的话或者说我们希望来传递一个对象,从客户端到服务器端或者从服务器端到客户端,我们需要进行数据的序列化,对数据进行序列化我们可以通过DataContractAttribute的数...

【Linux】test命令_linux 查询包含test 的进程数_michellechouu的博客-程序员秘密

检测系统是否包含某些文件或者相关属性时,test命令是个很好的命令, 加上 && 及 || 还能更人性化地显示结果# test -e new && echo "exist" || echo "not exist"not exist更多用法:测试的标志代表意义1. 关於某个档名的『文件类型』判断,如 test -e filename 表示存在否

python 使用Counter统计列表中元素的频度_counter函数如何计算元素的最高频次_huizhang0110的博客-程序员秘密

from collections import Counterimport re# 统计列表中次数出现最高的单词的频次a = [12, 5, 6, 4, 6, 5, 5, 7]print(Counter(a).most_common())# 拥挤英文文章中单词的频度with open("LICENSE") as f: contend = f.read()# 将文本转换为单词列表

fastjson 添加key value_fastjson总结_weixin_39772651的博客-程序员秘密

近期做接口自动化时,遇到一些问题,当后端某个查询接口将参数返回给前端接口,另一个接口调用此参数,但里面的参数需要前一个接口进行相应转换且参数类型为json套json格式,带有转义字符:;后端返回结果类型:{ "msgList":null, "success":true, "code":"200", "message":"", "data":"{"al":{"A":"a...

随便推点

Python_最高分最低分平均分_Rookie_Max的博客-程序员秘密

列表、max()、min()、sum()、len()函数的应用体会列表:对多个数据进行统一操作!!""" 在终端中循环录入学生成绩,如果录入空,则停止,打印最高分,最低分,平均分"""grade = []while True: str_score = input('请输入成绩:') if str_score == '': print("最高分:" ...

爬虫突破封禁的6种常见方法_whackw的博客-程序员秘密

在互联网上进行自动数据采集(抓取)这件事和互联网存在的时间差不多一样长。今天大众好像更倾向于用“网络数据采集”,有时会把网络数据采集程序称为网络机器人(bots)。最常用的方法是写一个自动化程序向网络服务器请求数据(通常是用 HTML 表单或其他网页文件),然后对数据进行解析,提取需要的信息。本文假定读者已经了解如何用代码来抓取一个远程的 URL,并具备表单如何提交及

Java int数据类型在Windows32&64位系统有什么区别_ノBye~的博客-程序员秘密

一、64位系统和32位有什么区别? 1、64bit CPU拥有更大的寻址能力,最大支持到16GB内存,而32bit只支持4G内存2、64位CPU一次可提取64位数据,比32位提高了一倍,理论上性能会提升1倍。但这是建立在64bit操作系统,64bit软件的基础上的。 什么是64位处理器?之所以叫做“64位处理器”,是因为电脑内部都是实行2进制运算,处理器(CPU)一次处理数据的...

直播 | AAAI 2021最佳论文:比Transformer更有效的长时间序列预测_PaperWeekly的博客-程序员秘密

「AI Drive」是由 PaperWeekly 和 biendata 共同发起的学术直播间,旨在帮助更多的青年学者宣传其最新科研成果。我们一直认为,单向地输出知识并不是一个最好的方式,而...

高斯混合模型聚类实战(Gaussian Mixtures)_Data+Science+Insight的博客-程序员秘密

高斯混合模型聚类实战(Gaussian Mixtures)高斯混合模型(GMM)是一种概率模型,它假设实例是由几个参数未知的高斯分布的混合生成的。从单个高斯分布生成的所有实例形成一个通常看起来像椭球(钟形、圆形、椭球)的集群。每个簇可以有不同的椭球形状、大小、密度和方向。有几个GMM变体。在其最简单的形式(在sklearn中实现)中,该算法预先要求高斯分布的个数。为了给出一些上下文,让我们考虑一个假定通过以下概率过程生成的数据集,下面是一个图形模型,它表示随机变量之间的条件依赖关系的结构:

推荐文章

热门文章

相关标签