精华内容
下载资源
问答
  • AHP层次分析法Python实现代码,如有需要,请大家下载!!!可用!!
  • 层次分析法python代码

    千次阅读 2020-04-05 01:49:34
    python实现三种方法求权重

    用python实现三种方法求权重

    import numpy as np
    
    A = np.array() #输入判断矩阵
    (n,n) = np.shape(A)
    
    # 算术平均法求权重
    sum_1 = A.sum(axis=0) #对每一列求和 
    B = A/sum_1  #归一化处理
    sum_2 = B.sum(axis=1) #对每一行求和
    suan = sum_2/n #除N得权重
    print('算术平均法所得权重为:')
    print(suan)
    print('\n')
    
    #几何平均法求权重
    multiply_1 = A.prod(axis=1) #按行相乘
    C = np.power(multiply_1,1/n) # 开n次方
    sum_1 = C.sum(axis=0)
    jihe = C /sum_1
    print('几何平均法所得权重为:')
    print(jihe)
    print('\n')
    
    #特征值法求权重
    D = np.linalg.eig(A)
    max_eig = np.max(D[0]) #最大特征值
    position = np.argmax(D[0]) #最大特征值位置
    E = D[1]  #特征向量
    E = E[:,position]
    tezheng = E/sum(E) #归一化处理
    print('特征法所求权重为:')
    print(tezheng)
    print('\n')
    
    #计算一致性比例
    CI = (max_eig - n) / (n-1)
    RI = [0,0,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:')
    print(CI)
    print('一致性比例CR:')
    print(CR)
    if CR<0.1:
        print('一致性可以接受')
    else:
        print('一致性不可接受')
    

    求得权重用excel进行计算会方便很多

    展开全文
  • 使用Python语言实现AHP算法,运行代码需预先安装numpy包,Python3以上版本
  • 数学建模——层次分析法Python代码 import numpy as np class AHP: “”" 相关信息的传入和准备 “”" def __init__(self, array): ## 记录矩阵相关信息 self.array = array ## 记录矩阵大小 self.n = array....

    数学建模——层次分析法Python代码

    import numpy as np
    class AHP:
    “”"
    相关信息的传入和准备
    “”"

    def __init__(self, array):
        ## 记录矩阵相关信息
        self.array = array
        ## 记录矩阵大小
        self.n = array.shape[0]
        # 初始化RI值,用于一致性检验
        self.RI_list = [0, 0, 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]
        # 矩阵的特征值和特征向量
        self.eig_val, self.eig_vector = np.linalg.eig(self.array)
        # 矩阵的最大特征值
        self.max_eig_val = np.max(self.eig_val)
        # 矩阵最大特征值对应的特征向量
        self.max_eig_vector = self.eig_vector[:, np.argmax(self.eig_val)].real
        # 矩阵的一致性指标CI
        self.CI_val = (self.max_eig_val - self.n) / (self.n - 1)
        # 矩阵的一致性比例CR
        self.CR_val = self.CI_val / (self.RI_list[self.n - 1])
    
    """
    一致性判断
    """
    
    def test_consist(self):
        # 打印矩阵的一致性指标CI和一致性比例CR
        print("判断矩阵的CI值为:" + str(self.CI_val))
        print("判断矩阵的CR值为:" + str(self.CR_val))
        # 进行一致性检验判断
        if self.n == 2:  # 当只有两个子因素的情况
            print("仅包含两个子因素,不存在一致性问题")
        else:
            if self.CR_val < 0.1:  # CR值小于0.1,可以通过一致性检验
                print("判断矩阵的CR值为" + str(self.CR_val) + ",通过一致性检验")
                return True
            else:  # CR值大于0.1, 一致性检验不通过
                print("判断矩阵的CR值为" + str(self.CR_val) + "未通过一致性检验")
                return False
    
    """
    算术平均法求权重
    """
    
    def cal_weight_by_arithmetic_method(self):
        # 求矩阵的每列的和
        col_sum = np.sum(self.array, axis=0)
        # 将判断矩阵按照列归一化
        array_normed = self.array / col_sum
        # 计算权重向量
        array_weight = np.sum(array_normed, axis=1) / self.n
        # 打印权重向量
        print("算术平均法计算得到的权重向量为:\n", array_weight)
        # 返回权重向量的值
        return array_weight
    
    """
    几何平均法求权重
    """
    
    def cal_weight__by_geometric_method(self):
        # 求矩阵的每列的积
        col_product = np.product(self.array, axis=0)
        # 将得到的积向量的每个分量进行开n次方
        array_power = np.power(col_product, 1 / self.n)
        # 将列向量归一化
        array_weight = array_power / np.sum(array_power)
        # 打印权重向量
        print("几何平均法计算得到的权重向量为:\n", array_weight)
        # 返回权重向量的值
        return array_weight
    
    """
    特征值法求权重
    """
    
    def cal_weight__by_eigenvalue_method(self):
        # 将矩阵最大特征值对应的特征向量进行归一化处理就得到了权重
        array_weight = self.max_eig_vector / np.sum(self.max_eig_vector)
        # 打印权重向量
        print("特征值法计算得到的权重向量为:\n", array_weight)
        # 返回权重向量的值
        return array_weight
    

    if name == “main”:
    # 给出判断矩阵
    b = np.array([[1, 1 / 3, 1 / 8], [3, 1, 1 / 3], [8, 3, 1]])

    # 算术平均法求权重
    weight1 = AHP(b).cal_weight_by_arithmetic_method()
    # 几何平均法求权重
    weight2 = AHP(b).cal_weight__by_geometric_method()
    # 特征值法求权重
    weight3 = AHP(b).cal_weight__by_eigenvalue_method()
    

    请添加图片描述

    展开全文
  • 一、层次分析法原理 层次分析法(Analytic Hierarchy Process,AHP)由美国运筹学家托马斯·塞蒂(T. L. Saaty)于20世纪70年代中期提出,用于确定评价模型中各评价因子/准则的权重,进一步选择最优方案。该方法仍...
  • 层次分析法Python数模代码
  • #方法一:算术平均 ## 第一步:将判断矩阵按照列归一化(每个元素除以其所在列的和) X = np.array(X) #将X转换为np.array对象 sum_X = X.sum(axis=0) #计算X每列的和 (n,n) = X.shape #X为方阵,行和列相同,所以...
    # A = [[1,1,4,1/3,3],
    #      [1,1,4,1/3,3],
    #      [1/4,1/4,1,1/3,1/2],
    #      [3,3,3,1,3],
    #      [1/3,1/3,2,1/3,1]]
    
    • 该函数不包含判断矩阵是否为正互反矩阵,并且,如果矩阵已是一致矩阵,则不需要判断

    有关模型的介绍参考链接: 层次分析法.

    import numpy as np  #导入所需包并将其命名为np
    def ConsisTest(X):  #函数接收一个如上述A似的矩阵
    #计算权重
      #方法一:算术平均法
        ## 第一步:将判断矩阵按照列归一化(每个元素除以其所在列的和)
        X = np.array(X)  #将X转换为np.array对象
        sum_X = X.sum(axis=0)  #计算X每列的和
        (n,n) = X.shape  #X为方阵,行和列相同,所以用一个n来接收
        sum_X = np.tile(sum_X,(n,1))  #将和向量重复n行组成新的矩阵
        stand_X = X/sum_X  #标准化X(X中每个元素除以其所在列的和)
        
        ## 第二步:将归一化矩阵每一行求和
        sum_row = stand_X.sum(axis=1)
    
        ## 第三步:将相加后得到的向量中每个元素除以n即可得到权重向量
        print("算数平均法求权重的结果为:")
        print(sum_row/n)
        
      #方法二:特征值法
        ## 第一步:找出矩阵X的最大特征值以及其对应的特征向量
        V,E = np.linalg.eig(X)  #V是特征值,E是特征值对应的特征向量
        max_value = np.max(V)  #最大特征值
        #print("最大特征值是:",max_value)
        max_v_index = np.argmax(V)  #返回最大特征值所在位置
        max_eiv = E[:,max_v_index]  #最大特征值对应的特征向量
        
        ## 第二步:对求出的特征向量进行归一化处理即可得到权重
        stand_eiv = max_eiv/max_eiv.sum()
        print("特征值法求权重的结果为:")
        print(stand_eiv)
        print("———————————————————————————————")
    #一致性检验
        ## 第一步:计算一致性指标CI
        CI = (max_value-n)/(n-1)
        ## 第二步:查找对应的平均随机一致性指标RI
        RI = np.array([15,0,0,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
        CR = CI/RI[n]
        if CR < 0.1:
            print("CR=",CR,",小于0.1,通过一致性检验")
        else:
            print("CR=",CR,",大于等于0.1,没有通过一致性检验,请修改判断矩阵")
        return None
    #ConsisTest(A)
    
    展开全文
  • 层次分析法AHP及Python实现

    千次阅读 2020-05-01 22:52:51
    AHP (Analytic Hierarchy Process)层次分析法是一种实用的多方案或多目标的决策方法。 层次分析法是一种主客观结合的多指标综合评价方法;即定性分析与定量分析有机结合,实现定量化决策。 有两次定权过程,即...

    AHP (Analytic Hierarchy Process)层次分析法是一种实用的多方案或多目标的决策方法。

    1. 层次分析法是一种主客观结合的多指标综合评价方法;即定性分析与定量分析有机结合,实现定量化决策。

    2. 有两次定权过程,即准则层定权和方案层定权。

    思路

    层次分析法的思路是:
    将所要分析的问题层次化,根据问题的性质和要达到的总目标,将问题分解成不同的组成因素,按照因素间的相互关系及隶属关系,将因素按不同层次聚集组合,形成一个多层分析结构模型,最终归结为最低层(方案、措施、指标等)相对于最高层(总目标)相对重要程度的权值或相对优劣次序的问题。

    决策者用理论和实践经验去分别判断准则层、目标层内各个指标的相对重要程度,并合理地给出每个决策方案中每个指标的标准化权数,利用权数求出各方案的优劣次序,从而选择最优目标。

    步骤

    用AHP分析问题大体要经过以下五个步骤:
    (1) 建立层次结构模型;
    (2)构造判断矩阵;
    (3)层次单排序;
    (4)一致性检验;
    (5)层次总排序。
    其中后三个步骤在整个过程中需要逐层地进行。

    例如:

    (1) 建立层次结构模型

    假如现在一位同学在找工作时,同时收到三份offer,三家公司都非常不错,此时他很犹豫,不知道怎么选择。

    他想到了层次分析法,他现在的目标是选择最优的工作,考虑的因素有:待遇、晋升制度、进修机会、地理位置、社会声誉。因此,建立如下层次结构模型:
    在这里插入图片描述
    层次分析法的核心在于,如何合理解决各个指标的定权问题

    有两次定权过程,即准则层定权和方案层定权。

    (2)构造判断矩阵

    什么是判断矩阵?判断矩阵是建立指标之间两两比较的影响程度的矩阵。例如上述准则层的五个指标所构成的判断矩阵A:
    在这里插入图片描述
    如何依据决策者的理论和经验来构建判断矩阵呢?在实际评价中,如何对多个指标进行赋权,较为困难。但对两两指标之间的比较影响程度,决策者进行主观正确判断较为容易。

    在判断矩阵中,指标之间的比较影响程度赋值需要借助“标度”,标度如下所示:

    在这里插入图片描述

    对于要比较的因子而言,你认为一样重要就是1:1,强烈重要就是9:1,也可以取中间数值6:1等,两两比较,把数值填入,并排列成判断矩阵(判断矩阵是对角线积是1的正反矩阵即可)。
    在这里插入图片描述

    (3)检验判断矩阵的合理性

    判断矩阵构造完毕后,需要检验判断矩阵是否满足一致性。什么是矩阵一致性?矩阵一致性的定义为: a i j × a j k = a i k a_{ij}\times a_{jk}=a_{ik} aij×ajk=aik。例如待遇:晋升制度=3:1,晋升制度:进修机会=5:1,在一致性定义下,待遇:进修机会=15:1。显然,在判断矩阵的标度中,并没有设置大于9以上的标度。在检验判断矩阵合理性上,我们不是要矩阵严格满足一致性,而是满足A>B,B>C,那么A必然大于C,这样检验方式称为一致性检验。

    一致性检验是通过计算一致性比例CR得来:
    C R = C I R I CR=\frac{CI}{RI} CR=RICI

    其中CI表示一致性指标,其公式为
    C I = λ max ⁡ − 1 n − 1 CI=\frac{\lambda _{\max}-1}{n-1} CI=n1λmax1

    n表示判断矩阵中指标的个数, λ max ⁡ \lambda _{\max} λmax表示判断矩阵的最大特征值,

    RI表示随机一致性指标,可查表获得,如下表所示

    在这里插入图片描述

    当CR<0.1时,则表示一致性检验通过,判断矩阵构造合理,CI 越大,判断矩阵的不一致性程度越严重。
    因此,目前唯一未知数是判断矩阵的最大特征值。特征值的计算公式为:
    A W = λ W AW=\lambda W AW=λW

    其中W是最大特征值 λ max ⁡ \lambda _{\max} λmax对应的特征向量。

    求解可以通过软件,比如Excel,R语言,python,MATLAB等等

    (4)定权

    前述已知,AHP定权过程分为两个阶段,第一阶段是关于准则层的定权第二阶段是关于方案层的定权

    在定权方法上,有最小平方权法、特征值法、方根法、和积法等,常用定权方法为特征值法。

    • 对于准则层指标的定权,应用最大特征值所对应的特征向量,即
      W = ( w 1 , w 2 , w 3 , w 4 , w 5 ) T W=\left( w_1,w_2,w_3,w_4,w_5 \right) ^T W=(w1,w2,w3,w4,w5)T
      进行赋权,权重进行归一化处理,使得权和等于1。

    • 对于方案层指标的定权,需要构建每个准则层与三种方案的判断矩阵,检验判断矩阵的合理性,并计算其最大特征值所对应的特征向量。即:
      在这里插入图片描述
      可以看出,方案层所构造的判断矩阵有多个,对于方案层判断矩阵的一致性检验,采用总排序一致性比例,其公式为:
      C R = ∑ k W k C I k ∑ k W k R I k CR=\frac{\sum_k^{}{W_k}CI_k}{\sum_k^{}{W_kRI_k}} CR=kWkRIkkWkCIk
      其中k表示准则层的相应指标。

    通过对上述五个判断矩阵的计算,可以得到每个方案在每个准则层因素下的权重,即
    W 1 = ( w 11 , w 12 , w 13 ) T , W 2 = ( w 21 , w 22 , w 23 ) T W_1=\left( w_{11},w_{12},w_{13} \right) ^T,W_2=\left( w_{21},w_{22},w_{23} \right) ^T W1=(w11,w12,w13)T,W2=(w21,w22,w23)T
    W 3 = ( w 31 , w 32 , w 33 ) T , W 4 = ( w 41 , w 42 , w 3 ) T W_3=\left( w_{31},w_{32},w_{33} \right) ^T,W_4=\left( w_{41},w_{42},w_3 \right) ^T W3=(w31,w32,w33)T,W4=(w41,w42,w3)T
    W 5 = ( w 51 , w 52 , w 53 ) T , W_5=\left( w_{51},w_{52},w_{53} \right) ^T, W5=(w51,w52,w53)T,

    (5)排序

    经过上述计算,已经得到准则层、方案层中各个指标和方案的权重,如下表所示。
    在这里插入图片描述
    通过比较方案总排序权重的高低,即可对三份工作作出选择。

    Python实现代码

    这里请参见下面博客中代码,讲的很详细
    AHP(层次分析法)学习笔记及多层权重Python实践

    展开全文
  • python层次分析法.py

    2019-09-20 16:22:50
    层次分析法代码,可以通过该代码进行适当改变,针对自己的问题进行层次分析,采用python
  • python实现AHP算法(层次分析法

    千次阅读 2020-09-07 21:26:56
    一、层次分析法原理 层次分析法(Analytic Hierarchy Process,AHP)由美国运筹学家托马斯·塞蒂(T. L. Saaty)于20世纪70年代中期提出,用于确定评价模型中各评价因子/准则的权重,进一步选择最优方案。该方法仍...
  • AHP(层次分析法)的全面讲解及python实现

    千次阅读 多人点赞 2020-05-09 13:58:30
    一、层次分析法的使用流程: 1. 建立层次结构模型 首先绘出层次结构图,正常三层是比较常见的:决策的目标、考虑的决策准则因素和决策对象。按它们之间的相互关系分为最高层、中间层和最低层(如下图是四层结构的...
  • python实现层次分析法(AHP) 层次分析法是数学建模的入门算法,类似于算法竞赛中的cout<<"Hello,world!"<<endl; 对于python数据分析的初学者来说,在使用python实现层次分析法时,难点是特征值法的...
  • 这里用python语言来计算判断矩阵的权重,网上大部分是matlab语言,里面也包含一致性检验的函数,具体各函数使用方法详见代码注释的部分 import numpy as np a=np.array([[1, 1 / 4, 2, 1 / 3], [4, 1, 8, 2], [1 / 2...
  • 层次分析法---python实现

    万次阅读 2018-11-14 11:00:09
    层次分析法(The analytic hierarchy process)简称AHP 在20世纪70年代中期由美国运筹学家托马斯·塞蒂(T.L.saaty)正式提出。它是一种定性和定量相结合的、系统化、层次化的分析方法。由于它在处理复杂的决策问题...
  • 1 层次分析法简介 1.1 概念 层次分析法(Analytic Hierarchy Process,AHP):是一种定性和定量相结合的、系统的、层次化的分析方法。 这种方法的特点就是在对复杂决策问题的本质、影响因素及其内在关系等进行深入研究...
  • Python 实现层次分析法

    万次阅读 2018-03-22 22:26:25
    import csvimport numpy as npimport tensorflow as tf#大概的思路是:#1.首先输入每个指标下面对应的对比矩阵,每个这个矩阵是由专家比较每两个#指标之间的相对性重要性形成的,将这个矩阵作为输入,首先计算这个...
  • 该文章讲述了多层次分析法代码讲解,以及如何应用到楼盘综合水平分析当中
  • AHP | 层次分析法原理及Python实现

    千次阅读 多人点赞 2020-02-25 11:32:51
    层次分析法(Analytic Hierarchy Process,AHP)由美国运筹学家托马斯·塞蒂(T. L. Saaty)于20世纪70年代中期提出,用于确定评价模型中各评价因子/准则的权重,进一步选择最优方案。该方法仍具有较强的主观性,...
  • AHP(层次分析法)  层次分析法(The analytic hierarchy process)简称AHP,在20世纪70年代中期由美国运筹学家托马斯·塞蒂(TLsaaty)正式提出。它是一种定性和定量相结合的、系统化、层次化的分析方法。由于它...
  • 层次分析法——python

    千次阅读 2020-07-28 08:57:09
    层次分析法根据问题的性质和要达到的总目标,将问题分解为不同的组成因素,并按照因素间的相互关联影响以及隶属关系将因素按不同层次聚集组合,形成–个多层次的分析结构模型,从而最终使问题归结为最低层(供决策的...
  • 模糊层次综合分析法Python实践及相关优缺点分析

    千次阅读 多人点赞 2020-09-08 21:20:48
    模糊综合评价(FCE)是一种根据模糊数学隶属度理论把定性评价转化为定量评价的方法,它具有结果清晰,系统性强的特点,能较好地解决模糊的、难以量化的问题,适合各种非确定性问题的解决。我们先看模糊综合评价...
  • 最近在做一个集群的项目,涉及到负载均衡问题,其中节点的综合负载评价部分采用经典的层次分析法,项目需要用C++复现。鉴于Python成熟、方便的矩阵操作,先用Python简单复现一下该算法。 1 理论基础 关于AHP层次分析...
  • 学习了一下大佬们的层次分析法实现,但是感觉封装的不够方便,不同的题目修改的地方有一点多;自己再次进行了修改封装,更便于多次的使用。 方法简介 层次分析法(Analytic Hierarchy Process,简称...
  • 【AHP】层次分析法原理与Python实现

    千次阅读 多人点赞 2020-01-07 17:46:41
    层次分析法,简称AHP,层次分析法是 多目标决策问题 的一个解决方案。 它把有关的元素分解成目标、准则、方案等层次,在此基础之上进行定性和定量分析的决策方法。 该方法是美国运筹学家匹茨堡大学教授萨蒂于20世纪...
  • 聚类算法Python代码

    2018-07-23 21:45:15
    聚类分析又称群分析,它是研究(样品或指标)分类问题的一种统计分析方法,同时也是数据挖掘的一个重要算法。 聚类(Cluster)分析是由若干模式(Pattern)组成的,通常,模式是一个度量(Measurement)的向量,或者...
  • 关于层次分析法的学习,可以看这篇文章数学建模十大算法之——层次分析法  下面是相关Matlab代码: %存为cengcifenxi.m disp('请输入判断矩阵A(n阶)'); A=input('A='); [n,n]=size(A); x=ones(n,100); y=ones(n,...
  • Python实现“层次分析法”及“自调节层次分析法

    多人点赞 热门讨论 2021-04-18 19:46:49
    Python实现“层次分析法”及“自调节层次分析法” 假设我们遇到如下问题: ①对于M个方案,每个方案有N个属性,在已知各个方案每个属性值&&任意两个属性的重要程度的前提下,如何选择最优的方案? ②对于一...
  • 层次分析法(The analytic hierarchy process)简称AHP,它是将与决策有关的因素分解成目标、准则、方案等层次,在此基础之上进行定性和定量分析的决策方法。 本文为简明AHP学习笔记,并通过Python实践构建多层权重...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,901
精华内容 3,960
关键字:

层次分析法python代码

python 订阅