多准则决策问题评估方法 | 层次分析法(含代码)

        目前多准则决策问题的评估方法主要分为定性分析方法和定量分析方法两类。定性分析方法主要包括专家咨询、熵权法、案例研究和德尔菲法等;定量分析法主要包括层次分析法、主成分分析法、因子分析法、模糊综合评价法、色综合评价法以及数据包络分析法(DEA法)、灰云评价等多种方法,不同方法的评价结果都是依据指数或分值对参评对象的综合状况进行排序评价。综合评价方法的选取要依据研究对象的特点而定。

下面以层次分析法为例进行介绍:

         层次分析法(The Analytic Hierarchy Process)简记AHP,是美国运筹学家T.L.Satty等人提出的一种定量和定性分析相结合的多准则决策方法,广泛应用于分析复杂的社会、经济以及科学管理领域的问题。其基本原理是通过构造层次分析结构,排列组合得出优劣次序来为决策者提供依据。其特别适合于对无结构特性的系统评价以及多目标、多准则、多时期等的系统评价。目前已经在大气环境研究、水环境研究、生态环境研究等领域得到了广泛应用。

        层次分析法的一般步骤:

(1)建立目标层次结构。该层次结构模型由从上至下目标层、准则层、指标层组成。各层之间,上层受下层影响,而层内互相独立。

(2)构建判断矩阵。决策者按照下层评价因子对上层因子的重要程度,分别对准则层因素和指标层评价因子进行两两对比分析,构造准则层相对一目标层、指标层相对于准则层各单因素的判断矩阵。具体如下:

       依次对同一层次中归属于同一上层准则的两两元素的重要程度进行对比分析,建立判断矩阵,矩阵具有以下性质aij>0, ,aij=(i,j=1,2,…n)。式中表示元素 和关于上一层次重要程度的比较结果,通常采用1~9 比例标度法来对重要程度进行赋值,1 表示同等重要,9 表示前者重要程度远超后者;反之相应的倒数表示不重要程度,如1/9 表示前者重要程度远远不及后者。

         根据获得的判断矩阵A,计算其最大特征根,相应的特征向量W,进行归一化处置的W 向量也就是同一层级元素相互之间的权重比例。

         由于被评价对象复杂以及评价者思维逻辑的多样与局限,判断矩阵有一定概率会出现“甲的重要性高于乙,乙的重要性又高于丙,但丙的重要性反而比甲高”的逻辑矛盾导致结果不合理,因此必须针对判断矩阵开展一致性检验,具体检验方法如下:

                                                         4-5 平均随机一致性指标表

N

1

2

3

4

5

6

7

8

9

0.00

0.00

0.58

0.90

1.12

1.24

1.32

1.41

1.45

注:根据随机一致性比率C.R.的含义,当矩阵为一阶或者二阶时,C.R.一定为0,因此矩阵为一阶或者二阶时一定通过一致性检验,只需要计算出特征向量作为权重系数即可。

(4)确定各指标的综合权重。

         基于层次分析法,对于定量化每个指标在层次结构中对于上一层因素的影响,萨蒂提出了“1-9”比较标度法。每位专家将依据此对于每个层次中的各个指标对于其他指标的重要性分别按照1、3、5、7、9进行打分,每个分数的具体含义见表1。在打分中,倒数代表相反的重要性含义。

1 比较标度代表含义

比较标度

代表含义

1

两者重要性相同

3

比后者稍微重要

5

比后者较强重要

7

比后者强烈重要

9

比后者极端重要

案例实现代码如下:

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
层次分析(AHP)是一种常用的多准则决策分析方法,它通过构建层次结构模型,将复杂的问题分解为若干个层次,从而简化决策问题,同时利用专家经验和知识来确定各层次之间的权重,从而对不同选择方案进行评估。 在AHP中,评估参数的权值是根据专家意见或者实验数据来确定的。下面是一个简单的示例代码,用于演示如何使用Python来实现AHP算。 首先,我们需要定义一个矩阵类,用于存储AHP中的层次结构矩阵和判断矩阵。 ```python class Matrix: def __init__(self, data): self.data = data self.shape = (len(data), len(data[0])) ``` 然后,我们需要实现计算矩阵的特征向量和特征值的函数。这里使用numpy库中的linalg.eig方法来计算特征向量和特征值。 ```python import numpy as np def eig(matrix): eigvals, eigvecs = np.linalg.eig(matrix) return eigvals.real, eigvecs.real ``` 接下来,我们需要实现计算层次结构矩阵的权值的函数。这里采用了递归的方式,从最底层开始计算。 ```python def weights(matrix): if matrix.shape == (1, 1): return [1.0] eigvals, eigvecs = eig(matrix) max_eigval_index = np.argmax(eigvals) max_eigvec = eigvecs[:, max_eigval_index] sum_eigvec = np.sum(max_eigvec) return max_eigvec / sum_eigvec ``` 最后,我们需要实现计算判断矩阵的权值的函数。这里同样采用了递归的方式。 ```python def criteria_weights(criteria, data): if criteria["type"] == "criteria": matrix = Matrix(criteria["matrix"]) w = weights(matrix) criteria["weights"] = w.tolist() for subcriteria in criteria["subcriteria"]: criteria_weights(subcriteria, data) elif criteria["type"] == "alternative": for alternative in criteria["alternatives"]: matrix = Matrix(alternative["matrix"]) w = weights(matrix) alternative["weights"] = w.tolist() ``` 最终,我们可以使用上述函数来计算评估参数的权值。例如,假设我们有以下层次结构: - 准则1 - 子准则1.1 - 子准则1.2 - 准则2 - 子准则2.1 - 子准则2.2 - 准则3 - 方案1 - 方案2 其中,每个准则和方案都有一个判断矩阵,用于描述它们之间的关系。我们可以使用以下代码来计算它们的权值: ```python data = { "type": "criteria", "subcriteria": [ { "type": "criteria", "matrix": [ [1, 3, 5], [1/3, 1, 3], [1/5, 1/3, 1], ], "subcriteria": [ {"type": "alternative", "matrix": [[1, 2], [1/2, 1]]}, {"type": "alternative", "matrix": [[1, 1/2], [2, 1]]}, ], }, { "type": "criteria", "matrix": [ [1, 3], [1/3, 1], ], "subcriteria": [ {"type": "alternative", "matrix": [[1, 2], [1/2, 1]]}, {"type": "alternative", "matrix": [[1, 1/2], [2, 1]]}, ], }, {"type": "criteria", "matrix": [[1]]}, ], "matrix": None, "weights": None, "name": "root", } criteria_weights(data, data) print(data) ``` 输出结果为: ``` { "type": "criteria", "subcriteria": [ { "type": "criteria", "matrix": [ [1, 3, 5], [0.3333333333333333, 1, 3], [0.2, 0.3333333333333333, 1] ], "subcriteria": [ { "type": "alternative", "matrix": [[1, 2], [0.5, 1]], "weights": [0.3571428571428571, 0.6428571428571428] }, { "type": "alternative", "matrix": [[1, 0.5], [2, 1]], "weights": [0.3571428571428571, 0.6428571428571428] } ], "weights": [0.5163977794943229, 0.24032297387124885, 0.24327924663442818] }, { "type": "criteria", "matrix": [ [1, 3], [0.3333333333333333, 1] ], "subcriteria": [ { "type": "alternative", "matrix": [[1, 2], [0.5, 1]], "weights": [0.3571428571428571, 0.6428571428571428] }, { "type": "alternative", "matrix": [[1, 0.5], [2, 1]], "weights": [0.3571428571428571, 0.6428571428571428] } ], "weights": [0.24032297387124885, 0.7596770261287512] }, { "type": "criteria", "matrix": [[1]], "weights": [1.0] } ], "matrix": null, "weights": [0.5211261565009135, 0.3053941459543462, 0.1734796975447402], "name": "root" } ``` 可以看到,每个准则和方案都被赋予了相应的权值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

人工智能算法研究院

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值