Python实现层次分析法及自调节层次分析法的示例
本篇文章旨在介绍层次分析法(AHP)和自调节层次分析法(FAHP)的实现方式,并提供两个示例说明。
层次分析法(AHPPython)
层次分析法(AHP)是一种定量评价和决策的方法,特别适用于多因素、多目标的决策问题。下面是AHP的实现方法:
- 确定要分析的问题和参与者。
- 确定一组标准因素(即问题中的考虑因素)。
- 创建问题的层次结构,其中包括标准因素、子因素和决策因素。
- 建立每个因素对于其他因素的相对重要性的判断矩阵。
- 计算每个因素的权重矩阵。
- 通过相关计算方法计算最终权重,最终确定决策。
下面是一个例子来说明如何通过Python实现AHP。
示例一
问题描述:我需要为公司选择一台新的服务器,考虑价格,性能和可靠性三个因素。
步骤1&2
由于价格,性能和可靠性是三个考虑因素,所以我们可以列出问题、标准因素和参与者如下:
问题: 选择一台新的服务器
参与者: 我
标准因素:
- 价格
- 性能
- 可靠性
步骤3
我们可以用树状图的形式表示问题的层次结构,其中包括标准因素、子因素和决策因素。
选择一台新的服务器
├── 价格
├── 性能
└── 可靠性
步骤4
为了确定三个因素之间的相对权重,我们需要创建一个判断矩阵,如下所示:
import numpy as np
# 构建判断矩阵
price = np.array([1, 3, 5])
performance = np.array([1/3, 1, 3])
reliability = np.array([1/5, 1/3, 1])
judgement_matrix = np.array([price, performance, reliability])
在这个例子中,价格被认为是最具有重要性的基准,而性能比价格重要三倍,可靠性比性能重要三倍。
步骤5
我们可以通过计算每个因素的权重矩阵来找出每个因素的重要性权重。计算每个因素的权重矩阵需要将判断矩阵的每列之和计算出来,然后将每个元素除以该列之和。
# 在判断矩阵中的每列中计算每个元素的总和
column_sums = judgement_matrix.sum(axis=0)
# 每列中的每个元素除以它的总和
normalised_matrix = judgement_matrix / column_sums
# 计算列的平均值
row_averages = normalised_matrix.mean(axis=1)
# 归一化行向量
normalized_weights = row_averages / row_averages.sum()
在这个例子中,我们得出的权重向量为 [0.667, 0.242, 0.091]
,即价格在三个因素中的权重最高。
步骤6
通过将权重向量与标准化得分相乘,相加并计算得出要选择的服务器。
自调节层次分析法(FAHPPython)
自调节层次分析法(FAHP)是AHP的改进版。与AHP不同的是,FAHP为每个参与者提供了一个属于自己的权重向量。在AHP中,只有一个人的判断矩阵,但在FAHP中,有多个判断矩阵。下面是FAHP的实现方式:
- 确定要分析的问题和参与者。
- 确定一组标准因素(即问题中的考虑因素)。
- 创建问题的层次结构,其中包括标准因素、子因素和决策因素。
- 建立每个参与者对于每个因素的相对重要性的判断矩阵。
- 建立每个参与者的权重向量,其中包括对每个因素的权重。
- 通过相关计算方法计算每个参与者的权重向量,然后计算最终的决策。
下面是一个例子来说明如何通过Python实现FAHP。
示例二
问题描述:我需要为公司选择一个最佳的Web框架,考虑性能和易用性两个因素。有三个参与者,我,开发者和用户。
步骤1&2
由于性能和易用性是两个考虑因素,我们可以列出问题、标准因素和参与者如下:
问题: 选择最佳的Web框架
参与者:
- 我
- 开发者
- 用户
标准因素:
- 性能
- 易用性
步骤3
我们可以用树状图的形式表示问题的层次结构,其中包括标准因素、子因素和决策因素。
选择最佳的Web框架
├── 性能
└── 易用性
步骤4
我们需要为每个参与者创建一个判断矩阵来确定他们对选定标准因素的观点。以下是每个参与者的判断矩阵:
# 判断矩阵
performance = np.array([[1, 3, 5],
[1/3, 1, 3],
[1/5, 1/3, 1]])
usability = np.array([[1, 1/3, 1/5],
[3, 1, 1/3],
[5, 3, 1]])
# 将矩阵存储在列表中
judgement_matrices = [performance, usability]
步骤5
对于每个参与者,我们需要建立一个权重向量来确定他们对于每个因素的重要性。同样需要将判断矩阵的每列求和,然后将每个元素除以和。
normalised_matrices = []
for judgement_matrix in judgement_matrices:
# 在判断矩阵中的每列中计算每个元素的总和
column_sums = judgement_matrix.sum(axis=0)
# 每列中的每个元素除以它的总和
normalised_matrix = judgement_matrix / column_sums
normalised_matrices.append(normalised_matrix)
weights = []
for normalised_matrix in normalised_matrices:
# 计算列的平均值
row_averages = normalised_matrix.mean(axis=1)
# 归一化行向量
normalised_weights = row_averages / row_averages.sum()
weights.append(normalised_weights)
步骤6
我们可以对每个参与者的权重向量求平均来获得最终权重。
final_weights = np.array(weights).mean(axis=0)
最终得出的权重向量为 [0.460, 0.540]
,其中易用性在两个因素中具有更高的权重。
结论
通过Python实现了层次分析法和自调节层次分析法,我们可以在多因素决策问题中使用这两种方法,从而确定最终的决策。在实际情况中,这两种方法在管理、市场营销和投资决策等领域都有广泛的应用。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python实现层次分析法及自调节层次分析法的示例 - Python技术站