python topsis法代码
时间: 2024-09-25 16:03:37 浏览: 38
TOPSIS(Technique for Order Preference by Similarity to Ideal Solution)是一种决策分析方法,用于确定每个选项相对于理想解和反理想解的最佳程度。在Python中,我们可以使用pandas和numpy库来实现Topsis算法。下面是一个简单的Topsis法代码示例:
```python
import pandas as pd
import numpy as np
def topsis(dataframe, weights, ideal_best, ideal_worst):
"""
参数:
dataframe (pd.DataFrame): 数据集,每一行代表一个决策对象,一列对应一个指标
weights (list): 权重列表,对应dataframe的列
ideal_best (list): 最优值列表,对于正向指标,这些值表示理想状态
ideal_worst (list): 最劣值列表,对于负向指标,这些值表示理想状态
返回:
results (DataFrame): 决策结果,包含每个决策对象的排序优先级
"""
# 计算各指标的标准差和平均值
std_dev = dataframe.std()
avg = dataframe.mean()
# 归一化数据
normalized_df = (dataframe - avg) / std_dev
# 乘以权重并求和得到每个决策对象的相对优势值
performance_score = normalized_df.dot(weights)
# 计算距离
distance_to_ideal = performance_score - ideal_best
distance_to_worst = abs(performance_score - ideal_worst)
# 加权距离,正值靠近最佳,负值靠近最差
weighted_distance = distance_to_ideal / (distance_to_ideal + distance_to_worst)
# 从高到低排序
ranking = weighted_distance.sort_values(ascending=False)
# 创建结果数据框
results = pd.DataFrame({'Index': range(1, len(dataframe)+1), 'Ranking': ranking})
return results
# 使用示例
data = pd.DataFrame({
'Feature1': [8, 5, 7, 9],
'Feature2': [5, 4, 6, 8],
'Feature3': [9, 7, 8, 6]
}) # 这里假设有三个指标
weights = [0.25, 0.5, 0.25] # 权重设定
ideal_best = [9, 9, 9] # 理想值,这里是最大值
ideal_worst = [1, 1, 1] # 理想值,这里是最小值
results = topsis(data, weights, ideal_best, ideal_worst)
print(results)
```
这只是一个基础的实现,实际应用中可能还需要考虑异常处理、用户输入验证等细节。
阅读全文