topsis方法的代码是什么样的
时间: 2024-04-30 17:18:07 浏览: 82
以下是使用Python实现的Topsis方法代码示例:
```python
import pandas as pd
import numpy as np
def topsis(data, weights, impacts):
"""
:param data: 评价矩阵
:param weights: 权重向量
:param impacts: 影响向量,1表示正向指标,-1表示负向指标
:return: 所有方案的TOPSIS得分和排名
"""
# 数据标准化
data_normalized = data / np.sqrt(np.square(data).sum(axis=0))
# 加权
data_weighted = data_normalized * weights
# 确定最优和最劣方案
v_best = np.max(data_weighted, axis=0)
v_worst = np.min(data_weighted, axis=0)
# 计算距离
s_best = np.sqrt(np.square(data_weighted - v_best).sum(axis=1))
s_worst = np.sqrt(np.square(data_weighted - v_worst).sum(axis=1))
# 计算综合得分
score = s_worst / (s_best + s_worst)
# 考虑指标影响
score *= impacts
# 排序
rank = score.rank(ascending=False)
return pd.DataFrame({'TOPSIS Score': score, 'Rank': rank})
# 示例
data = np.array([[5, 10, 3], [8, 7, 9], [6, 4, 8], [3, 6, 5]])
weights = np.array([0.3, 0.4, 0.3])
impacts = np.array([1, 1, -1])
df = pd.DataFrame(data, columns=['A', 'B', 'C'])
result = topsis(df, weights, impacts)
print(result)
```
在上面的示例中,我们使用了一个4×3的评价矩阵,其中4个方案被评估,每个方案有3个指标。权重向量和影响向量分别指定了每个指标的重要性和方向。函数返回一个包含所有方案的TOPSIS得分和排名的数据框。
阅读全文