当前位置: 首页 > news >正文

TOPSIS(Technique for Order Preference by Similarity to Ideal Solution )简介与简单示例

前言

提醒:
文章内容为方便作者自己后日复习与查阅而进行的书写与发布,其中引用内容都会使用链接表明出处(如有侵权问题,请及时联系)。
其中内容多为一次书写,缺少检查与订正,如有问题或其他拓展及意见建议,欢迎评论区讨论交流。

内容由AI辅助生成,仅经笔者审核整理,请甄别食用。

文章目录

  • 前言
  • TOPSIS方法:多准则决策的几何解析
      • 一、核心步骤与公式(附变量解释)
        • 1. 输入定义
        • 2. 步骤1:归一化决策矩阵(消除量纲)
        • 3. 步骤2:加权归一化(融合准则权重)
        • 4. 步骤3:确定理想解(正/负)
        • 5. 步骤4:计算距离(理想解的远近)
        • 6. 步骤5:计算贴近度(方案优劣排序)
      • 二、关键特点与优势
      • 三、示例解析(简化场景:2方案×2准则)
        • 1. 归一化(消除量纲)
        • 2. 加权归一化(融合权重)
        • 3. 确定理想解
        • 4. 计算距离与贴近度
        • 5. 排序结论
      • 四、方法对比与适用场景
      • 五、总结
  • 简单示例
      • 代码说明:


TOPSIS方法:多准则决策的几何解析

TOPSIS(Technique for Order Preference by Similarity to Ideal Solution )由Yoon和Hwang于1981年提出,是经典多准则决策(MCDM)方法。其核心逻辑是:将决策问题映射到nnn维空间(nnn为准则数量 ),通过计算方案与“正理想解”“负理想解”的距离,筛选最接近正理想解、最远离负理想解的方案,实现复杂决策的量化排序。

一、核心步骤与公式(附变量解释)

1. 输入定义
  • 决策矩阵:设方案数为mmm、准则数为nnn,原始矩阵记为X=(xij)m×n\mathbf{X} = (x_{ij})_{m \times n}X=(xij)m×n。其中xijx_{ij}xij表示iii个方案jjj个准则下的原始值(如“方案1的成本值” )。
  • 准则权重:记为W=(w1,w2,…,wn)\mathbf{W} = (w_1, w_2, \dots, w_n)W=(w1,w2,,wn),满足∑j=1nwj=1\sum_{j=1}^n w_j = 1j=1nwj=1wjw_jwj表示jjj个准则的重要性(如“成本准则权重0.3,说明成本占30%决策权重” )。
2. 步骤1:归一化决策矩阵(消除量纲)

通过向量归一化统一量纲,公式:
xˉij=xij∑i=1mxij2\bar{x}_{ij} = \frac{x_{ij}}{\sqrt{\sum_{i=1}^m x_{ij}^2}} xˉij=i=1mxij2xij

  • 变量:xˉij\bar{x}_{ij}xˉijiii个方案jjj个准则下的归一化值,输出区间[0,1][0,1][0,1],解决不同准则单位差异问题(如“成本(元)”与“效率(件/时)”无法直接比较 )。
3. 步骤2:加权归一化(融合准则权重)

结合准则权重调整归一化值,公式:
Vij=xˉij×wjV_{ij} = \bar{x}_{ij} \times w_j Vij=xˉij×wj

  • 变量:VijV_{ij}Vijiii个方案jjj个准则下的加权归一化值,体现“准则重要性对方案表现的放大/缩小”(如“高权重准则的方案值,对决策结果影响更强” )。
4. 步骤3:确定理想解(正/负)
  • 正理想解A+A^+A+:各准则的最优值,公式:
    Aj+={max⁡iVij(准则 j为最大化目标,如“利润”)min⁡iVij(准则 j为最小化目标,如“成本”)A_j^+ = \begin{cases} \max_i V_{ij} & \text{(准则 } j \text{ 为最大化目标,如“利润”)} \\ \min_i V_{ij} & \text{(准则 } j \text{ 为最小化目标,如“成本”)} \end{cases} Aj+={maxiVijminiVij(准则 j 为最大化目标,如利润(准则 j 为最小化目标,如成本

    • 变量:Aj+A_j^+Aj+jjj个准则下的“最优表现”(如“所有方案中成本最低值” )。
  • 负理想解A−A^-A:各准则的最劣值,与正理想解相反,公式:
    Aj−={min⁡iVij(准则 j为最大化目标)max⁡iVij(准则 j为最小化目标)A_j^- = \begin{cases} \min_i V_{ij} & \text{(准则 } j \text{ 为最大化目标)} \\ \max_i V_{ij} & \text{(准则 } j \text{ 为最小化目标)} \end{cases} Aj={miniVijmaxiVij(准则 j 为最大化目标)(准则 j 为最小化目标)

    • 变量:Aj−A_j^-Ajjjj个准则下的“最劣表现”(如“所有方案中成本最高值” )。
5. 步骤4:计算距离(理想解的远近)
  • 到正理想解的距离di+d_i^+di+
    di+=∑j=1n(Vij−Aj+)2d_i^+ = \sqrt{\sum_{j=1}^n (V_{ij} - A_j^+)^2} di+=j=1n(VijAj+)2

    • 变量:di+d_i^+di+iii个方案到正理想解的欧氏距离,距离越大,方案离“最优表现”越远。
  • 到负理想解的距离di−d_i^-di
    di−=∑j=1n(Vij−Aj−)2d_i^- = \sqrt{\sum_{j=1}^n (V_{ij} - A_j^-)^2} di=j=1n(VijAj)2

    • 变量:di−d_i^-diiii个方案到负理想解的欧氏距离,距离越大,方案离“最劣表现”越远。
6. 步骤5:计算贴近度(方案优劣排序)

贴近度反映方案与正理想解的相对接近程度,公式:
Ci=di−di++di−C_i = \frac{d_i^-}{d_i^+ + d_i^-} Ci=di++didi

  • 变量:Ci∈[0,1]C_i \in [0,1]Ci[0,1],值越大表示iii个方案越接近正理想解、越远离负理想解,方案越优。最终按CiC_iCi降序排序,确定方案优先级。

二、关键特点与优势

  1. 几何直观性:将决策映射到nnn维空间,用“距离理想解的远近”排序,逻辑清晰(如二维场景可类比平面上点与“最优/最劣点”的距离比较 )。
  2. 混合准则支持:兼容最大化、最小化目标(仅需在确定A+A^+A+A−A^-A时区分准则类型 ),覆盖“利润最大化+成本最小化”等复杂场景。
  3. 计算简洁性:基于欧氏距离和加权归一化,流程明确,手工或编程均可快速实现。

三、示例解析(简化场景:2方案×2准则)

假设场景:2个方案(桂林、黄山 )、2个准则(景色:最大化,权重0.6;费用:最小化,权重0.4 ),原始矩阵X=[9786]\mathbf{X} = \begin{bmatrix} 9 & 7 \\ 8 & 6 \end{bmatrix}X=[9876](桂林:景色9、费用7;黄山:景色8、费用6 )。

1. 归一化(消除量纲)

xˉ11=992+82≈0.676,xˉ12=772+62≈0.714xˉ21=892+82≈0.606,xˉ22=672+62≈0.618\bar{x}_{11} = \frac{9}{\sqrt{9^2+8^2}} \approx 0.676,\ \bar{x}_{12} = \frac{7}{\sqrt{7^2+6^2}} \approx 0.714 \\ \bar{x}_{21} = \frac{8}{\sqrt{9^2+8^2}} \approx 0.606,\ \bar{x}_{22} = \frac{6}{\sqrt{7^2+6^2}} \approx 0.618 xˉ11=92+8290.676, xˉ12=72+6270.714xˉ21=92+8280.606, xˉ22=72+6260.618

2. 加权归一化(融合权重)

V11=0.676×0.6≈0.406,V12=0.714×0.4≈0.286V21=0.606×0.6≈0.364,V22=0.618×0.4≈0.247V_{11} = 0.676×0.6 \approx 0.406,\ V_{12} = 0.714×0.4 \approx 0.286 \\ V_{21} = 0.606×0.6 \approx 0.364,\ V_{22} = 0.618×0.4 \approx 0.247 V11=0.676×0.60.406, V12=0.714×0.40.286V21=0.606×0.60.364, V22=0.618×0.40.247

3. 确定理想解
  • 景色(最大化):A1+=0.406A_1^+ = 0.406A1+=0.406(桂林)、A1−=0.364A_1^- = 0.364A1=0.364(黄山)
  • 费用(最小化):A2+=0.247A_2^+ = 0.247A2+=0.247(黄山)、A2−=0.286A_2^- = 0.286A2=0.286(桂林)
4. 计算距离与贴近度
  • 桂林:d1+≈0.039d_1^+ \approx 0.039d1+0.039(到正理想解距离)、d1−≈0.042d_1^- \approx 0.042d10.042(到负理想解距离),C1≈0.518C_1 \approx 0.518C10.518
  • 黄山:d2+≈0.042d_2^+ \approx 0.042d2+0.042(到正理想解距离)、d2−≈0.039d_2^- \approx 0.039d20.039(到负理想解距离),C2≈0.482C_2 \approx 0.482C20.482
5. 排序结论

C1>C2C_1 > C_2C1>C2,桂林更接近正理想解,为更优方案。

四、方法对比与适用场景

方法核心逻辑适用场景局限性
TOPSIS距离理想解的相对接近度数据分布均匀、混合准则场景对异常值敏感
VIKOR妥协解(平衡群体效用与遗憾)需多方协商的复杂决策计算稍复杂
AHP成对比较确定权重权重确定阶段主观依赖强
COPRAS区分准则类型的相对显著性成本敏感型决策最小化准则影响突出

五、总结

TOPSIS 以几何直观性、混合准则兼容性、计算简洁性为核心优势,适合工程评估、项目优选等场景。其本质是将定性决策转化为“距离比较”的定量问题,通过CiC_iCi实现方案排序。需注意:若数据存在异常值(如极端大/小值 ),需预处理(如离群值修正 ),否则可能影响结果可靠性。

简单示例

下面是一个使用TOPSIS优化方法的MATLAB实现,包含完整计算流程和可视化功能。这个示例解决了一个经典的"供应商选择"问题,通过TOPSIS方法在多个准则下对备选方案进行排序和选择。

%% TOPSIS(Technique for Order Preference by Similarity to Ideal Solution)优化方法示例
clear; clc; close all;%% 1. 定义问题数据
% 备选方案(供应商)
alternatives = {'供应商A', '供应商B', '供应商C', '供应商D', '供应商E'};
num_alternatives = length(alternatives);% 评价准则
criteria = {'价格', '质量', '交货期', '服务水平', '环保性'};
num_criteria = length(criteria);% 准则权重(可通过AHP等方法确定)
weights = [0.25, 0.20, 0.15, 0.20, 0.20];% 决策矩阵(方案在各准则下的表现)
% 注:"价格"为最小化准则,其余为最大化准则
decision_matrix = [80, 7, 9, 8, 7;    % 供应商A90, 8, 7, 9, 8;    % 供应商B70, 9, 6, 7, 9;    % 供应商C60, 6, 8, 6, 6;    % 供应商D85, 7, 10, 8, 8;   % 供应商E
];% 标记准则类型(1=最大化,0=最小化)
criteria_type = [0, 1, 1, 1, 1];%% 2. TOPSIS计算流程
% 步骤1:归一化决策矩阵(向量归一化)
normalized_matrix = zeros(size(decision_matrix));
for j = 1:num_criteriaif criteria_type(j) == 1  % 最大化准则normalized_matrix(:,j) = decision_matrix(:,j) / norm(decision_matrix(:,j));else  % 最小化准则normalized_matrix(:,j) = min(decision_matrix(:,j)) ./ decision_matrix(:,j);normalized_matrix(:,j) = normalized_matrix(:,j) / norm(normalized_matrix(:,j));end
end% 步骤2:加权归一化矩阵
weighted_matrix = normalized_matrix .* repmat(weights, num_alternatives, 1);% 步骤3:确定正理想解和负理想解
positive_ideal = zeros(1, num_criteria);
negative_ideal = zeros(1, num_criteria);
for j = 1:num_criteriaif criteria_type(j) == 1  % 最大化准则positive_ideal(j) = max(weighted_matrix(:,j));negative_ideal(j) = min(weighted_matrix(:,j));else  % 最小化准则positive_ideal(j) = min(weighted_matrix(:,j));negative_ideal(j) = max(weighted_matrix(:,j));end
end% 步骤4:计算到正理想解和负理想解的距离
d_plus = zeros(num_alternatives, 1);
d_minus = zeros(num_alternatives, 1);
for i = 1:num_alternativesd_plus(i) = norm(weighted_matrix(i,:) - positive_ideal);d_minus(i) = norm(weighted_matrix(i,:) - negative_ideal);
end% 步骤5:计算相对贴近度
relative_closeness = d_minus ./ (d_plus + d_minus);% 步骤6:排序
[closeness_sorted, sort_idx] = sort(relative_closeness, 'descend');%% 3. 可视化结果
% 3.1 决策矩阵热图
figure('Position', [100, 100, 1000, 800]);
subplot(2, 2, 1);
imagesc(decision_matrix);
title('原始决策矩阵');
xlabel('准则');
ylabel('方案');
set(gca, 'XTick', 1:num_criteria, 'XTickLabel', criteria);
set(gca, 'YTick', 1:num_alternatives, 'YTickLabel', alternatives);
colorbar;
for i = 1:num_alternativesfor j = 1:num_criteriatext(j, i, num2str(decision_matrix(i,j)), 'HorizontalAlignment', 'center', 'FontSize', 10);end
end% 3.2 准则权重饼图
subplot(2, 2, 2);
pie(weights, criteria);
title('准则权重分布');% 3.3 距离和贴近度对比图
subplot(2, 2, 3);
bar_width = 0.25;
x = 1:num_alternatives;
bar(x - bar_width, d_plus, bar_width, 'r', 'DisplayName', '到正理想解的距离');
hold on;
bar(x, d_minus, bar_width, 'g', 'DisplayName', '到负理想解的距离');
bar(x + bar_width, relative_closeness, bar_width, 'b', 'DisplayName', '相对贴近度');
hold off;
title('距离和贴近度对比');
xlabel('方案');
ylabel('值');
set(gca, 'XTick', 1:num_alternatives, 'XTickLabel', alternatives);
legend;
grid on;% 3.4 TOPSIS排序结果
subplot(2, 2, 4);
barh(1:num_alternatives, closeness_sorted);
title('TOPSIS排序结果');
xlabel('相对贴近度 (越大越好)');
ylabel('方案 (按排名)');
set(gca, 'YTick', 1:num_alternatives, 'YTickLabel', alternatives(sort_idx));
grid on;% 添加标签显示具体贴近度值
for i = 1:num_alternativestext(closeness_sorted(i)+0.01, i, sprintf('%.4f', closeness_sorted(i)), 'HorizontalAlignment', 'left', 'VerticalAlignment', 'middle');
end%% 4. 输出结果
fprintf('\n===== TOPSIS优化结果汇总 =====\n');
fprintf('\n1. 准则权重:\n');
for i = 1:num_criteriafprintf('   %s: %.2f\n', criteria{i}, weights(i));
endfprintf('\n2. 各方案评估结果:\n');
fprintf('   方案\t\t正理想解距离\t负理想解距离\t相对贴近度\n');
for i = 1:num_alternativesfprintf('   %s\t%.4f\t\t%.4f\t\t%.4f\n', alternatives{i}, d_plus(i), d_minus(i), relative_closeness(i));
endfprintf('\n3. TOPSIS推荐排序:\n');
for i = 1:num_alternativesfprintf('   第%d名: %s (贴近度: %.4f)\n', i, alternatives{sort_idx(i)}, closeness_sorted(i));
end

代码说明:

  1. 问题定义

    • 5个备选方案(供应商A-E)
    • 5个评价准则:价格、质量、交货期、服务水平、环保性
    • 准则权重:通过专家判断或AHP方法预先确定
    • 准则类型:"价格"为最小化准则,其余为最大化准则
  2. TOPSIS计算流程

    • 归一化处理:针对不同类型准则采用不同归一化方法
    • 加权处理:结合准则权重调整归一化后的决策矩阵
    • 确定理想解:分别计算正理想解和负理想解
    • 计算距离:计算各方案到正理想解和负理想解的欧氏距离
    • 计算相对贴近度:综合距离指标得到最终评分
    • 排序:按相对贴近度降序排列
  3. 可视化功能

    • 决策矩阵热图:直观展示原始数据
    • 准则权重饼图:显示各准则重要性分布
    • 距离和贴近度对比图:横向比较各方案在不同指标下的表现
    • TOPSIS排序结果:按相对贴近度从高到低展示
  4. 结果输出

    • 详细列出各方案的距离指标和相对贴近度
    • 给出推荐排序结果

运行结果
在这里插入图片描述
在这里插入图片描述

http://www.lryc.cn/news/603218.html

相关文章:

  • Ext JS极速项目之 Coworkee
  • 随缘玩 一: 代理模式
  • 算法第29天|动态规划dp2:不同路径、不同路径Ⅱ、整数拆分、不同的二叉搜索树
  • 【图像处理基石】如何对遥感图像进行实例分割?
  • 小白学OpenCV系列1-图像处理基本操作
  • 在 Web3 时代通过自我主权合规重塑 KYC/AML
  • [SWPU2019]Web1
  • 链表反转中最常用的方法————三指针法
  • PHP云原生架构:容器化、Kubernetes与Serverless实践
  • redis【1】
  • 小程序视频播放,与父视图一致等样式设置
  • zama test
  • 百元级工业级核心板:明远智睿×瑞萨V2H,开启AIoT开发新纪元
  • PDF转Word免费工具!批量处理PDF压缩,合并, OCR识别, 去水印, 签名等全功能详解
  • 数据结构之时间复杂度
  • 前端css 的固定布局,流式布局,弹性布局,自适应布局,响应式布局
  • ZKmall开源商城中台架构实践:API 网关与服务治理如何撑起电商技术骨架
  • 在 PolkaVM 上用 Rust 实现 ERC20 合约的全流程开发指南
  • 接口自动化测试pytest框架
  • c++-list
  • 【VOS虚拟操作系统】未来之窗打包工具在前端资源优化中的应用与优势分析——仙盟创梦IDE
  • Redis内存使用耗尽情况分析
  • 40+个常用的Linux指令——下
  • 艾利特机器人:光伏机器人如何重塑清洁能源制造新格局
  • 【CDH】CDH环境中升级ZooKeeper的实战记录
  • 基于KMeans、AgglomerativeClustering、DBSCAN、PCA的聚类分析的区域经济差异研究
  • 【Linux知识】Linux Shell 脚本中的 `set -ex` 命令深度解析
  • 复现cacti的RCE(CVE-2022-46169)
  • Go 客户端玩转 ES|QL API 直连与 Mapping Helpers 实战详解
  • upload-labs靶场通关(1-12)