精华内容
下载资源
问答
  • 论文研究- 多目标决策层次分析法.pdf, 一、引言 T.L.Saaty提出的层次分析法(简称AHP法)是系统工程中对非定量事件作定量分析的一种简便而又有效的方法。它能将决策者对复杂系统的决策思维过程实行数量化,需要数据...
  • 层次分析法属性决策算法

    千次阅读 2020-09-09 21:05:03
    层次分析法 ...层次分析法(AHP)特点在于对复杂的决策问题的本质、影响因素及其内在关系等进行深入分析的基础上,利用较少的定量信息使决策的思维过程数学化,从而为多目标准则或无结构特性的复杂决策

    层次分析法

    层次分析法是笔者参加建模比赛最喜欢用的模型,也是各种算法中最简单的算法,大部分类型的题目都可以用层次分析法入手,进行初步的分析。
    层次分析法的优点在于不需要任何数据,矩阵中用到的数据都是建模者主观上的比较,适用于没有数据或者数据少的问题中,缺点在于有些时候逻辑不够严谨以及模型较单一,推广能力差。

    层次分析法概念:

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

    • 注:决策是指面临多种方案时需要根据一定的标准选择某一种方案,如根据景区的景色、居住环境、餐饮特色、交通便利程度、旅游费用等来选择某一旅游目的地。

    层次分析法原理:

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

    层次分析法步骤:

    1、 建立层次结构模型
    2、 构造成对比较矩阵
    3、 层次单排序及其一致性检验
    4、 层次总排序及其一致性检验

    如何构建层次结构模型

    将决策的目标、考虑的因素(决策准则)和决策对象按它们之间的相互关系分为目标层、准则层、方案层,绘制出层次结构图
    目标层:决策的目的,要解决的问题
    准则层:考虑的因素、决策的准则
    方案层:决策时的备选方案

    如何构造成对比较矩阵

    在确定各层次各因素之间的权重时,如果只是定性的结果,则常常不容易被别人接受,因此提出一致矩阵法,即
    (1)不把所有因素放在一起比较,而是两两相互比较
    (2)对此时采用相对尺度,以尽可能减少性质不同的诸因素相互比较的困难,以提高准确度。

    • 成对比较矩阵时表示本层所有因素针对上一层某一个因素的相对重要性的比较。成对比较矩阵的元素a_ij用1——9的标度方法给出。

    如何一致性检验

    在这里插入图片描述

    计算一致性指标CI
    在这里插入图片描述
    在这里插入图片描述
    为了避免随机因素所造成的误差,还需将 CI 和随机一致性指标 RI 进行比较,得出检验系数 CR,当CR<0.1,该矩阵的一致性可以接受,若CR>=0.1,该矩阵的一致性不能接受。
    公式如下:

                        CR=CI/RI
    

    实例:

    在上海,杭州,南京三个旅游目的地中选择一个最合适的城市进行旅游。

    符号说明

    在这里插入图片描述

    步骤一:绘制层次结构模型

    列举出影响游客选择旅游目的地的因素——景色,费用,居住,饮食,路程。
    然后列出旅游的城市——上海,杭州,南京
    确定目标层、准则层和方案层。
    在这里插入图片描述

    步骤二:构建成对比较矩阵

    根据资料和实际数据,我们可以列出成对比较矩阵
    在这里插入图片描述

    步骤三:一致性检验(代码见最后)

    A矩阵的CI=0.0180,CR=0.0161,一致性检验通过

    步骤四:得出结果

    经过计算
    A_1 A_2 A_3 A_4 A_5对Z的权重为【0.2636,0.4758,0.0538,0.0981,0.1087】
    B_1 B_2 B_3对A_1的权重为【0.5954,0.2764,0.1283】
    B_1 B_2 B_3对A_2的权重为【0.0819,0.2363,0.6817】
    B_1 B_2 B_3对A_3的权重为【0.4286,0.4286,0.1429】
    B_1 B_2 B_3对A_4的权重为【0.6337,0.1919,0.1744】
    B_1 B_2 B_3对A_5的权重为【0.1667,0.1667,0.6667】

    结论:

    B_1 B_2 B_3对总目标的权重为【0.3,0.245,0.455】,因此选择南京作为旅游目的地最合适。

    多属性决策

    多属性决策模型实质:

    利用已有的决策信息,通过一定的方式,对一组(有限个)备选方案进行排序或择优。
    主要由两部分构成:(1)获取决策信息——一般包括属性权重和属性值(实数、区间数和语言),其中属性权重的确定是多属性决策中的一个重要研究内容;(2)通过一定方法对决策信息进行集结并对方案进行排序和择优。

    加权算数平均算子(WAA)

    信息集结方法包括加权算数平均算子(WAA)、加权几何平均算子(WGA),有序加权平均算子(OWA),本文主要介绍WAA。

    定义

    在这里插入图片描述

    属性归一化

    属性类型一般有效益型、成本性、固定性、区间型、偏离区间型等。其中效益型属性是指属性值越大越好的属性;成本型属性是指属性值越小越好的属性;固定型属性是指属性值越接近某个固定值α_i越好的属性;区间型属性是指属性值越接近某个固定区间[〖q_1〗j,〖q_2〗j](包括落入该区间)越好的属性,偏离区间型属性是指属性值越偏离某个固定区间[〖q_1〗j,〖q_2〗j ]越好的属性。为了消除不同物理量纲对决策结果的影响,决策时可按下列公式对数据进行规范化处理。
    在这里插入图片描述



    在这里插入图片描述

    多属性决策实例:

    投资银行拟对四家企业(方案)进行投资,抽取下列5项指标(属性)进行评估——产值(万元);投资成本(万元);销售额(万元);国家收益比重;环境污染程度
    投资银行考察了上年度4家企业的上述指标情况(其中污染程度系有环保部门历时检测并量化),所得结果如表所示。
    在各项指标中,投资成本、环境污染程度为成本型,其他为效益型,属性权重信息完全未知,试确定最佳投资方案。
    在这里插入图片描述

    计算属性权重

    对五个属性构建成对比较矩阵,计算属性权重
    在这里插入图片描述

    一致性检验的MATLAB代码

    disp(' 请输入成对比较矩阵A ');
    A=input('A=');
    [n,n]=size(A);
    x=ones(n,100);
    y=ones(n,100);
    m=zeros(1,100);
    m(1)=max(x(:,1));
    y(:,1)=x(:,1);
    x(:,2)=A*y(:,1);
    m(2)=max(x(:,2));
    y(:,2)=x(:,2)/m(2);
    p=0.0001;i=2;k=abs(m(2)-m(1));
    while  k>p
      i=i+1;
      x(:,i)=A*y(:,i-1);
      m(i)=max(x(:,i));
      y(:,i)=x(:,i)/m(i);
      k=abs(m(i)-m(i-1));
    end
    a=sum(y(:,i));
    w=y(:,i)/a;
    t=m(i);
    disp(w);
    % 以下是一致性检验
    CI=(t-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);
    if CR<0.10
        disp('此矩阵的一致性可以接受!');
        disp('CI=');disp(CI);
        disp('CR=');disp(CR);
    end
    
    展开全文
  • 【AHP】层次分析法原理与Python实现

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

    层次分析法,简称AHP,层次分析法是 多目标决策问题 的一个解决方案。
    它把有关的元素分解成目标、准则、方案等层次,在此基础之上进行定性和定量分析的决策方法。
    该方法是美国运筹学家匹茨堡大学教授萨蒂于20世纪70年代初提出的。
    人们分析问题时,经常面对一个由相互关联、相互制约的众多因素构成的复杂系统。层次分析法则为研究这类复杂的系统,提供了一种新的、简洁的、实用的决策方法。

    原理

    假设你有m个候选方案,有n个准则。
    (例如,有m=3个候选干部,n=5个评价指标,分别是品德、才能、资历、年龄、群众关系)

    比较矩阵

    比较矩阵是指,你预先对评价指标有个重要度比较。
    例如,选拔干部有5个条件,这个比较矩阵就是5X5的,如下:
    ( 1 2 7 5 5 1 / 2 1 4 3 3 1 / 7 1 / 4 1 1 / 2 1 / 3 1 / 5 1 / 3 2 1 1 1 / 5 1 / 3 3 1 1 ) \left(\begin{array}{ccc} 1 & 2 & 7 & 5 & 5\\ 1/2 & 1 & 4 & 3 & 3\\ 1/7 & 1/4 & 1 & 1/2 & 1/3\\ 1/5 & 1/3 & 2 & 1 & 1\\ 1/5 & 1/3 & 3 & 1 & 1 \end{array}\right) 11/21/71/51/5211/41/31/374123531/211531/311

    例如, a 14 = 5 a_{14}=5 a14=5指的是品德与年龄重要性之比是5
    比较矩阵需要满足以下性质

    1. 比较矩阵的尺度

    比较矩阵上元素的值是拍脑袋定的,遵循以下规则:

    尺度123456789
    重要性相同 稍强  明显强 绝对强

    2. 正互反矩阵

    对角线对称的两个数互为倒数,即 a j i = 1 a i j a_{ji}=\dfrac{1}{a_{ij}} aji=aij1
    这是合乎实际情况的,例如,品德对比年龄重要程度是5,那么年龄对比品德重要程度是1/5

    3. 一致性

    一致性指的是, a i j = a i k a k j a_{ij}=a_{ik}a_{kj} aij=aikakj
    这也是合乎实际情况的,例如,品德对比才能重要程度是2,才能对比资历的重要程度是4,那么品德对比资历的重要程度就是2X4=8

    实际上,比较矩阵并不必须严格满足一致性,上面案例中的那个矩阵就不满足。
    但是需要近似满足一致性。也就是说,需要通过一致性检验。

    一致性检验
    定义n阶正互反矩阵的最大特征根为 λ max ⁡ \lambda_{\max} λmax,那么以下成立

    • λ max ⁡ ≥ n \lambda_{\max}\geq n λmaxn
    • 如果 λ max ⁡ = n \lambda_{\max}=n λmax=n,那么这个n阶互反矩阵就是一致矩阵。

    定义 C I = λ max ⁡ − n n − 1 CI=\dfrac{\lambda_{\max}-n}{n-1} CI=n1λmaxn,CI越小,越接近一致矩阵。

    然后还有个RI指标表:

    n123456789
    RI000.580.91.121.241.321.411.45

    如果 C R = C I R I < 0.1 CR=\dfrac{CI}{RI}<0.1 CR=RICI<0.1,则判断有较强的一致性。

    重要性

    如果一个矩阵满足上面的条件,那么它最大特征值对应的特征向量就可以认为是每个维度的重要性权重。

    算法流程

    那么整套算法实际上是用了两次重要性权重。

    准则层,从准则的重要性矩阵(nxn矩阵)中,抽取重要性权重。它的现实意义是 每个准则的重要程度
    也就是说,输入的是nxn一个矩阵,值是每个准则两两之间重要度,输出的是这n个准则各自的权重。

    方案层,对每个准则,m个方案都有个mxm矩阵(总共是n个mxm矩阵)。也就是说,对每个准则,都可以算出m个方案的重要性权重。

    然后n个重要性权重组合起来,与准则层的重要性权重相乘。就得到了每个方案的重要性权重。

    代码

    import numpy as np
    import pandas as pd
    import warnings
    
    
    class AHP:
        def __init__(self, criteria, b):
            self.RI = (0, 0, 0.58, 0.9, 1.12, 1.24, 1.32, 1.41, 1.45, 1.49)
            self.criteria = criteria
            self.b = b
            self.num_criteria = criteria.shape[0]
            self.num_project = b[0].shape[0]
    
        def cal_weights(self, input_matrix):
            input_matrix = np.array(input_matrix)
            n, n1 = input_matrix.shape
            assert n == n1, '不是一个方阵'
            for i in range(n):
                for j in range(n):
                    if np.abs(input_matrix[i, j] * input_matrix[j, i] - 1) > 1e-7:
                        raise ValueError('不是反互对称矩阵')
    
            eigenvalues, eigenvectors = np.linalg.eig(input_matrix)
    
            max_idx = np.argmax(eigenvalues)
            max_eigen = eigenvalues[max_idx].real
            eigen = eigenvectors[:, max_idx].real
            eigen = eigen / eigen.sum()
    
            if n > 9:
                CR = None
                warnings.warn('无法判断一致性')
            else:
                CI = (max_eigen - n) / (n - 1)
                CR = CI / self.RI[n]
            return max_eigen, CR, eigen
    
        def run(self):
            max_eigen, CR, criteria_eigen = self.cal_weights(self.criteria)
            print('准则层:最大特征值{:<5f},CR={:<5f},检验{}通过'.format(max_eigen, CR, '' if CR < 0.1 else '不'))
            print('准则层权重={}\n'.format(criteria_eigen))
    
            max_eigen_list, CR_list, eigen_list = [], [], []
            for i in self.b:
                max_eigen, CR, eigen = self.cal_weights(i)
                max_eigen_list.append(max_eigen)
                CR_list.append(CR)
                eigen_list.append(eigen)
    
            pd_print = pd.DataFrame(eigen_list,
                                    index=['准则' + str(i) for i in range(self.num_criteria)],
                                    columns=['方案' + str(i) for i in range(self.num_project)],
                                    )
            pd_print.loc[:, '最大特征值'] = max_eigen_list
            pd_print.loc[:, 'CR'] = CR_list
            pd_print.loc[:, '一致性检验'] = pd_print.loc[:, 'CR'] < 0.1
            print('方案层')
            print(pd_print)
    
            # 目标层
            obj = np.dot(criteria_eigen.reshape(1, -1), np.array(eigen_list))
            print('\n目标层', obj)
            print('最优选择是方案{}'.format(np.argmax(obj)))
            return obj
    
    
    if __name__ == '__main__':
        # 准则重要性矩阵
        criteria = np.array([[1, 2, 7, 5, 5],
                             [1 / 2, 1, 4, 3, 3],
                             [1 / 7, 1 / 4, 1, 1 / 2, 1 / 3],
                             [1 / 5, 1 / 3, 2, 1, 1],
                             [1 / 5, 1 / 3, 3, 1, 1]])
    
        # 对每个准则,方案优劣排序
        b1 = np.array([[1, 1 / 3, 1 / 8], [3, 1, 1 / 3], [8, 3, 1]])
        b2 = np.array([[1, 2, 5], [1 / 2, 1, 2], [1 / 5, 1 / 2, 1]])
        b3 = np.array([[1, 1, 3], [1, 1, 3], [1 / 3, 1 / 3, 1]])
        b4 = np.array([[1, 3, 4], [1 / 3, 1, 1], [1 / 4, 1, 1]])
        b5 = np.array([[1, 4, 1 / 2], [1 / 4, 1, 1 / 4], [2, 4, 1]])
    
        b = [b1, b2, b3, b4, b5]
        a = AHP(criteria, b).run()
    

    输出:

    准则层:最大特征值5.072084,CR=0.014533,检验通过
    准则层权重=[0.47583538 0.26360349 0.0538146  0.09806829 0.10867824]
    
    方案层
              方案0       方案1       方案2     最大特征值            CR  一致性检验
    准则0  0.081935  0.236341  0.681725  3.001542  8.564584e-04   True
    准则1  0.595379  0.276350  0.128271  3.005535  3.075062e-03   True
    准则2  0.428571  0.428571  0.142857  3.000000 -4.934325e-16   True
    准则3  0.633708  0.191921  0.174371  3.009203  5.112618e-03   True
    准则4  0.344545  0.108525  0.546931  3.053622  2.978976e-02   True
    
    目标层 [[0.318586   0.23898522 0.44242878]]
    最优选择是方案2
    
    展开全文
  • 本文基于对层次分析法在处理多目标决策问题时计算量较大、易出现误差的情况提出改进的目的,采用修改标度值和简化判断矩阵的方法,有效地解决层次分析法在处理多目标决策问题时由于标度值差异太小而容易引起误差的...
  • AHP(层次分析法)学习笔记及多层权重Python实践

    千次阅读 多人点赞 2020-09-07 13:22:40
    层次分析法(The analytic hierarchy process)简称AHP,它是将与决策有关的因素分解成目标、准则、方案等层次,在此基础之上进行定性和定量分析的决策方法。 本文为简明AHP学习笔记,并通过Python实践构建多层权重...

    层次分析法(The analytic hierarchy process)简称AHP,在20世纪70年代中期由美国运筹学家托马斯·塞蒂(TLsaaty)正式提出。它是将与决策有关的因素分解成目标、准则、方案等层次,在此基础之上进行定性和定量分析的决策方法。由于它在处理复杂的决策问题上的实用性和有效性,很快在世界范围得到重视。它的应用已遍及经济计划和管理、能源政策和分配、行为科学、军事指挥、运输、农业、教育、人才、医疗和环境等领域。

    1. 层次分析法

    1.1. AHP模型构建

    在深入分析问题的基础上,将决策的目标、考虑的因素和决策对象按相关关系分为最高层、中间层和最低层。

    最高层:决策的目的、要解决的问题
    中间层:主因素,考虑的因素、决策的准则
    最低层:决策时的备选方案,也可为中间层的子因素

    在这里插入图片描述

    1.2. 构造判断矩阵

    构造判断矩阵的方法是一致矩阵法,即:不把所有因素放在一起比较,而是两两相互比较;对此时采用相对尺度,以尽可能减少性质不同因素相互比较的困难,以提高准确度。

    标度 A i j A_{ij} Aij含义
    1i 指标比 j 指标同样重要
    3i 指标比 j 指标略微重要
    5i 指标比 j 指标明显重要
    7i 指标比 j 指标重要的多
    9i 指标比 j 指标重要很多
    2,4,6,8介于上述两个判断的中值
    倒数i 指标与 j 指标比较得 A i j A_{ij} Aij, j 指标与 i指标比较判断得 A j i = 1 A i j A_{ji}=\frac{1}{A_{ij}} Aji=Aij1

    按照前面建立的层次递阶结构模型,每一层因素以相邻上一层因素为基准,按照表 1 标度取值方法两两比较构造判断矩阵。指标的标度值由专家取定,构造判断矩阵 A = [ a i j ] m × n A=\left [ a_{ij}\right ]_{m\times n} A=[aij]m×n

    因素两两比较,比较次数为: n ( n − 1 ) 2 \frac{n(n-1)}{2} 2n(n1)

    判断思想:整体判断,n个因素两两比较;定性判断,定量标识(标量);
    构造判断矩阵规则:填补右上三角为有规则;
    判断矩阵元素有如下特征: a i j > 0 a_{ij}>0 aij>0 a i j = 1 a i j a_{ij}=\frac{1}{a_{ij}} aij=aij1 a i i = 1 a_{ii}=1 aii=1

    1.2.1. 构造准则层判断矩阵

    按专家投票打分等方式,构造准则层判断矩阵。在这里插入图片描述

    1.2.2. 构造因素层判断矩阵

    以“合规管理”为例,专家投票打分等人为方式构造因素层判断矩阵。
    在这里插入图片描述

    1.3. 层次单排序及其一致性检验

    对应于判断矩阵最大特征根 λ m a x λ_{max} λmax的特征向量,经归一化(使向量中各元素之和为1)后记为 W W W W W W的元素为同一层次元素对于上一层因素某因素相对重要性的排序权值,这一过程称为层次单排序。

    1.3.1. 规范化

    将判断矩阵按列规范化,即对判断矩阵 A 每一列归一化: a ˉ i j = a i j ∑ i = 1 n a i j \bar{a}_{ij} = \frac{a_{ij}}{\sum_{i=1}^{n}a_{ij}} aˉij=i=1naijaij

    按行相加得和向量: W i = ∑ i = 1 n a ˉ i j W_{i} ={\sum_{i=1}^{n}\bar{a}_{ij}} Wi=i=1naˉij

    1.3.2. 特征向量(权重)

    将得到的和向量正规化,可得权重向量: W ˉ i = W i ∑ i = 1 n W i \bar{W}_{i}=\frac{W_{i}}{\sum_{i=1}^{n}W_{i}} Wˉi=i=1nWiWi,近似为特征向量。

    1.3.3. 最大特征根

    计算最大特征根 λ m a x λ_{max} λmax,采用“和积法”: λ m a x = 1 n ∑ i = 1 n ( A W ˉ ) i W ˉ i λ_{max}=\frac{1}{n} \sum_{i=1}^{n} \frac{(A \bar{W})_{i}}{\bar{W}_{i}} λmax=n1i=1nWˉi(AWˉ)i

    这里 ( A W ˉ ) i (A \bar{W})_{i} (AWˉ)i是指矩阵乘法,原始矩阵 A A A与特征矩阵 W ˉ \bar{W} Wˉ相乘。

    1.3.4. 一致性检验

    一致性检验是指对判断矩阵 A A A确定不一致的允许范围。 n n n阶一致阵的唯一非零特征根为 n n n n n n阶正互反阵 A A A的最大特征根 λ m a x ⩾ n λ_{max}\geqslant n λmaxn 时, A A A为非一致矩阵,比 n n n 大的越多, A A A的不一致性越严重; 当且仅当 λ m a x = n λ_{max}=n λmax=n 时, A A A为一致矩阵。因此可由 λ m a x λ_{max} λmax 是否等于 n 来检验判断矩阵 A A A是否为一致矩阵。

    从理论上分析得到:如果A是完全一致的成对比较矩阵,应该有

    a i j a j k = a i k , 1 ≤ i , j , k ≤ n . a_{ij}a_{jk}=a_{ik},1\le i,j,k\le n. aijajk=aik,1i,j,kn.

    但实际上在构造成对比较矩阵时要求满足上述众多等式是不可能的。因此退而要求成对比较矩阵有一定的一致性,即可以允许成对比较矩阵存在一定程度的不一致性。

    由分析可知,对完全一致的成对比较矩阵,其绝对值最大的特征值等于该矩阵的维数。对成对比较矩阵的一致性要求,转化为要求: 的绝对值最大的特征值和该矩阵的维数相差不大。

    检验成对比较矩阵A一致性的步骤如下:
    定义一致性指标 C I = λ m a x − n n − 1 CI=\frac{λ_{max}−n}{n−1} CI=n1λmaxn
    C I = 0 CI=0 CI=0,有完全的一致性;
    C I CI CI接近于0,有满意的一致性;
    C I CI CI越大,不一致越严重。

    为了衡量 C I CI CI的大小,引入随机一致性指标 R I RI RI,按照 Saaty 给出的关于平均随机一致性指标:

    n1234567891011
    RI000.580.901.121.241.321.411.451.491.51

    注解:从有关资料查出检验成对比较矩阵A 一致性的标准RI:RI称为平均随机一致性指标,它只与矩阵阶数n 有关(一般不超过9个)。

    定义一致性比率: C R = C I R I CR=\frac{CI}{RI} CR=RICI,一般认为一致性比率$CR<0.1 1 时 , 认 为 1时,认为 1A 的 不 一 致 程 度 在 容 许 范 围 之 内 , 有 满 意 的 一 致 性 , 通 过 一 致 性 检 验 。 可 用 其 归 一 化 特 征 向 量 作 为 权 向 量 , 否 则 要 重 新 构 造 成 对 比 较 矩 阵 的不一致程度在容许范围之内,有满意的一致性,通过一致性检验。可用其归一化特征向量作为权向量,否则要重新构造成对比较矩阵 A , 对 ,对 a_{ij} 加以调整。

    1.4. 层次总排序及其一致性检验

    计算某一层次所有因素对于最高层(总目标)相对重要性的权值,称为层次总排序。这一过程是从最高层次到最低层次依次进行的。

    2. Python代码实现

    2.1. 准则层与因素层权重实现代码

    代码中到判断矩阵,为上文中举例内容,但是因素层内容只在文中列出“合规管理”部分,其他以代码为准。

    import numpy as np
    import pandas as pd
    import warnings
    
    class AHP:
        def __init__(self, criteria, factors):
            self.RI = (0, 0, 0.58, 0.9, 1.12, 1.24, 1.32, 1.41, 1.45, 1.49)
            self.criteria = criteria               #准则
            self.factors = factors                 #因素
            self.num_criteria = criteria.shape[0]
            self.num_factors = factors[0].shape[0]
    
        def cal_weights(self, input_matrix):
            input_matrix = np.array(input_matrix)
            n, n1 = input_matrix.shape
            assert n == n1, '不是一个方阵'
            for i in range(n):
                for j in range(n):
                    if np.abs(input_matrix[i, j] * input_matrix[j, i] - 1) > 1e-7:
                        raise ValueError('不是反互对称矩阵')
    
            eigenvalues, eigenvectors = np.linalg.eig(input_matrix)
    
            max_idx = np.argmax(eigenvalues)
            max_eigen = eigenvalues[max_idx].real
            eigen = eigenvectors[:, max_idx].real
            eigen = eigen / eigen.sum()
    
            if n > 9:
                CR = None
                warnings.warn('无法判断一致性')
            else:
                CI = (max_eigen - n) / (n - 1)
                CR = CI / self.RI[n]
            return max_eigen, CR, eigen
    
        def run(self):
            max_eigen, CR, criteria_eigen = self.cal_weights(self.criteria)
            print('准则层:最大特征值{:<5f},CR={:<5f},检验{}通过'.format(max_eigen, CR, '' if CR < 0.1 else '不'))
            print('准则层权重={}\n'.format(criteria_eigen))
    
            max_eigen_list, CR_list, eigen_list = [], [], []
            k = 1
            for i in self.factors:
                max_eigen, CR, eigen = self.cal_weights(i)
                max_eigen_list.append(max_eigen)
                CR_list.append(CR)
                eigen_list.append(eigen)
                print('准则 {} 因素层:最大特征值{:<5f},CR={:<5f},检验{}通过'.format(k,max_eigen, CR, '' if CR < 0.1 else '不'))
                print('因素层权重={}\n'.format(eigen))
    
                k = k + 1
                
            return criteria_eigen ,eigen_list
    
    def main():
        # 准则重要性矩阵
        criteria = np.array([[1, 7, 5, 7, 5],
                             [1 / 7, 1, 2, 3, 3],
                             [1 / 5, 1 / 2, 1,  2,  3],
                             [1 / 7, 1 / 3, 1 / 2, 1, 3],
                             [1 / 5, 1 / 3, 1 / 3, 1 / 3, 1]])
    
        # 对每个准则,方案优劣排序
        b1 = np.array([[1, 5], [1 / 5, 1]])
        b2 = np.array([[1, 2, 5], [1 / 2, 1, 2], [1 / 5, 1 / 2, 1]])
        b3 = np.array([[1, 5, 6, 8], [1 / 5, 1 ,2, 7], [1 / 6, 1 / 2, 1 ,4],[1 / 8, 1 / 7, 1 / 4, 1]])
        b4 = np.array([[1, 3, 4], [1 / 3, 1, 1], [1 / 4, 1, 1]])
        b5 = np.array([[1, 4, 5, 5], [1 / 4, 1, 2, 4], [1 /5 , 1 / 2, 1, 2], [1 / 5,1 /4,1 / 2, 1]])
    
        b = [b1, b2, b3, b4, b5]
        a,c = AHP(criteria, b).run()
        #下一段将用到此函数
        #fuzzy_eval(a,c)
        
    if __name__ == '__main__':
    
        main()
    

    2.2. 运行结果

    准则层:最大特征值5.418198,CR=0.084314,检验通过
    准则层权重=[0.58293141 0.16396029 0.11819176 0.08112143 0.05379511]
    
    准则 1 因素层:最大特征值2.000000,CR=0.000000,检验通过
    因素层权重=[0.83333333 0.16666667]
    
    准则 2 因素层:最大特征值3.005535,CR=0.003075,检验通过
    因素层权重=[0.59537902 0.27635046 0.12827052]
    
    准则 3 因素层:最大特征值4.236855,CR=0.070493,检验通过
    因素层权重=[0.63674151 0.20373312 0.11691427 0.04261111]
    
    准则 4 因素层:最大特征值3.009203,CR=0.005113,检验通过
    因素层权重=[0.63370792 0.19192062 0.17437146]
    
    准则 5 因素层:最大特征值4.131108,CR=0.039020,检验通过
    因素层权重=[0.58810136 0.21808417 0.11971903 0.07409544]
    

    2.3. 关于权重的使用

    一是用用模糊层次综合分析,给出综合评价(在上文获取权重的基础上,人为或者客观数据等方式给出各个因素评价,构成因素评价矩阵,因素评价矩阵与权重矩阵做矩阵积,这个结果将是综合评价,后续文章将逐步展开写);
    二是配合神经网络使用,作为模型训练提供数据。

    由于编制水平有限,欢迎反馈指点。

    参考:

    [1]《AHP | 层次分析法原理及Python实现》 简书 PurePlayer 2020年2月
    [2]《层次分析法(AHP)详细步骤》 CSDN博客 我的她像朵花 2019年1月
    [3]《【AHP】层次分析法原理与Python实现》 CSDN博客 ,guofei9987 ,2020年1月

    展开全文
  • 层析分析法是将定量与定性相结合的多目标决策法,是一种使用频率很高的方法,在经济管理城市规划等许多领域得到了广泛应用由于其结果受主观思维的影响较大,许多科研工作者对其进行了深入的研究,将模糊理论与层次分析法...
  • [摘 要]层次分析法AHP是运筹学下的一个分支方法是一种将与决策相关的各个因素逐一分解成目标准则方案等各个层次并在此基础之上进行定性定量分析的一种方法这种方法主要对解决一些定性问题有参考价值本文从大学生角度...
  • 层次分析法

    2012-08-17 22:21:07
    层次分析法(Analytic Hierarchy Process,简称AHP)是对一些较为复杂、较为模 糊的问题作出决策的简易方法,它特别适用于那些难于完全定量分析的问题。它是美 国运筹学家T. L. Saaty 教授于上世纪70 年代初期提出的...
  • 层次分析法(AHP)

    千次阅读 2021-03-16 17:12:26
    日常生活中有很决策问题决策是指在面临多种方案时需要依据一定的标准选择某一种方案。日常生活中有许多决策问题。比如: 买钢笔,一般要依据质量、颜色、实用性、价格、外形等方面的因素选择某一支钢笔。 ...

    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.你们要的免费书来了

    展开全文
  • 中间层的层次分析法(一)

    千次阅读 2019-06-18 00:16:12
    层次分析法(Analytical Hierarchy Process 简称 AHP 是一种解决多目标的复杂问题的定性与定量相结合的决策分析方法。该方法将定量分析与定性分析结合起来,用决策者的经验判断各衡量目标能否实现的标准之间的相对...
  • 8.1 系统评价决策模型概论 8.1.1 问题的引入 8.1.2 系统评价决策模型的基本概念 8.1.3 系统评价决策模型的要素 8.1.4 系统评价决策模型的步骤 8.1.5 评价指标的规范化处理 1.评价指标类型的一致化处理 2.评价...
  • 数学建模之层次分析法

    千次阅读 2020-12-23 12:39:09
    数学建模之层次分析法层次分析法层次分析法就是一种解决多目标的复杂问题的定性与定量相结合的决策分析方法。该方法将定量分析与定性分析结合起来,用决策者的经验判断各衡量目标能否实现的标准之间的相对重要程度,并...
  • 1 层次分析法简介 1.1 概念 层次分析法(Analytic Hierarchy Process,AHP):是一种定性和定量相结合的、系统的、层次化...层次分析法的原理:层次分析法根据问题的性质和要达到的总目标,将问题分解为不同的组成因素,并
  • 本文用层次分析法建立层次结构模型对改善城市中心交通环境问题的三个方案进行决策,通过该模型进行计算及结果的分析,可知最佳的决策方案为:A1 :在商场附近修建一座环形天桥。 本文的层次结构模型中,目标层为:...
  • 【AHP】层次分析法 | 过程解读 案例实践

    万次阅读 多人点赞 2020-08-20 19:56:21
    AHP,即层次分析法(Analytic Hierarchy Process,AHP)是一种系统化的、层次化的多目标综合评价方法。在评价对象的待评价属性复杂多样,结构各异,难以量化的情况下AHP层次分析法也能发挥作用。 AHP 基本思想 [1] ...
  • 数学建模:层次分析法实例以及代码

    万次阅读 多人点赞 2020-11-22 22:06:09
    目录层次分析法的思想层次分析法步骤具体案例(市政工程项目建设决策)1.问题提出2.建立递阶层次结构3.构造判断矩阵(成对比较阵)并赋值4.层次单排序(计算权向量)与检验(一致性检验)计算权向量一致性检验5.层次总...
  • 本研究基于行业日常维护管理需要信息系统投资的事实。 目前,维修部门缺乏适当的决策支持系统(DSS)来监控现场工作中的承包商...使用层次分析法进行决策分析的 FBM 管理是我们在这篇论文中对先进计算机化系统的贡献。
  • 层次分析法(AHP)详细步骤

    万次阅读 多人点赞 2019-01-07 13:01:10
    层次分析法是一种解决多目标的复杂问题的定性与定量相结合的决策分析方法。该方法将定量分析与定性分析结合起来,用决策者的经验判断各衡量目标之间能否实现的标准之间的相对重要程度,并合理地给出每个决策方案的...
  • 层次分析法原理和matlab代码

    千次阅读 2020-06-15 21:16:56
    文章目录一、层次分析法简述二、求解过程1、建立层次结构模型2、构造成对比较矩阵3、计算权向量并做一致性检验4、计算组合权向量并做组合一致性检验三、参考文献 一、层次分析法简述 层次分析法(The analytic ...
  • 层次分析法的基本思路4.层次分析法的基本步骤4.1 建立层次结构模型4.2 构建成对比较矩阵4.3 做一致性检验 1.问题提出 日常生活中有很决策问题决策是指在面临多种方案时需要依据一定的标准(一个或个)选择某...
  • 层次分析法,Theanalytichierarchyprocess,简称AHP。最基础的模型之一,主要用于解决评价类问题。(打分系统)
  • 我们可以利用层次分析法来确定每个因素之间的比重,得到每个选择的综合评分,得到客观准确的分析来帮助毕业生进行选择。 目录 一、问题的重述 2 二、模型假设 2 三、变量说明 2 四、模型的建立与求解 2 ...
  • 了利用层次分析法解决问题的数学模型。本文建立了清晰的层次结 构图,即:目标层为选出最佳的领导干部,准则层为候选人的健康状 况、业务知识、写作能力、口才、政策水平、工作作风,决策层为P1, P2,P3三位候选...
  • 层次分析法在matlab上的实现

    万次阅读 多人点赞 2018-06-12 10:36:17
    层次分析法(The analytic hierarchy process)简称AHP,在20世纪70年代中期由美国运筹学家托马斯.塞蒂(T.L.saaty)正式提出。它是一种定性和定量相结合的、系统化、层次化的分析方法。由于它在处理复杂的决策问题...
  • 层次分析法原理及应用案例

    万次阅读 2020-10-30 15:04:00
    层次分析法是指将一个复杂的多目标决策问题作为一个系统,将目标分解为个目标或准则,进而分解为指标(或准则、约束)的若干层次,通过定性指标模糊量化方法算出层次单排序(权数)和总排序,以作为目标(指标...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 15,966
精华内容 6,386
关键字:

层次分析法解决多目标决策问题