python实现BWM权重确定
时间: 2023-12-04 10:00:16 浏览: 286
BWM(Best Worst Method)是一种多属性决策分析方法,可以用于确定不同属性的权重。在Python中,可以使用以下步骤实现BWM权重确定:
1. 确定属性和属性值:首先,需要确定要分析的属性和每个属性的属性值。
2. 制作判断矩阵:根据属性和属性值,制作一个判断矩阵,其中每个元素表示属性值之间的比较结果,可以使用1-9的数字表示比较结果,其中1表示两个属性值相等,9表示一个属性值比另一个属性值优先级高得多。
3. 归一化判断矩阵:对判断矩阵进行归一化处理,使得每一行的和为1。
4. 求出最大特征值和特征向量:使用numpy库中的eig函数,求出判断矩阵的最大特征值和对应的特征向量。
5. 计算权重:将特征向量进行归一化处理,得到每个属性的权重。
以下是Python代码示例:
```python
import numpy as np
# 确定属性和属性值
attributes = ['A', 'B', 'C']
values = {
'A': ['a1', 'a2', 'a3'],
'B': ['b1', 'b2'],
'C': ['c1', 'c2', 'c3', 'c4']
}
# 制作判断矩阵
judgment_matrix = np.array([
[1, 2, 3, 4, 5],
[1/2, 1, 2, 3, 4],
[1/3, 1/2, 1, 2, 3],
[1/4, 1/3, 1/2, 1, 2],
[1/5, 1/4, 1/3, 1/2, 1]
])
# 归一化判断矩阵
normalized_matrix = judgment_matrix / judgment_matrix.sum(axis=0)
# 求出最大特征值和特征向量
eig_value, eig_vector = np.linalg.eig(normalized_matrix)
max_eig_value_index = np.argmax(eig_value)
max_eig_value = eig_value[max_eig_value_index]
max_eig_vector = eig_vector[:, max_eig_value_index]
# 计算权重
weights = max_eig_vector / sum(max_eig_vector)
# 输出结果
for i, attribute in enumerate(attributes):
print(f'{attribute}的权重为{weights[i]}')
```
注:上述代码中的判断矩阵和归一化矩阵是示例数据,实际应用中需要根据具体情况进行制作和计算。
阅读全文