熵权法topsis模型代码
时间: 2024-06-15 18:07:03 浏览: 171
熵权法(Entropy Weight-TOPSIS)是一种多属性决策分析方法,用于确定各属性的权重,并根据权重对各个决策方案进行排序。TOPSIS(Technique for Order Preference by Similarity to Ideal Solution)则是根据属性值与理想解的接近程度来评估决策方案的优劣。
以下是一个简单的熵权法TOPSIS模型的代码示例:
```python
import numpy as np
def entropy_weight(data):
# 计算每个属性的熵值
entropy = -np.sum(data * np.log2(data), axis=0)
# 计算每个属性的权重
weight = (1 - entropy) / np.sum(1 - entropy)
return weight
def topsis(data, weight, positive=True):
# 数据归一化
normalized_data = data / np.sqrt(np.sum(data**2, axis=0))
# 理想解和负理想解
ideal_solution = np.max(normalized_data, axis=1) if positive else np.min(normalized_data, axis=1)
negative_ideal_solution = np.min(normalized_data, axis=1) if positive else np.max(normalized_data, axis=1)
# 计算每个决策方案与理想解和负理想解的接近程度
similarity_to_ideal = np.sqrt(np.sum((normalized_data - ideal_solution[:, np.newaxis])**2, axis=1))
similarity_to_negative_ideal = np.sqrt(np.sum((normalized_data - negative_ideal_solution[:, np.newaxis])**2, axis=1))
# 计算综合评价指数
topsis_score = similarity_to_negative_ideal / (similarity_to_ideal + similarity_to_negative_ideal)
return topsis_score
# 示例数据
data = np.array([[1, 2, 3, 4], [4, 3, 2, 1], [2, 4, 1, 3]])
# 计算权重
weight = entropy_weight(data)
# 计算TOPSIS得分
topsis_score = topsis(data, weight)
print("权重:", weight)
print("TOPSIS得分:", topsis_score)
```
这段代码实现了熵权法和TOPSIS模型的计算过程。首先,通过`entropy_weight`函数计算每个属性的权重。然后,通过`topsis`函数对决策方案进行排序,其中`data`是输入的决策矩阵,`weight`是属性的权重,`positive`参数表示是否选择正理想解(默认为True)。最后,输出每个属性的权重和决策方案的TOPSIS得分。
阅读全文