critic熵权法topsis python
时间: 2023-08-02 15:10:06 浏览: 180
熵权TOPSIS的Python代码
你可以使用Python来实现熵权法和TOPSIS方法进行多属性决策。下面是一个简单的示例代码:
```python
import numpy as np
def entropy_weights(data):
n, m = data.shape
entropy = np.zeros(m)
for j in range(m):
p = data[:, j] / np.sum(data[:, j])
entropy[j] = -np.sum(p * np.log2(p))
weights = (1 - entropy) / np.sum(1 - entropy)
return weights
def topsis(data, weights, positive=True):
n, m = data.shape
weighted_data = data * weights
if not positive:
weighted_data = data / weights
ideal_best = np.max(weighted_data, axis=0)
ideal_worst = np.min(weighted_data, axis=0)
distance_best = np.linalg.norm(weighted_data - ideal_best, axis=1)
distance_worst = np.linalg.norm(weighted_data - ideal_worst, axis=1)
closeness = distance_worst / (distance_best + distance_worst)
rankings = np.argsort(closeness)
return rankings
# 示例数据
data = np.array([[5, 7, 3, 8],
[2, 6, 4, 9],
[8, 4, 7, 2],
[6, 3, 5, 4]])
# 使用熵权法计算权重
weights = entropy_weights(data)
# 使用TOPSIS方法进行排序(正向指标)
rankings = topsis(data, weights)
print("权重:", weights)
print("排序结果:", rankings)
```
在上面的示例代码中,`data`是一个包含多个属性的矩阵,每一行代表一个样本,每一列代表一个属性。`entropy_weights`函数使用熵权法计算属性的权重,`topsis`函数使用TOPSIS方法根据权重进行排序。你可以根据你的实际情况修改示例代码来适应你的数据和需求。
请注意,这只是一个简单的示例代码,实际应用中可能需要考虑更多的因素和进行适当的调整。
阅读全文