topsis法python代码
时间: 2023-07-27 19:08:24 浏览: 122
下面是一个使用Python实现TOPSIS法的示例代码:
```python
import numpy as np
def topsis(data, weights, impacts):
# 归一化
normalized_data = data / np.sqrt(np.sum(data**2, axis=0))
# 权重化
weighted_data = normalized_data * weights
# 理想解和负理想解
ideal_best = np.max(weighted_data, axis=1)
ideal_worst = np.min(weighted_data, axis=1)
# 距离计算
distance_best = np.sqrt(np.sum((weighted_data - ideal_best)**2, axis=1))
distance_worst = np.sqrt(np.sum((weighted_data - ideal_worst)**2, axis=1))
# 相对接近度计算
closeness = distance_worst / (distance_best + distance_worst)
# 根据影响度排序
sorted_indices = np.argsort(closeness) * (-1 if impacts == '+' else 1)
return sorted_indices
# 示例数据
data = np.array([[3, 5, 4, 7],
[4, 6, 3, 8],
[6, 4, 5, 9],
[5, 7, 6, 6]])
weights = np.array([0.4, 0.3, 0.2, 0.1])
impacts = '+-++'
# 使用TOPSIS法进行排序
result = topsis(data, weights, impacts)
print(result)
```
在这个示例中,我们使用了一个4个决策指标和4个候选方案的数据集。`data`是一个二维数组,每一行代表一个候选方案的各个指标值。`weights`是一个一维数组,表示各个指标的权重。`impacts`是一个字符串,表示各个指标的影响度,"+"表示越大越好,"-"表示越小越好。
代码输出结果是一个排序后的索引数组,表示候选方案的排名顺序。
阅读全文