层次分析法

层次分析法步骤

  • 建立递阶层次结构模型
  • 构造出各层次中的所有判断矩阵
  • 层次单排序及一致性检验
  • 层次总排序及一致性检验

层次分析法的层次

  • 目标层:决策目标,要解决的问题,一般只有一个目标
  • 准则层:决策标准变量,为了达到目标,需要关注和对比的准则,一般有多个准则,最好不要超过9个
  • 方案层:解决方案

成对比较矩阵

性质:

  • 对角线元素为1:自己和自己比较
  • 对称元素求乘积为1
  • 比较值尽可能取奇数

层次单排序一致性检验 RI-CI检验

层次单排序

对比较矩阵进行特征值分解,最大的特征值为\lambda_{max},与其对应的特征向量W,对$W$进行归一化后即为同一层次相应元素对于上一层次某因素相对重要性的排序权值(权重)。

 一致性检验

定义CI:CI=\frac{\lambda_{max}-n}{n-1}并定义RI表格,计算CR值:CR=\frac{CI}{RI}  一般,当一致性比率$CR < 0.1 $时,认为A的不一致程度在容许范围内,有满意的一致性,通过一致性检验 。

 正互反矩阵

若矩阵$A=(a_{ij})_{n \times n}$满足$(i) a_{ij} > 0, \quad (ii) a_{ji} = \frac{1}{a_{ij}, i,j = 1,2,...,n}$ 称之为正互反矩阵
 

定理:正互返矩阵$A$的最大特征根$\lambda_{max}$必为正实数,其对应的特征向量的所有分量均为正实数。$A$的其余特征值的模严格小于$\lambda_{max}$

层次总排序一致性检验

自顶向下将单准则下的的权重进行合成,合成表,每列之和等于1,上一层次权重之和等于1,进行数乘,加权。

代码示例

import numpy as np

A = np.array([[1, 1/3, 1/4, 1/5],
              [3, 1, 3/4, 3/5],
              [4, 4/3, 1, 4/5],
              [5, 5/3, 5/4, 1]])

m = len(A)  # 获取指标个数
n = len(A[0]) 
RI = [0, 0, 0.58, 0.90, 1.12, 1.24, 1.32, 1.41, 1.45, 1.49, 1.51] # RI是给定的数量

rank = np.linalg.matrix_rank(A)  # 求判断矩阵的秩
eigen_value,eigen_vector = np.linalg.eig(A)  # 求判断矩阵的特征值eigen_value,特征向量eigen_vector
list1 = list(eigen_value)
largest_d = np.max(list1)  # 求最大特征值
index = list1.index(largest_d)

C = eigen_vector[:,index]  # 对应特征向量
CI = (largest_d - n) / (n-1)
CR = CI / RI[n-1]

if CR < 0.10:
    print('CI = ', CI)
    print('CR = ', CR)
    print('对比矩阵A通过一致性检验,各向量权重向量Q为:')
    sum = np.sum(C)
    
    Q = C / sum  # 特征向量标准化
    print(Q)  # 输出权重向量
else:
    print('对比矩阵A未通过一致性检验,需对对比矩阵重新构造')

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值