能帮我写一段关于TOPSIS的算法吗
时间: 2023-05-12 09:03:54 浏览: 88
当然可以,TOPSIS算法是一种多属性决策分析方法,主要用于评估多个备选方案的优劣。以下是一段简单的Python代码实现:
```python
import numpy as np
def topsis(data, weights, impacts):
"""
:param data: 二维数组,每行代表一个备选方案,每列代表一个属性
:param weights: 一维数组,每个元素代表对应属性的权重
:param impacts: 一维数组,每个元素代表对应属性的影响方向,1为正向,-1为负向
:return: 最优方案的索引
"""
# 数据标准化
norm_data = data / np.sqrt(np.sum(data ** 2, axis=0))
# 加权
weighted_data = norm_data * weights
# 理想解和负理想解
ideal_best = np.max(weighted_data, axis=0)
ideal_worst = np.min(weighted_data, axis=0)
# 距离计算
dist_best = np.sqrt(np.sum((weighted_data - ideal_best) ** 2, axis=1))
dist_worst = np.sqrt(np.sum((weighted_data - ideal_worst) ** 2, axis=1))
# 综合得分
score = dist_worst / (dist_best + dist_worst)
# 最优方案的索引
best_index = np.argmax(score)
return best_index
```
其中,data是一个二维数组,每行代表一个备选方案,每列代表一个属性;weights是一个一维数组,每个元素代表对应属性的权重;impacts是一个一维数组,每个元素代表对应属性的影响方向,1为正向,-1为负向。函数返回最优方案的索引。