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=1n?wj?=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=1m?xij2??xij??

  • 變量:xˉij\bar{x}_{ij}xˉij?iii個方案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}Vij?iii個方案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+?={maxi?Vij?mini?Vij??(準則?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??={mini?Vij?maxi?Vij??(準則?j?為最大化目標)(準則?j?為最小化目標)?

    • 變量:Aj?A_j^-Aj??jjj個準則下的“最劣表現”(如“所有方案中成本最高值” )。
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?(Vij??Aj+?)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?(Vij??Aj??)2?

    • 變量:di?d_i^-di??iii個方案到負理想解的歐氏距離,距離越大,方案離“最劣表現”越遠。
6. 步驟5:計算貼近度(方案優劣排序)

貼近度反映方案與正理想解的相對接近程度,公式:
Ci=di?di++di?C_i = \frac{d_i^-}{d_i^+ + d_i^-} Ci?=di+?+di??di???

  • 變量: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=[98?76?](桂林:景色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+82?9?0.676,?xˉ12?=72+62?7?0.714xˉ21?=92+82?8?0.606,?xˉ22?=72+62?6?0.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.042d1??0.042(到負理想解距離),C1≈0.518C_1 \approx 0.518C1?0.518
  • 黃山:d2+≈0.042d_2^+ \approx 0.042d2+?0.042(到正理想解距離)、d2?≈0.039d_2^- \approx 0.039d2??0.039(到負理想解距離),C2≈0.482C_2 \approx 0.482C2?0.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.pswp.cn/news/917408.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/917408.shtml
英文地址,請注明出處:http://en.pswp.cn/news/917408.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

uniapp 富文本rich-text 文本首行縮進和圖片居中

1. uniapp 富文本rich-text 文本首行縮進和圖片居中 1.1. rich-text 文本首行縮進使用 rich-text 組件渲染html格式的代碼,常常因為不能自定義css導致文本不能縮進,以及圖片不能居中等問題,這里可以考慮使用js的replace方法,替換…

Apple基礎(Xcode③-Singbox Core)

brew install go open ~/.bash_profile export PATH="$PATH:$(go env GOPATH)/bin" 先確保工具鏈完整 go install github.com/sagernet/gomobile/cmd/gomobile@v0.1.4 go install github.com/sagernet/gomobile/cmd/gobind@v0.1.4 gomobile init -v # 關鍵:-v …

JVM學習日記(十四)Day14——性能監控與調優(一)

經過前幾篇的鋪墊,現在開始正式進入調優篇,也是大火實際用的到的和感興趣的,但是前期的知識積累還是有必要的,所以還對JVM基礎沒什么了解的,建議還是回看主包的前幾篇內容,當然看其他優秀的博主也是可以的。…

使用 Elasticsearch 和 AI 構建智能重復項檢測

作者:來自 Elastic Dayananda Srinivas 探索組織如何利用 Elasticsearch 檢測和處理貸款或保險申請中的重復項。 Elasticsearch 帶來了大量新功能,幫助你為你的使用場景構建最佳搜索方案。深入了解我們的示例 notebooks,開始免費云試用&#…

如何在不依賴 Office 的情況下轉換 PDF 為可編輯文檔

在日常工作里,我們經常需要處理各種文件格式的轉換問題,像Word轉PDF或者PDF轉Excel這樣的需求屢見不鮮。它是一款功能全面的PDF轉換工具,能夠幫助你輕松應對多種文檔處理任務。不僅能夠實現PDF與其他格式之間的轉換,如Word、Excel…

嵌入式學習筆記-MCU階段--DAY09

1. oled屏幕的接口IIC應用場合:2.IIC通信原理概念:IIC(Inter-Integrated Circuit)其實是IICBus簡稱,所以中文應該叫集成電路總線,它是一種串行通信總線,使用多主從架構,由飛利浦公司…

解決 Node.js 托管 React 靜態資源的跨域問題

在 Node.js 項目中托管 React 打包后的靜態資源時,可能會遇到跨域問題(CORS)。以下是幾種解決方案: 1. 使用 Express 中間件設置 CORS 頭 const express require(express); const path require(path); const app express();// …

【Linux】多路轉接之epoll

優化poll進行拷貝的開銷poll開銷過大將整個 pollfd 數組拷貝到內核態,以便內核檢查 fd 是否就緒(從用戶態 → 內核態)。內核檢查 fd 狀態,并填充 revents。將 pollfd 數組從內核態拷貝回用戶態,讓應用程序可以讀取 rev…

下載一個JeecgBoot-master項目 導入idea需要什么操作啟動項目

官網:開發環境搭建 | JEECG 文檔中心 一般做開發的電腦里都是有的,沒有的只能下載了 前端安裝 node官網:https://nodejs.org/zh-cnpnpm安裝:通過命令 后端安裝: jdk17 :https://www.oracle.com/cn/java/technologies/downloads/#java17maven :https://m…

解決 InputStream 只能讀取一次問題

是的,InputStream 的一個重要特性是它通常只能被讀取一次。這是因為:輸入流通常是單向的、順序訪問的數據源很多流(如網絡流、文件流)讀取后指針就移動了,無法回退有些流(如Socket流)甚至讀取后…

數據分析面試題

技都測試 1、請列舉5個 Excel 中常用的函數及寫法。[ if ] IF(A1>60, "及格", "不及格") —— 若 A1 單元格數值≥60,返回 “及格”,否則返回 “不及格”。IF(B2>100, B2*0.8, B2) —— 若 B2 數值 > 100&#xff0c…

【07】VisionMaster入門到精通——Blob分折

文章目錄0 視屏講解與演示1 案例演示2 參數詳解1 運行參數0 視屏講解與演示 1 案例演示 周長使能查找U型槽 短軸使能查找U型槽 面積篩選區域 當條件不符合是,該模塊顯示紅色,狀態為NG 顯示二值圖像 顯示Blob圖像 2 參數詳解 Blob分折,…

解釋 MySQL 中的 EXPLAIN 命令的作用和使用場景

解釋 MySQL 中的 EXPLAIN 命令的作用和使用場景 總結性回答 EXPLAIN 是 MySQL 中用于分析 SQL 查詢執行計劃的命令,它能展示 MySQL 如何執行一個查詢,包括使用的索引、表連接順序、掃描行數等關鍵信息。主要用于查詢性能優化,幫助開發者識別潛…

.env 文件

.env 文件其實就是一個純文本文件,用來寫“環境變量”鍵值對,格式非常簡單 👇? .env 文件寫法格式:每一行就是一個變量名 值,不要加引號,不要加空格DEEPSEEK_API_KEYsk-xxxxxxxxxxxxxxxxxxxx完整例子&…

機器學習——K 折交叉驗證(K-Fold Cross Validation),案例:邏輯回歸 交叉尋找最佳懲罰因子C

什么是交叉驗證? 交叉驗證是一種將原始數據集劃分為若干個子集,反復訓練和驗證模型的策略。 交叉驗證(Cross-Validation)適用于你在模型調參(如邏輯回歸中的 C) 最常用的:K 折交叉驗證&#…

藍橋杯----串口

(五)、串口1、串口通信簡介制定通信的規則,通信雙方按照協議規則進行數據收發,將一個設備的數據傳送到另一個設備,擴展硬件系統,串口USART有兩根通信線Tx、Rx,可同時雙向通信,稱之為…

錯誤: 找不到或無法加載主類 原因: java.lang.ClassNotFoundException

背景: 代碼沒有更改,主類位置也沒有移動,運行時突然報找不到或無法加載主類的錯誤 錯誤: 找不到或無法加載主類 原因: java.lang.ClassNotFoundException編譯器上方顯示 Java file is located outside of the module source root so it wont …

Lock 接口及實現類詳解:從 ReentrantLock 到并發場景實踐

在 Java 并發編程中,除了synchronized關鍵字,java.util.concurrent.locks.Lock接口及其實現類是另一種重要的同步機制。自 JDK 5 引入以來,Lock接口憑借靈活的 API 設計、可中斷的鎖獲取、公平性控制等特性,成為復雜并發場景的首選…

「iOS」————SideTable

iOS學習前言sideTableSlideTablesSideTableBufSideTable前言 我們在上一篇中,簡單的介紹了weak的實現原理。其中弱引用表就是存儲在SideTable中的,這里我們來學習了解一下SideTable sideTable sideTable主要用于存儲和管理對象的額外信息,…

【PHP】CURL請求第三方API接口

當我們需要調用第三方接口時,就需要使用CURL,通過CURL操作去請求第三方API接口,有的是通過POST方式,有的是通過GET方式,下面介紹一個通用的使用CURL調用API接口的方法。一、CURL操作共兩個方法,分別是CURL操…