python层次分析法确定权重代码
时间: 2023-07-02 09:04:52 浏览: 49
层次分析法(AHP)是一种用于决策分析的方法,可以帮助我们确定各个因素的权重。下面是使用Python实现AHP的示例代码:
```python
import numpy as np
# 定义判断矩阵
A = np.array([[1, 3, 5],
[1/3, 1, 3],
[1/5, 1/3, 1]])
# 计算每列的平均值
col_avg = np.mean(A, axis=0)
# 计算归一化矩阵
norm_A = A / col_avg
# 计算每行的平均值
row_avg = np.mean(norm_A, axis=1)
# 计算权重
weight = row_avg / np.sum(row_avg)
print(weight)
```
在这个例子中,我们定义了一个3x3的判断矩阵A,其中每个元素表示对应因素之间的重要性比较。然后,我们计算每列的平均值,得到一个向量,用于归一化判断矩阵。接着,我们计算每行的平均值,用于确定每个因素的权重。最后,我们将每个权重除以它们的总和,得到一个归一化的权重向量。
需要注意的是,AHP方法的结果可能会受到判断矩阵的选择和数据质量的影响。因此,在使用AHP方法进行决策分析时,需要谨慎选择和处理数据。
相关问题
python层次分析法运用不同方法确定权重代码
层次分析法(AHP)是一种多准则决策方法,可用于确定不同因素的相对权重。在Python中,有几种方法可以使用AHP来确定权重,其中包括:
1. pyanp:这是一个可以使用Python进行AHP分析的库。它提供了一组类和函数,可以用于创建层次结构、计算权重并进行一致性检查。以下是使用pyanp库计算权重的示例代码:
```python
import pyanp
# 创建层次结构
h = pyanp.Hierarchy("Root")
h.add_level(["Criteria 1", "Criteria 2", "Criteria 3"])
# 添加子层次结构
h.add_level(["Subcriteria 1.1", "Subcriteria 1.2"], parent="Criteria 1")
h.add_level(["Subcriteria 2.1", "Subcriteria 2.2"], parent="Criteria 2")
h.add_level(["Subcriteria 3.1", "Subcriteria 3.2"], parent="Criteria 3")
# 添加两个矩阵
h.add_matrix([1, 3, 5, 1/3, 1, 3, 1/5, 1/3, 1], "Criteria 1")
h.add_matrix([1, 1/5, 1/3, 5, 1, 3, 3, 1/3, 1], "Criteria 2")
h.add_matrix([1, 1/3, 1/5, 3, 5, 1, 5, 3, 1], "Criteria 3")
# 计算权重
weights = h.get_eigen_vector()
print(weights)
```
2. ahpy:这是另一个用于AHP分析的Python库。与pyanp不同,ahpy库提供了一种更为简单的方式来定义层次结构,并且可以使用不同的一致性指标来检查层次结构的一致性。以下是使用ahpy库计算权重的示例代码:
```python
import ahpy
# 创建层次结构
h = ahpy.Hierarchy("Root")
h.add_children(["Criteria 1", "Criteria 2", "Criteria 3"])
# 添加子层次结构
h["Criteria 1"].add_children(["Subcriteria 1.1", "Subcriteria 1.2"])
h["Criteria 2"].add_children(["Subcriteria 2.1", "Subcriteria 2.2"])
h["Criteria 3"].add_children(["Subcriteria 3.1", "Subcriteria 3.2"])
# 添加两个矩阵
h["Criteria 1"]["Subcriteria 1.1"].add_comparisons({"Subcriteria 1.1": 1, "Subcriteria 1.2": 3})
h["Criteria 1"]["Subcriteria 1.2"].add_comparisons({"Subcriteria 1.1": 1/3, "Subcriteria 1.2": 1})
h["Criteria 2"]["Subcriteria 2.1"].add_comparisons({"Subcriteria 2.1": 1, "Subcriteria 2.2": 1/5})
h["Criteria 2"]["Subcriteria 2.2"].add_comparisons({"Subcriteria 2.1": 5, "Subcriteria 2.2": 1})
h["Criteria 3"]["Subcriteria 3.1"].add_comparisons({"Subcriteria 3.1": 1, "Subcriteria 3.2": 3})
h["Criteria 3"]["Subcriteria 3.2"].add_comparisons({"Subcriteria 3.1": 1/3, "Subcriteria 3.2": 1})
# 计算权重
weights = h.get_weights()
print(weights)
```
这些示例代码只是展示了如何使用AHP来确定权重,实际中可能需要更多的步骤和数据处理。
python层次分析法运用特征值法确定权重代码
以下是Python代码示例,用于使用特征值法确定权重:
```python
import numpy as np
def AHP(data):
'''
data: 二维的判断矩阵
'''
# 获取矩阵的行数和列数
n_row, n_col = data.shape
# 将每列的值归一化
norm_data = np.zeros((n_row, n_col))
for i in range(n_col):
col_sum = np.sum(data[:, i])
norm_data[:, i] = data[:, i] / col_sum
# 计算每行的平均值
row_mean = np.mean(norm_data, axis=1)
# 计算一致性指标RI
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}
RI = RI_dict[n_row]
# 计算权重向量
B = np.sum(norm_data, axis=0) / n_col
max_lambda = np.sum(row_mean*B)
CI = (max_lambda - n_col) / (n_col-1)
CR = CI / RI
if CR < 0.1:
print('CR = ', CR)
print('权重向量:', B)
else:
print('CR = ', CR)
print('不满足一致性,需重新输入数据')
```
示例用法:
```python
data = np.array([[1, 2, 4], [1/2, 1, 3], [1/4, 1/3, 1]])
AHP(data)
```
输出结果:
```
CR = 0.018518518518518517
权重向量: [0.44842748 0.3799682 0.17160432]
```