前言
提醒:
文章內容為方便作者自己后日復習與查閱而進行的書寫與發布,其中引用內容都會使用鏈接表明出處(如有侵權問題,請及時聯系)。
其中內容多為一次書寫,缺少檢查與訂正,如有問題或其他拓展及意見建議,歡迎評論區討論交流。
內容由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 = 1∑j=1n?wj?=1。wjw_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=1∑n?(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=1∑n?(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?降序排序,確定方案優先級。
二、關鍵特點與優勢
- 幾何直觀性:將決策映射到nnn維空間,用“距離理想解的遠近”排序,邏輯清晰(如二維場景可類比平面上點與“最優/最劣點”的距離比較 )。
- 混合準則支持:兼容最大化、最小化目標(僅需在確定A+A^+A+、A?A^-A?時區分準則類型 ),覆蓋“利潤最大化+成本最小化”等復雜場景。
- 計算簡潔性:基于歐氏距離和加權歸一化,流程明確,手工或編程均可快速實現。
三、示例解析(簡化場景: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.6≈0.406,?V12?=0.714×0.4≈0.286V21?=0.606×0.6≈0.364,?V22?=0.618×0.4≈0.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
代碼說明:
-
問題定義:
- 5個備選方案(供應商A-E)
- 5個評價準則:價格、質量、交貨期、服務水平、環保性
- 準則權重:通過專家判斷或AHP方法預先確定
- 準則類型:"價格"為最小化準則,其余為最大化準則
-
TOPSIS計算流程:
- 歸一化處理:針對不同類型準則采用不同歸一化方法
- 加權處理:結合準則權重調整歸一化后的決策矩陣
- 確定理想解:分別計算正理想解和負理想解
- 計算距離:計算各方案到正理想解和負理想解的歐氏距離
- 計算相對貼近度:綜合距離指標得到最終評分
- 排序:按相對貼近度降序排列
-
可視化功能:
- 決策矩陣熱圖:直觀展示原始數據
- 準則權重餅圖:顯示各準則重要性分布
- 距離和貼近度對比圖:橫向比較各方案在不同指標下的表現
- TOPSIS排序結果:按相對貼近度從高到低展示
-
結果輸出:
- 詳細列出各方案的距離指標和相對貼近度
- 給出推薦排序結果
運行結果