精华内容
下载资源
问答
  • 2021-08-19 15:25:48

    1 层次分析法简介

    1.1 概念

    层次分析法(Analytic Hierarchy Process,AHP):是一种定性和定量相结合的、系统的、层次化的分析方法
    这种方法的特点就是在对复杂决策问题的本质、影响因素及其内在关系等进行深入研究的基础上,利用较少的定量信息使决策的思维过程数学化,从而为多目标、多准则或无结构特性的复杂决策问题提供简便的决策方法。是对难以完全定量的复杂系统做出决策的模型和方法。

    1.2 原理

    层次分析法的原理:层次分析法根据问题的性质和要达到的总目标,将问题分解为不同的组成因素,并按照因素间的相互关联影响以及隶属关系将因素按不同的层次聚集组合,形成一个多层次的分析结构模型,从而最终使问题归结为最低层(供决策的方案、措施等)相对于最高层(总目标)的相对重要权值的确定或相对优劣次序的排定。

    1.3 分析步骤

    层次分析法的步骤,运用层次分析法构造系统模型时,大体可以分为以下四个步骤:

    • 建立层次结构模型;
      在深入分析实际问题的基础上,将有关的各个因素按照不同属性自上而下地分解成若干层次,同一层的诸因素从属于上一层的因素或对上层因素有影响,同时又支配下一层的因素或受到下层因素的作用。最上层为目标层,通常只有1个因素,最下层通常为方案或对象层,中间可以有一个或几个层 次,通常为准则或指标层。当准则过多时(譬如多于9个)应进一步分解出子准则层
      • 最高层(目标层):决策的目的、要解决的问题;
      • 中间层(准则层或指标层):考虑的因素、决策的准则;
      • 最低层(方案层):决策时的备选方案;
    • 构造判断(成对比较)矩阵;
      构造成对比较阵。从层次结构模型的第2层开始,对于从属于(或影响)上一层每个因素的同一层诸因素,用成对比较法和1—9比较尺度构造成对比较阵,直到最下层(见下图)
    • 层次单排序及其一致性检验;
    • 层次总排序及其一致性检验;
      计算某一层次所有因素对于最高层(总目标)相对重要性的权值,称为层次总排序。
      在这里插入图片描述

    1.4 涉及的定义及公式

    1.4.1 定理

    在这里插入图片描述

    1.4.2 定义一致性指标 CI

    在这里插入图片描述

    1.4.3 随机一致性指标 RI

    为了衡量 [公式] 的大小,引入随机一致性指标 [公式] 。方法为随机构造500个成对比较矩阵 [公式] ,则可得一致性指标 [公式]

    1.4.4 定义一致性比率 CR

    在这里插入图片描述

    1.4.5 一致性检验

    利用一致性指标和一致性比率<0.1及随机一致性指标的数值表,对A 进行检验的过程。

    2 源代码

    2.1 python代码演示计算过程

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    import numpy as np
    
    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}
    # 矩阵
    A_arr = [[1,       1/2,       4,    3,      3],
             [2,       1,         7,    5,      5],
             [1/4,     1/7,       1,    1/2,    1/3],
             [1/3,     1/5,       2,    1,      1],
             [1/3,     1/5,       3,    1,       1]]
    
    def main():
        # 矩阵
        A = np.array(A_arr)
    
        a_sum0 = A.sum(axis=0)
        B = A / a_sum0
        print('新矩阵:')
        print(B)
        b_sum = B.sum(axis=1)
        print('新矩阵行和: %s' % b_sum)
    
        W = b_sum.sum()
        w_arr = []
        for w in b_sum:
            w_arr.append(w / W)
    
        print('W: %s' % w_arr)
    
        AW = []
        for a in A:
            aa = a * w_arr
            AW.append(aa.sum())
    
        print('AW: %s' % AW)
    
        result = np.array(AW) / np.array(w_arr)
        print('AW/W: %s' % result)
    
        row = result.shape[0]
        Max = result.sum() / row
        print('λMax: %s' % Max)
    
        CI = (Max - row) / (row - 1)
        print('CI: %s' % CI)
    
        CR = CI / RI_dict[row]
        print('CR: %s' % CR)
    
    if __name__ == '__main__':
        main()
    

    2.2 层次分析python封装源码

    import numpy as np
    
    def get_tezheng(array):
        '''
        get the max eigenvalue and eigenvector
        :param array: judgement matrix
        :return: max eigenvalue and the corresponding eigenvector
        '''
        # 获取最大特征值和对应的特征向量
        te_val, te_vector = np.linalg.eig(array)
        list1 = list(te_val)
    
        max_val = np.max(list1)
        index = list1.index(max_val)
        max_vector = te_vector[:, index]
    
        return max_val, max_vector
    
    
    def RImatrix(n):
        '''
        get RI value according the the order
        :param n: matrix order
        :return: Random consistency index RI of a n order matrix
        '''
        n1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
        n2 = [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, 1.60]
        d = dict(zip(n1, n2))
        return d[n]
    
    
    def consitstence(max_val, RI, n):
        '''
        use the CR indicator to test the consistency of a matrix.
        :param max_val: eigenvalue
        :param RI: Random consistency index
        :param n: matrix order
        :return: true or false, denotes whether it meat the validation of consistency
        '''
        CI = (max_val - n) / (n - 1)
        if RI == 0:
    
            return True
        else:
            CR = CI / RI
            if CR < 0.10:
    
                return True
            else:
    
                return False
    
    
    def minMax(array):
        result = []
        for x in array:
            x = float(x - np.min(array)) / (np.max(array) - np.min(array))
            result.append(x)
        return np.array(result)
    
    
    def normalize_vector(max_vector):
        '''
        normalize the vector, the sum of elements is 1.0
        :param max_vector: a eigenvector
        :return: normalized eigenvector
        '''
        vector = []
        for i in max_vector:
            vector.append(i.real)
        vector_after_normalization = []
        sum0 = np.sum(vector)
        for i in range(len(vector)):
            vector_after_normalization.append(vector[i] / sum0)
        vector_after_normalization = np.array(vector_after_normalization)
    
        return vector_after_normalization
    
    
    def get_weight(matrix_array,n):
        '''
        get weight vector according to personal score.
        :param score: a list, the item is the score range 1 to 10 means the importance of each sub-indicator.
        :return: a list, the item is the weight range 0.0 to 1.0.
        '''
        max_val, max_vector = get_tezheng(matrix_array)
        RI = RImatrix(n)
        if consitstence(max_val, RI, n) == True:
            feature_weight = normalize_vector(max_vector)
            return feature_weight
        else:
            return [1 / n] * n
    
    
    def get_judgement_matrix(scores):
        '''
        get judgement matrix  according to personal score.
        :param scores: a list, the item is the score range 1 to 10 means the importance of each sub-indicator.
        :return: judgement matrix, item range 1 to 9.
        - more: in judgement matrix:
        1 means two sub-indicators are the same important.
        3 means the first sub-indicator is a little important than another one.
        5 means the first sub-indicator is apparently important than another one.
        7 means the first sub-indicator is strongly significant than another one.
        9 means the first sub-indicator is extremely significant than another one.
        and 2, 4, 6, 8 are in the middle degree.
        '''
    
        # 评分1——10
        length = len(scores)
    
        array = np.zeros((length, length))
        for i in range(0, length):
            for j in range(0, length):
                point1 = scores[i]
                point2 = scores[j]
                deta = point1 - point2
                if deta < 0:
                    continue
                elif deta == 0 or deta == 1:
                    array[i][j] = 1
                    array[j][i] = 1
                else:
                    array[i][j] = deta
                    array[j][i] = 1 / deta
    
        return array
    
    A_arr = [[1,       2,       1.0 / 3, 3],
             [1.0 / 2, 1,       1.0 / 3, 2],
             [3,       3,       1,       4],
             [1.0 / 3, 1.0 / 2, 1.0 / 4, 1]]
    
    get_weight(A_arr,4)
    

    参考

    层次分析法(AHP)
    https://github.com/iLiuChang/AHP
    层次分析法
    Python实现AHP(层次分析法)

    更多相关内容
  • 使得层次分析法界面简洁,操作更便捷。  1.层次分析法基本原理  层次分析法(Analytic HierarchyProcess简称AHP)是将与决策总是有关的元素分解成目标、准则、方案等层次,在此基础之上进行定性和定量分析的...
  • 层次分析法(Analytic Hierarchy Process,AHP)这是一种定性和定量相结合的、系统的、层次化的分析方法。这种方法的特点就是在对复杂决策问题的本质、影响因素及其内在关系等进行深入研究的基础上,利用较少的定量信息...
  • MATLAB层次分析法.ppt

    2019-06-05 20:20:02
    层次分析法(Analytic Hierarchy Process, AHP)这是一种定性和定量相结合的、系统化的、层次化的分析方法。过去研究自然和社会现象主要有机理分析法和统计分析法两种方法,前者用经典的数学工具分析现象的因果关系,...
  • 随着我国经济水平逐渐提高,居民消费具有高层次高需求特征,大学生群体作为主力军之一,对牙膏的要求逐渐提高,寻求层次化和差异化,用层次分析法建立模型,能帮助店家如何控制进货量保证利益最大化。本文选用市面上比较...
  • 为了研究古风壳隔水性能,了解其对底板突水的影响,通过对研究区大量地质勘探资料的系统整理、统计与分析,建立了隔水性能评价指标体系,运用GIS强大的数据管理与空间分析功能,绘制了隔水性能指标专题图,采用层次分析...
  • 层次分析法; 面临各种各样的方案要进行比较判断评价最后 作出决策这个过程主观因素... AHP)这是 一种定性和定量相结合的系统化的层次化的分析方法 过去研究自然和社会现象主要有机理分析法和统计分析法两 种方法前者用
  • 层次分析法(AHP)是一种用于组织和分析复杂决策的结构技术。 基于数学和心理学
  • 1.人性层次分析法操作步骤 迈实ahp将层次分析法的分析步骤科学地整理为建模、打分、报表三个步骤,操作者可非常轻松地掌握层次分析法的分析步骤,快速提高和加深对层次分析法的理论理解。 将专家打分矩阵独创...
  • 基于层次分析法的树图可视的度量模型,雷莹,胡俊,分析了树图布局算法的可视特点,对数据可视结果提取评价指标,进而采用层次分析法构建度量模型。通过搭建基于WEB的实验环境,
  • 1.AHP (1)通过对系统的深刻认识,确定该系统的总目标,弄清规划决策所涉及的范围、所要采取的措施方案和政策、实现目标的准则、策略和各种约束条件等,广泛地收集信息。 (2)建立一个多层次的递阶结构,按目标...
  • 层次分析法(AHP)是一种基于数学和心理学的组织和分析复杂决策的结构技术。 定位方法(AHP)的过程可以在IDRISI软件中实现。 层次级别是客观的。 比较了这两组数据,并确定了它们的权重。 然后,确定同意比例的...
  • 提出和推导出等效时变的可用度参数模型,分析层次化模块化可用性分析方法的误差成因和相关影响,给出了故障相关和维修相关条件下的误差定义,定量研究了误差分布区域及其影响因素,提出了层次化模块化可用性分析方法的...
  • 一、层次分析法概述 二、层次分析法的基本原理 三、层次分析法的步骤和方法 四、层次分析法的广泛应用 五、应用层次分析法的注意事项 六、层次分析法应用实例 层次分析法(AHP)是美国运筹学家匹茨堡大学教授萨蒂...
  • 将该模型用于目标识别系统的威胁评估,首先给出威胁评估指标,用网络层次分析法精简指标并得到规范权值;构建指标云模型,将规范后的指标数据输入前件云发生器,建立推理规则库,引入分级结构简化规则数,运用加权...
  • 论文研究- 多目标决策的层次分析法.pdf, 一、引言 T.L.Saaty提出的层次分析法(简称AHP法)是系统工程中对非定量事件作定量分析的一种简便而又有效的方法。它能将决策者对复杂系统的决策思维过程实行数量,需要数据...
  • 针对目前建立和完善应急处理大...实验结果表明,所提出的基于层次分析法的电网应急演练管理系统为培训管理和应急演练工作的规范及系统提供了技术支持,并为提升电网公司的应急准备能力提供了实践方法与理论支持。
  • 建构在多属性决策序依赖Choquet积分模型之上的层次化多属性评价与决策方法(简称作TOYLC层次分析法),并没有保证Choquet积分模型所要求的价值测度公度性.另外,它依赖...
  • 层次分析法(AHP)

    千次阅读 2021-03-16 17:12:26
    ” 层次分析法(Analytic Hierarchy Process,AHP)这是一种定性和定量相结合的、系统的、层次化的分析方法。这种方法的特点就是在对复杂决策问题的本质、影响因素及其内在关系等进行深入研究的基础上,利用较少的定量...

    1.问题的提出

    日常生活中有很多的决策问题。决策是指在面临多种方案时需要依据一定的标准选择某一种方案。日常生活中有许多决策的问题。比如:

    • 买钢笔,一般要依据质量、颜色、实用性、价格、外形等方面的因素选择某一支钢笔。
    • 假期旅游,是去风光秀丽的苏州,还是去迷人的北戴河,或者是去山水甲天下的桂林,那一般会依据景色、费用、食宿条件、旅途等因素来算着去哪个地方。

    面临各种各样的方案,要进行比较、判断、评价、直至最后的决策。这个过程中都是一些 主观的因素,这些因素可能由于个人情况的不同,有相应不同的比重,所以这样主观因素给数学方法的解决带来了很多的不便。

    2.AHP

    简单介绍一下什么是AHP?

    层次分析法,简称AHP,它是一种 运筹学理论 。是指将与决策总是有关的元素分解目标、准则、方案 等层次,在此基础之上进行定性和定量分析的决策方法。

    “该方法是美国运筹学家匹茨堡大学教授萨蒂于20世纪70年代初,在为美国国防部研究”根据各个工业部门对国家福利的贡献大小而进行电力分配”课题时,应用网络系统理论和多目标综合评价方法,提出的一种 层次权重决策分析方法。”

    层次分析法(Analytic Hierarchy Process,AHP)这是一种定性和定量相结合的、系统的、层次化的分析方法。这种方法的特点就是在对复杂决策问题的本质、影响因素及其内在关系等进行深入研究的基础上,利用较少的定量信息使决策的思维过程数学化,从而为多目标、多准则或无结构特性的复杂决策问题提供简便的决策方法。是对难以完全定量的复杂系统做出决策的模型和方法

    层次分析法的原理,层次分析法根据问题的性质和要达到的总目标,将问题分解为不同的组成因素,并按照因素间的相互关联影响以及隶属关系将因素按不同的层次聚集组合,形成一个多层次的分析结构模型,从而最终 使问题归结为最低层(供决策的方案、措施等)相对于最高层(总目标)的相对重要权值的确定或相对优劣次序的排定

    所以,AHP理论本质是通过把一个复杂的问题拆解为多个目标或准则,并且通过定性量化的方式为每个目标进行赋权的一个过程。

    简单来说AHP就是拆解加赋权,下面详细讲一下过程。
    层次分析法的步骤,运用层次分析法构造系统模型时,大体可以分为以下四个步骤:

    • 建立层次结构模型;
    • 构造判断(成对比较)矩阵;
    • 层次单排序及其一致性检验;
    • 层次总排序及其一致性检验;

    3.层次分析法的基本步骤

    将决策的目标、考虑的因素(决策准则)和决策对象按他们之间的相互关系分成最高层、中间层和最低层,绘制层次结构图。

    1.最高层(目标层):决策的目的、要解决的问题;
    2.中间层(准则层或指标层):考虑的因素、决策的准则;
    3.最低层(方案层):决策时的备选方案;

    3.1 建立层次结构模型

    在这里插入图片描述

    3.2 构造判断矩阵

    什么是判断矩阵?

    判断矩阵就是以参与指标计算的所有ferture组成的一个方阵,并且给出两两“比较量化值”。举例如下:

    对于A和B两个因子,1表示:A和B一样重要;3表示:A比B重要一些;5表示:A比B重要;7表示:A比B重要的多;9表示:A比B极其重要,具体标准如下图所示:

    因素i比因素j量化值
    同等重要1
    稍微重要3
    较强重要5
    强烈重要7
    极端重要9
    l两相邻判断的中间值2,4,6,8

    这其实就是一个典型的小组投票的过程,通过在方阵行列元素的两两比较,最终可以生成一个判断矩阵。比如对于有 A,B,C,D四个feature(分别代表钱,人员,时间,其它) 的判断矩阵如下图所示:

    ABCD
    A1.002.005.004.00
    B0.501.001.671.33
    C0.200.601.000.80
    D0.250.751.251.00

    3.3 层次单排序及一致性检验

    所谓一致性校验是指在进行投票的时候的公平性和一致性。
    比如你认为A比B重要,B比C重要,但是从最后的结果来看是C比A重要,这样即为不一致。
    一致性校验是通过计算校验系数来实现的,通常用CR来表示,小于0.1即表示一致性校验通过。

    CR包含一致性指标(CI)和随机一致性指标(RI)两部分,CR=CI/RI。

    CI和RI是一个固定值,与矩阵的阶数有关。
    一致性校验是通过计算校验系数来实现的,通常用CR来表示,小于0.1即表示一致性校验通过。

    1.模拟
    用EXCEL来进行计算(这里用三个参数来模拟
    在这里插入图片描述
    构建判断矩阵A(正交矩阵),用aij表示第i个因素相对于第j个因素的比较结果:

    在这里插入图片描述
    2.计算权重:
    将矩阵A的各行向量进行几何平均(方根法),然后进行归一化,即得到各评价指标权重和特征向量W:

    在这里插入图片描述

    3.一致性检验:

    在这里插入图片描述
    这里的n是指矩阵的维度

    • CI = 0,有完全的一致性;
    • CI 接近于0,有满意的一致性;
    • CI越大,不一致越严重;
      为了衡量 CI的大小,引入随机一致性指标 RI。方法为随机构造500个成对比较矩阵

    定义一致性比率:
    [公式]
    RI系数如下表格

    矩阵阶数34567891011
    RI0.51490.89311.11851.24941.34501.42001.46461.491.51

    一般,当一致性比率CR < 0.1 时,认为A的不一致程度在容许的范围之内,有满意的一致性,通过一致性检验,可用其归一化特征向量作为权向量,否则要重新构造成对比较矩阵A,对 其 加以调整。

    4.计算公式
    各列键入公式:

    按行相乘:F3=PRODUCT(C3:E3),下拉至F5。

    开n次方:G3=POWER(F3,1/3),下拉至G5;G6=SUM(G3:G5)。

    权重wi:H3=G3/G$6,下拉至H5。

    AWi:I3=C3H$3+D3H$4+E3*H$5,下拉至I5。

    AWi/wi:J3=I3/H3,下拉至J5;J6=AVERAGE(J3:J5)。

    CI:K3=(J6-3)/2。

    CR:L3=K3/0.5149

    5.进行计算

    在这里插入图片描述
    6.结束
    通过进行小组投票和自动计算,最终CR的值为0.03706,因此一致性检验通过

    权重Wi列即为每个feature的权重,因此最终我们可以得出该指标的计算公式为:

    target = A * 0.1047 + B * 0.6369 + c * 0.2582

    完美解决!

    4.总结

    大家这里或许会有个疑问:

    采用AHP的方法进行赋权,小组投票阶段是主观判断重要性的,所以是不是会带来误差?

    会,一定会。

    不过 策略一定是建立在业务之上的,撇开业务谈策略都是伪策略。

    采用AHP模型进行多因子赋权,

    需要对该业务有足够的了解,更需要对该target下的多个feature有 足够的了解 ,哪个对于target的贡献度是最大的。

    比如对于一个商品,什么样的商品是用户喜欢的?用户喜欢的商品有哪些feature?每个feature对于用户喜欢的贡献程度是什么样的?这些都是需要业务经验参与的。

    如果说科学的方法都有一个前提假设,那么AHP也有一个前提,就是 先了解业务,再谈策略

    以上,希望能帮助到大家。
    在这里插入图片描述

    本公众号分享自己从程序员小白到经历春招秋招斩获10几个offer的面试笔试经验,其中包括【Java】、【操作系统】、【计算机网络】、【设计模式】、【数据结构与算法】、【大厂面经】、【数据库】期待你加入!!!

    1.计算机网络----三次握手四次挥手
    2.梦想成真-----项目自我介绍
    3.你们要的设计模式来了
    4.震惊!来看《这份程序员面试手册》!!!
    5.一字一句教你面试“个人简介”
    6.接近30场面试分享
    7.你们要的免费书来了

    展开全文
  • 龙源期刊网 通过层次分析法分析大学生毕业后去向问题 作者杨之光 来源中国管理信息2016年第10期 ?[摘 要]层次分析法AHP是运筹学下的一个分支方法是一种将与决策相关的各个因素逐一分解成目标准则方案等各个层次并...
  • 本文运用层次分析法,建立大学生毕业去向的数学模型,不仅为即将毕业的学生提供一种选择自己去向的参考,也能使低年级学生的从中找到自己在大学期间的奋斗目标。本模型使用的求解软件为MATLAB R2016a,可以得出大...
  • 层次分析法

    2013-01-31 11:53:10
    用于风险评估过程中指标权重的设置,可以实现定性指标的定量处理,以及定量指标的无量纲处理
  • 运用层次分析法,通过对影响资源储量的诸多因素建立层次结构模型,构造判断矩阵,对通过一致性检验的权值进行重要度因果分析,最终得出组合权值,从而实现对煤炭资源储量评价,使复杂的定性问题定量。根据各影响因素权值...
  • 层次分析法作为运筹学方法,把复杂的决策系统层次化,通过逐层比较各种关联因素组建有效模型,为分析和决策提供定量的依据。该文提出的基于“层次分析法”的数据库预处理方法在数据仓库构建的数据清理阶段,对每个...
  • 目录层次分析法概述定义步骤归纳例子应用实例Python实现程序如下:运行结果截图 层次分析法概述 定义 本文所有图片均来自本人的OneNote笔记 步骤归纳 例子 建立层次结构模型 构造判断(成对比较)矩阵 第...

    层次分析法概述

    定义

    本文所有图片均来自本人的OneNote笔记
    在这里插入图片描述
    在这里插入图片描述

    步骤归纳

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    例子

    1. 建立层次结构模型
      在这里插入图片描述

    2. 构造判断(成对比较)矩阵
      在这里插入图片描述
      在这里插入图片描述
      第二层A的各个因素对目标层Z的成对比较矩阵(专家打分法)
      在这里插入图片描述
      说明C2的重要性是C1的两倍
      第三层B的各个因素A1,A2……A5的成对比较矩阵分别如下:
      在这里插入图片描述

    3. 层次单排序及其一致性检验
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      0.6=1/(1+1/2+1/6) 矩阵中其他数值同理
      0.587=1/3(0.6+0.615+0.545)

    4. 层次单排序及其一致性检验
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

    应用实例

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    Python实现

    程序如下:

    (本程序配的案例,现在是机密,先不能公开,但看程序仍可以理解)

    import numpy as np
    
    # A--D的判断矩阵
    A_D = np.array([
        [1, 2, 6, 4],
        [1 / 2, 1, 5, 2],
        [1 / 6, 1 / 5, 1, 1 / 2],
        [1 / 4, 1 / 2, 2, 1]
    ])
    # A1-A4的判断矩阵
    A1_A4 = np.array([
        [1, 4, 5, 4],
        [1 / 4, 1, 4, 2],
        [1 / 5, 1 / 4, 1, 1 / 3],
        [1 / 4, 1 / 2, 3, 1]
    ])
    # B1-B3的判断矩阵
    B1_B3 = np.array([
        [1, 2, 3],
        [1 / 2, 1, 3],
        [1 / 3, 1 / 3, 1]
    ])
    # C1--C2
    C1_C2 = np.array([
        [1, 2],
        [1 / 2, 1]
    ])
    # D1--D2
    D1_D2 = np.array([
        [1, 1],
        [1, 1]
    ])
    # A11_A14的判断矩阵
    A11_A14 = np.array([
        [1, 1 / 5, 1 / 4, 1 / 2],
        [5, 1, 2, 3],
        [4, 1 / 2, 1, 2],
        [2, 1 / 3, 1 / 2, 1]
    ])
    # A1的评价矩阵
    A1_Emat = np.array([
        [0.109, 0.176, 0.142, 0.302, 0.27],
        [0.077, 0.062, 0.145, 0.324, 0.392],
        [0.057, 0.118, 0.159, 0.34, 0.327],
        [0.074, 0.173, 0.221, 0.402, 0.131]
    ])
    # A21--A22
    A21_A22 = np.array([
        [1, 1 / 2],
        [2, 1]
    ])
    # A2的评价矩阵
    A2_Emat = np.array([
        [0.182, 0.198, 0.245, 0.265, 0.11],
        [0.133, 0.147, 0.126, 0.318, 0.276]
    ])
    
    # A31--A33
    A31_A33 = np.array([
        [1, 2, 1],
        [1 / 2, 1, 1 / 2],
        [1, 2, 1]
    ])
    # A3的评价矩阵
    A3_Emat = np.array([
        [0.088, 0.206, 0.234, 0.265, 0.207],
        [0.093, 0.129, 0.25, 0.34, 0.188],
        [0.007, 0.255, 0.221, 0.341, 0.176]
    ])
    # A41--A42
    A41_A42 = np.array([
        [1, 1 / 2],
        [2, 1]
    ])
    # A4的评价矩阵
    A4_Emat = np.array([
        [0.124, 0.211, 0.235, 0.248, 0.182],
        [0.098, 0.182, 0.203, 0.302, 0.214]
    ])
    # B11--B13
    B11_B13 = np.array([
        [1, 1 / 2, 1 / 3],
        [2, 1, 1 / 2],
        [3, 2, 1]
    ])
    # B1的评价矩阵
    B1_Emat = np.array([
        [0.067, 0.194, 0.195, 0.193, 0.351],
        [0.06, 0.161, 0.191, 0.206, 0.382],
        [0.097, 0.134, 0.233, 0.353, 0.284]
    ])
    # B21--B23
    B21_B23 = np.array([
        [1, 1 / 2, 1 / 3],
        [2, 1, 1 / 2],
        [3, 2, 1]
    ])
    # B2的评价矩阵
    B2_Emat = np.array([
        [0.098, 0.182, 0.303, 0.302, 0.114],
        [0.074, 0.163, 0.221, 0.312, 0.231],
        [0.082, 0.198, 0.145, 0.365, 0.21]
    ])
    # B31--B33
    B31_B33 = np.array([
        [1, 1 / 4, 1 / 3],
        [4, 1, 2],
        [3, 1 / 2, 1]
    ])
    # B3的评价矩阵
    B3_Emat = np.array([
        [0.06, 0.157, 0.335, 0.312, 0.136],
        [0.007, 0.199, 0.223, 0.355, 0.216],
        [0.065, 0.054, 0.186, 0.391, 0.304]
    ])
    
    # C11--C12
    C11_C12 = np.array([
        [1, 3 / 2],
        [2 / 3, 1]
    ])
    # C1的评价矩阵
    C1_Emat = np.array([
        [0.093, 0.225, 0.331, 0.249, 0.101],
        [0.093, 0.213, 0.335, 0.265, 0.095]
    ])
    # C21--C23
    C21_C23 = np.array([
        [1, 3, 1 / 3],
        [1 / 3, 1, 1 / 5],
        [3, 5, 1]
    ])
    # C2的评价矩阵
    C2_Emat = np.array([
        [0.06, 0.161, 0.291, 0.306, 0.182],
        [0.097, 0.234, 0.333, 0.253, 0.084],
        [0.067, 0.194, 0.295, 0.293, 0.151]
    ])
    # D11--D12
    D11_D12 = np.array([
        [1, 4 / 3],
        [3 / 4, 1]
    ])
    # D1的评价矩阵
    D1_Emat = np.array([
        [0.074, 0.163, 0.221, 0.312, 0.231],
        [0.097, 0.234, 0.233, 0.253, 0.184]
    ])
    # D21--D23
    D21_D23 = np.array([
        [1, 2, 2],
        [1 / 2, 1, 1 / 2],
        [1 / 2, 2, 1]
    ])
    # D2的评价矩阵
    D2_Emat = np.array([
        [0.079, 0.198, 0.321, 0.29, 0.112],
        [0.093, 0.199, 0.35, 0.278, 0.08],
        [0.097, 0.234, 0.333, 0.253, 0.084]
    ])
    
    
    def Eigenvalues_Feature_vector(phalanx):
        # 计算判断矩阵的特征值和特征向量
        a, b = np.linalg.eig(phalanx)
        # print("特征值是\n", a)
        print("特征值实部:", a.real)  # 显示特征值实部
        max_eigenvalue = max(a.real)
        print("最大特征值:", max_eigenvalue)
        num_shape = phalanx.shape
        CI = (max_eigenvalue - num_shape[0]) / (num_shape[0] - 1)
        print("---->> CI=", CI)
        if num_shape[0] == 2:
            RI = 0
        elif num_shape[0] == 3:
            RI = 0.52
        else:
            RI = 0.89
    
        if RI == 0 and CI == 0:
            CR = 0
            print("---->> CR=", CR)
        else:
            CR = CI / RI
            print("---->> CR=", CR)
        if CR < 0.1:
            print("---->> 一致性比例可接受!")
        else:
            print("---->> 一致性检验不通过!")
        print("\n")
        # print("特征向量是\n", b)  # numpy的特征向量是竖方向的,numpy输出的特征向量是单位化后的向量
        print("特征向量实部:", b.real)
        return b
    
    
    def Weight_vector(phalanx):
        # 计算判断矩阵的权向量
        num = 0
        b = Eigenvalues_Feature_vector(phalanx)
        for i in range(len(b.real)):
            num += b.real[i][0]
        print("\n")
        print("指标权重是:")
        weight_list = []
        for j in range(len(b.real)):
            weight_num = b.real[j][0] / num
            weight_list.append(weight_num)
        print(weight_list)
        print("\n")
        return np.array([weight_list])
    
    
    def get_point(phalanx, Emat):
        # 计算得分
        vec = Weight_vector(phalanx)
        Eva = np.dot(vec, Emat)
        print(Eva)
        grade = np.array([[20, 40, 60, 80, 100]])
        Eva_point = np.dot(Eva, grade.T)
        print("评价得分:----------->>", Eva_point[0][0])
        print("*" * 80)
        return Eva_point[0][0]
    
    
    A_D_weightmat = Weight_vector(A_D)
    A1_A4_weightmat = Weight_vector(A1_A4)
    B1_B3_weightmat = Weight_vector(B1_B3)
    C1_C2_weightmat = Weight_vector(C1_C2)
    D1_D2_weightmat = Weight_vector(D1_D2)
    point_A1 = get_point(A11_A14, A1_Emat)
    point_A2 = get_point(A21_A22, A2_Emat)
    point_A3 = get_point(A31_A33, A3_Emat)
    point_A4 = get_point(A41_A42, A4_Emat)
    point_B1 = get_point(B11_B13, B1_Emat)
    point_B2 = get_point(B21_B23, B2_Emat)
    point_B3 = get_point(B31_B33, B3_Emat)
    point_C1 = get_point(C11_C12, C1_Emat)
    point_C2 = get_point(C21_C23, C2_Emat)
    point_D1 = get_point(D11_D12, D1_Emat)
    point_D2 = get_point(D21_D23, D2_Emat)
    
    
    def standard_layer_score(weightmat, point1, point2, point3=0, point4=0):
        # 标准层的得分
        pointlist = []
        for i in [point1, point2, point3, point4]:
            if i > 0:
                pointlist.append(i)
        pointmat = np.array(pointlist)
        print(pointlist)
        standard_point = np.dot(weightmat, pointmat.T)
        print("------>>>标准层得分", standard_point)
        return standard_point[0]
    
    
    point_A = standard_layer_score(A1_A4_weightmat, point_A1, point_A2, point_A3, point_A4)
    point_B = standard_layer_score(B1_B3_weightmat, point_B1, point_B2, point_B3)
    point_C = standard_layer_score(C1_C2_weightmat, point_C1, point_C2)
    point_D = standard_layer_score(D1_D2_weightmat, point_D1, point_D2)
    
    
    def total_Score(weightmat, point1, point2, point3, point4):
        # 计算总得分
        pointlist = []
        for i in [point1, point2, point3, point4]:
            if i > 0:
                pointlist.append(i)
        pointmat = np.array(pointlist)
        print(pointlist)
        total_Score = np.dot(weightmat, pointmat.T)
        print("------>>>总得分", total_Score[0])
    
    
    total_Score(A_D_weightmat, point_A, point_B, point_C, point_D)
    
    
    #如果要用层次分析法问卷调查的数据,用一下程序进行归一化
    a1=np.array([0.109,0.176,0.142,0.302,0.270])#评价矩阵分隔开的向量
    A3_Emat = np.array([
        [0.088, 0.206, 0.234, 0.265, 0.207],
        [0.093, 0.129, 0.25, 0.34, 0.188],
        [0.007, 0.255, 0.221, 0.341, 0.176]
    ])
    a2=np.array([20,40,60,80,100])
    points=np.dot(A3_Emat,a2.T)
    print(points)
    #归一化处理,归到1-5之内
    for point in points:
        point_num=point/100
        print("%.3f"%float(point_num))
    
    

    运行结果截图

    在这里插入图片描述

    展开全文
  • 基于层次分析法的配电自动终端状态评价方法研究.pdf

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 83,937
精华内容 33,574
关键字:

层次化分析法