目录
介绍:
在数学建模中,Topsis方法是一种多准则决策分析方法,用于评估和排序备选方案。它代表了“最佳方案相似性排序技术”。
在Topsis方法中,每个备选方案根据一组准则进行评估,并分配权重,以反映它们的相对重要性。然后,该方法根据每个备选方案与理想解和负理想解之间的差异计算两个度量值:到理想解的距离和到负理想解的距离。
理想解代表了每个准则的最佳可能值,而负理想解则代表了最差可能值。这些距离度量值使用一个公式计算,考虑了备选方案与这两个参考点之间差异的加权总和。
一旦计算出距离,Topsis根据备选方案与理想解的接近度对其进行排序。与理想解最接近且与负理想解最远的备选方案被视为最佳选择。
Topsis方法常用于需要考虑多个准则的决策情景中,例如选择供应商、评估项目或选择最佳行动方案。它帮助决策者客观地评估和比较备选方案,同时考虑到每个选项的正面和负面因素。
模板:
import numpy as np
def topsis(data, weights, impacts):
# 数据归一化
normalized_data = data / np.sqrt(np.sum(data**2, axis=0))
# 加权归一化数据
weighted_normalized_data = normalized_data * weights
# 理想解和负理想解
ideal_solution = np.max(weighted_normalized_data, axis=0)
negative_ideal_solution = np.min(weighted_normalized_data, axis=0)
# 计算备选方案与理想解和负理想解的距离
distances = np.sqrt(np.sum((weighted_normalized_data - ideal_solution)**2, axis=1)) / \
np.sqrt(np.sum((weighted_normalized_data - negative_ideal_solution)**2, axis=1))
# 考虑权重和影响的得分
scores = np.sum(weights * impacts * normalized_data, axis=1)
# 综合得分
comprehensive_scores = scores / (scores + distances)
# 排序并返回结果
rankings = np.argsort(comprehensive_scores)[::-1] + 1
return rankings
# 例子
data = np.array([[3, 2, 5, 4],
[4, 1, 2, 8],
[1, 3, 4, 6],
[2, 4, 3, 5]])
weights = np.array([0.25, 0.25, 0.25, 0.25])
impacts = np.array([1, 1, -1, 1])
rankings = topsis(data, weights, impacts)
print(rankings)
案例:
极小型指标转化为极大型(正向化):
# 公式:max-x
if ('Negative' in name) == True:
max0 = data_nor[columns_name[i + 1]].max()#取最大值
data_nor[columns_name[i + 1]] = (max0 - data_nor[columns_name[i + 1]]) # 正向化
# print(data_nor[columns_name[i+1]])
中间型指标转为极大型(正向化):
# 中间型指标正向化 公式:M=max{|xi-best|} xi=1-|xi-best|/M