數學建模-評價類問題-優劣解距離法(TOPSIS)

1-AI帶你認識TOPSIS

📘 一、TOPSIS 方法簡介

1. ??基本定義:??

??TOPSIS(Technique for Order Preference by Similarity to an Ideal Solution)??,中文通常稱為:

  • ?

    ??優劣解距離法??

  • ?

    ??逼近理想解排序法??

  • ?

    ??理想點法??

它是一種??經典的多指標綜合評價方法??,由 ??C.L. Hwang 和 K. Yoon 于 1981 年提出??,主要用于解決??多方案、多指標的綜合排序與優選問題??。


2. ??核心思想:??

??TOPSIS 的核心思想是:通過計算每個評價對象與“理想解”(最優方案)和“負理想解”(最劣方案)之間的距離,來對各個方案進行優劣排序;距離“理想解”越近、距離“負理想解”越遠的方案,其綜合評價結果越好。??

簡單來說就是:

  • ?

    先找出所有對象中每個指標的??最好值(正理想解)?? 和 ??最差值(負理想解)??

  • ?

    然后計算每個方案到這兩個理想點的??距離??

  • ?

    最后根據??接近最優、遠離最劣的程度??進行排序,??距離最優最近、最劣最遠的方案最優??


🧩 二、TOPSIS 方法的基本步驟

下面是 TOPSIS 方法的標準操作流程(非常規范、清晰,適合建模與論文使用):


步驟 1:構建原始決策矩陣

假設有 ??m 個評價對象(如方案、城市、企業等)??,??n 個評價指標??,構建初始數據矩陣:

X=?x11?x21??xm1??x12?x22??xm2???????x1n?x2n??xmn???

其中?xij?表示第?i個對象在第?j個指標上的原始取值。


步驟 2:數據標準化處理

由于不同指標可能具有不同的量綱(單位)、數量級,需要對原始數據進行??標準化(歸一化)處理??,消除量綱影響,常用方法為:

(1)向量歸一化(常用):
yij?=∑i=1m?xij2??xij??
或者(2)極差標準化(區分正向/負向指標):
  • ?

    ??正向指標(越大越好)??:

    yij?=max(xj?)?min(xj?)xij??min(xj?)?
  • ?

    ??負向指標(越小越好)??:

    yij?=max(xj?)?min(xj?)max(xj?)?xij??

標準化后得到矩陣?Y=(yij?)m×n?,其中各元素?yij?∈[0,1]


步驟 3:確定加權標準化矩陣(可選)

如果各指標的重要性不同,可以引入權重?wj?(如通過 AHP、熵權法等方法獲得),構造??加權標準化決策矩陣??:

V=(vij?)m×n?,vij?=wj??yij?

其中?wj?是第 j 個指標的權重,且滿足?∑j=1n?wj?=1

? 在實際應用中,TOPSIS 往往會結合主觀或客觀權重方法使用,使評價更加科學合理。


步驟 4:確定正理想解和負理想解

  • ?

    ??正理想解(最優解)???V+:每個指標取??最優值??

    • ?

      對于 ??正向指標??:取最大值

    • ?

      對于 ??負向指標??:取最小值

  • ?

    ??負理想解(最劣解)???V?:每個指標取??最劣值??

    • ?

      對于 ??正向指標??:取最小值

    • ?

      對于 ??負向指標??:取最大值

具體為:

vj+?=max(v1j?,v2j?,...,vmj?)或min(v1j?,...,vmj?)(根據指標類型)
vj??=min(v1j?,v2j?,...,vmj?)或max(v1j?,...,vmj?)(根據指標類型)

步驟 5:計算各方案到正、負理想解的距離

  • ?

    ??到正理想解的距離(歐氏距離)??:

    Di+?=j=1∑n?(vij??vj+?)2?
  • ?

    ??到負理想解的距離(歐氏距離)??:

    Di??=j=1∑n?(vij??vj??)2?

其中?Di+?越小越好,Di??越大越好。


步驟 6:計算相對貼近度(綜合得分)

Ci?=Di+?+Di??Di???,0≤Ci?≤1
  • ?

    ??Ci?越接近 1??,說明該方案越接近最優解、遠離最劣解,??評價結果越好??

  • ?

    ??Ci?越接近 0??,說明該方案越差


步驟 7:排序與決策

  • ?

    按照?Ci?值從??大到小??排序

  • ?

    ??Ci?最大的方案即為最優方案??


? 三、TOPSIS 方法的優點與缺點

? 優點:

  1. 1.

    ??直觀易懂??:基于“距離理想解”的思想,邏輯清晰,易于理解與解釋

  2. 2.

    ??適用性廣??:適用于多指標、多方案的綜合評價與排序問題

  3. 3.

    ??綜合正負兩方面信息??:同時考慮最優和最劣情況,評價更全面

  4. 4.

    ??結果明確??:能給出清晰的方案優劣排序,便于決策

  5. 5.

    ??可結合權重??:常與 AHP、熵權法等結合,使用主觀或客觀權重,提高科學性

? 缺點:

  1. 1.

    ??對數據標準化方法敏感??:不同的標準化方式可能影響結果

  2. 2.

    ??依賴權重設置??:權重的合理性直接影響排序結果

  3. 3.

    ??僅基于距離度量??:未考慮指標之間的相關性等更復雜信息


📚 四、TOPSIS 的應用場景舉例

  • ?

    ??方案優選類問題??:如選擇最優投資方案、供應商、旅游地、城市規劃方案等

  • ?

    ??績效評價類問題??:如企業績效、政府績效、學校排名、醫院服務評價等

  • ?

    ??綜合評價類問題??:如城市競爭力、環境質量、能源效率、技術創新能力等

  • ?

    ??多指標決策問題??:幾乎所有涉及多個指標、多個對象優選排序的問題


🧠 五、總結一句話:

??TOPSIS(優劣解距離法)是一種基于“距離理想解”思想的多指標綜合評價方法,通過計算各評價對象與最優解和最劣解的距離,得到相對貼近度,從而進行排序與優選,是一種直觀、科學、應用廣泛的決策分析工具。?

2-理論知識

介紹

答案:不是

定義

步驟

1)正向化

極小型轉極大型

中間型轉極大型

區間型轉極大型

2)標準化

3)優劣解打分

優秀論文

課后習題

3-基于matlab實現優劣解距離法

源代碼(包含詳細注釋)

%% 初始化數據
disp('--------------------------初始化數據--------------------------');
X = [99 0.010;100 0.012;98 0.040;97 0.033]
[n,m] = size(X);
disp(['有' num2str(n) '個評價對象,' num2str(m) '個評價指標']);%% 正向化
disp('--------------------------進行正向化--------------------------');
vec = input('請輸入要正向化的向量組,如[1 2 3]表示1、2、3列需要正向化,如果都不需要輸入0:\n')
if (vec~=0)% 遍歷需要正向化的列for i = 1:size(vec)option = input(['第' num2str(vec(i)) '列是哪類數據?(【1】極小型【2】中間型【3】區間型),請輸入序號:\n']);% 極小型if (option == 1)X(:,vec(i)) = Min2Max(X(:,vec(i)))% 中間型elseif (option == 2)best = input('請輸入中間型的最佳值,如180:\n');X(:,vec(i)) = Mid2Max(X(:,vec(i)),best)% 區間型elseif (option == 3)bound = input('請輸入最佳區間,按照"[a b]"的格式,如[80 90]:\n');X(:,vec(i)) = Int2Max(X(:,vec(i)),bound(1),bound(2))elsedisp('輸入的序號錯誤,不存在這類數據\n');endend
end%% 標準化
disp('--------------------------進行標準化--------------------------');
% 行數代表評判對象個數--n
% 列數代表評判指標個數--m
[n,m] = size(X)
exist = 0;
% 遍歷矩陣確認是否存在負數
for i = 1 :nfor j = 1:mif (X(i,j)<0)exist = 1;break;endend
end% 如果不存在負數
if (exist == 0)% 每個元素都先平方square_X = X.*X% 先按列求和,再開方sum_X = sum(square_X,1) .^ 0.5Z = X ./ repmat(sum_X,n,1)
% 如果存在負數
else% 求出每一列的最大值max_X = max(X,[],1)% 求出每一列的最小值min_X = min(X,[],1)Z = (X - repmat(min_X,n,1)) ./ (repmat(max_X,n,1) - repmat(min_X,n,1))
end%% 方法一:距離法打分
disp('--------------------------距離法打分--------------------------');
% 按照列得到最值元素
x_max = max(Z,[],1)
x_min = min(Z,[],1)
% 距離法打分
Disntance_Score = (Z - repmat(x_min,n,1)) ./ (x_max - x_min)%% 方法二:優劣解打分
disp('--------------------------優劣解打分--------------------------');
% 生成默認值為1的m維權值列向量
w = ones(m,1)
is_need_weight = input('是否需要權重,若需要,請輸入1,否則輸入0:');
if (is_need_weight==1)w = [];for i = 1 : mw_j = input(['請輸入第' num2str(i) '個指標的權重:']);w = [w;w_j];end
end
% 得到每列最值元素,復制n行變成成n×m型矩陣
Z_plus=repmat(max(Z,[],1),n,1)
Z_sub=repmat(min(Z,[],1),n,1)
D_plus=sum(((Z - Z_plus) .^ 2 ) * w , 2) .^ 0.5
D_sub=sum(((Z - Z_sub) .^ 2 ) * w , 2) .^ 0.5
S = D_sub ./ (D_plus+D_sub)
TOPSIS_Score = S ./ sum(S)%% 保存數據到excel表格
xlswrite('TOPSIS.xlsx',TOPSIS_Score);%% 以下是局部函數
% 極小型轉為極大型,傳入參數X為極小型數據,輸出參數res極大型數據
function [res] = Min2Max(X)res = max(X)-X;
end% 中間型轉為極大型,傳入參數X為中間型數據,best為最佳值,輸出參數res為極大型數據
function [res] = Mid2Max(X,best)M = max(abs(X-best));res = 1-abs(X-best)/M;
end% 區間型轉為極大型
% 傳入參數x為區間型數據,a,b分別為區間最佳最小值和最佳最大值
% 輸入參數res為及大型數據
function [res] = Int2Max(X,a,b)M = max(a - min(X),max(X)-b);for i = 1:size(X)if (X(i)<a)X(i) = 1 - (a - X(i))/M;elseif (X(i) >= a && X(i) <= b)X(i) = 1;elseif (X(i) > b)X(i) = 1 - (X(i) - b)/M;endendres = X;
end

運行結果

在同目錄下產生了一個excel文件

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/93853.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/93853.shtml
英文地址,請注明出處:http://en.pswp.cn/web/93853.shtml

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

相關文章

Go協程:從匯編視角揭秘實現奧秘

&#x1f680; Go協程&#xff1a;從匯編視角揭秘實現奧秘 #Go語言 #協程原理 #并發編程 #底層實現 引用&#xff1a; 關于 Go 協同程序&#xff08;Coroutines 協程&#xff09;、Go 匯編及一些注意事項。 &#x1f31f; 前言&#xff1a;重新定義并發編程范式 在當今高并發…

MySQL 事務(重點)

MySQL 這個東西注定是可能會被多個用戶/客戶端來同時訪問的&#xff0c;這是肯定的&#xff0c;MySQL 中存放的都是數據&#xff0c;數據可能有一個上層線程在用&#xff0c;也有可能另一個線程也要用...數據是被所有人共享的&#xff0c;所以就注定了 MySQL 這樣的服務在一個時…

uniapp:h5鏈接拉起支付寶支付

場景&#xff1a;APP內點擊支付寶支付&#xff0c;后臺返回類似鏈接https://qr.alipay.com/bax***********c3050 通常做法是&#xff0c;使用plus.runtime.openURL(deeplink);先打開瀏覽器&#xff0c;瀏覽器會提示打開支付寶&#xff0c;之后是支付流程。現在可以省略跳轉h5的…

吳恩達 Machine Learning(Class 3)

Week 11.1 K-means Cluster centroidK-means 是無監督學習中聚類算法的一種&#xff0c;核心在于更新聚類質心&#xff1b;首先將每個點分配給幾個聚類質心&#xff0c;取決于那些點離哪個質心更近&#xff1b;然后將幾個聚類質心移動到分配給他的所有點的平均值&#xff0c;不…

MyBatis 動態查詢語句詳解:讓 SQL 更靈活可控

MyBatis 動態查詢語句詳解&#xff1a;讓 SQL 更靈活可控 在日常的數據庫操作中&#xff0c;我們經常會遇到需要根據不同條件拼接 SQL 語句的場景。比如查詢用戶時&#xff0c;可能需要根據姓名、年齡、性別等多個條件進行篩選&#xff0c;而這些條件往往是動態變化的 —— 有時…

Java基礎語法three

一、一維數組一維數組初始化數據類型[] 數組名new 數據類型[數組長度]//動態初始化數據類型[] 數組名new 數據類型[]{值}//靜態初始化數據類型[] 數組名{值}數組長度一旦確定&#xff0c;就不可更改。數組是序排序&#xff1b;數組屬于引用數據類型的變量&#xff0c;數組的元素…

【數據結構】排序算法全解析:概念與接口

1.排序的概念及其運用 1.1 排序的概念 排序&#xff1a;所謂排序&#xff0c;就是使一串記錄&#xff0c;按照其中的某個或某些關鍵字的大小&#xff0c;遞增或遞減的排列起來的操作。 穩定性&#xff1a;假定在待排序的記錄序列中&#xff0c;存在多個具有相同的關鍵字的…

在 CentOS 7 上使用 LAMP 架構部署 WordPress

CentOS 7 LAMP 架構部署 WordPress全步驟本文將詳細介紹如何在 CentOS 7 系統上通過 LAMP&#xff08;Linux Apache MariaDB PHP&#xff09;架構部署 WordPress 博客平臺。 在CentOS 7上基于LAMP架構部署WordPress 一、系統基礎配置 1. 修改主機名&#xff08;本機IP&#…

Node.js導入MongoDB具體操作

在Node.js應用程序中&#xff0c;導入MongoDB是一項常見任務。本文將詳細介紹如何在Node.js中連接和操作MongoDB數據庫&#xff0c;包括安裝必要的包、配置連接、執行基本的CRUD操作等步驟。1. 安裝必要的包首先&#xff0c;確保你已經安裝了Node.js和npm。然后&#xff0c;通過…

HTML--pre標簽的作用

原文網址&#xff1a;HTML--pre標簽的作用-CSDN博客 簡介 本文介紹HTML里pre標簽的作用。 <pre> 元素表示預定義格式文本。里邊的文本會保留原格式&#xff0c;以等寬字體的形式展現出來&#xff0c;文本中的空白符&#xff08;比如空格和換行符&#xff09;都會顯示出…

機器學習--數據預處理

目錄 一、數據清洗&#xff1a;讓數據純凈如新 1、缺失值處理&#xff1a; 2、異常值處理 3、重復值處理 二、數據變換&#xff1a;重塑數據的 “形狀” 1、歸一化 2、標準化 三、總結與展望 機器學習小白必看&#xff1a;數據預處理實戰筆記 最近投身于機器學習的學習…

Python 數據可視化:Matplotlib 與 Seaborn 實戰

Python 數據可視化&#xff1a;Matplotlib 與 Seaborn 實戰????在當今數據驅動的時代&#xff0c;數據可視化成為了理解和傳達數據信息的關鍵手段。Python 作為一門強大的編程語言&#xff0c;擁有豐富的數據可視化庫&#xff0c;其中 Matplotlib 和 Seaborn 尤為突出。本文…

計算機網絡技術學習-day4《路由器配置》

目錄 一、路由器基礎認知 1. 路由器的核心功能 2. 路由器與交換機的區別 二、路由器配置基礎操作 1. CLI&#xff08;命令行界面&#xff09;模式體系 2. 基礎配置命令示例 &#xff08;1&#xff09;基礎信息配置 &#xff08;2&#xff09;接口IP地址配置&#xff08;…

IDEA(十四) IntelliJ Idea 常用快捷鍵(Mac)

目錄準備&#xff1a;Mac鍵盤符號和修飾鍵說明一、編輯類快捷鍵二、Search/Replace&#xff08;查詢/替換&#xff09;三、編譯、運行四、debug 調試五、Navigation&#xff08;導航&#xff09;六、Refactoring&#xff08;重構&#xff09;七、VCS/Local History八、Live Tem…

八月月報丨MaxKB在教育及教學科研領域的應用進展

在2025年5月的“MaxKB用戶應用月度報告”中&#xff0c;我們對MaxKB開源智能體平臺在教育行業的典型應用場景進行了總結。MaxKB在教育行業的應用主要集中在教學輔助、學術研究、校園服務、行政辦公、財務管理、招生等場景。 目前&#xff0c;“DeepSeekMaxKB”的組合正在被包括…

一周學會Matplotlib3 Python 數據可視化-繪制自相關圖

鋒哥原創的Matplotlib3 Python數據可視化視頻教程&#xff1a; 2026版 Matplotlib3 Python 數據可視化 視頻教程(無廢話版) 玩命更新中~_嗶哩嗶哩_bilibili 課程介紹 本課程講解利用python進行數據可視化 科研繪圖-Matplotlib&#xff0c;學習Matplotlib圖形參數基本設置&…

第三十三天(信號量)

非常非常非常.....的重要在共享內存的代碼里面p1.c實質是有問題lt._flag 1;//這里先置1if(c Q)sprintf(lt._buf,"quit");elsesprintf(lt._buf,"大家好&#xff0c;%d 我系渣渣輝. %d 是兄弟就來砍我吧!!! %d",i,i1,i2);while(*((int *)shmptr));//如果別…

Scikit-learn通關秘籍:從鳶尾花分類到房價預測

點擊 “AladdinEdu&#xff0c;同學們用得起的【H卡】算力平臺”&#xff0c;H卡級別算力&#xff0c;按量計費&#xff0c;靈活彈性&#xff0c;頂級配置&#xff0c;學生專屬優惠。 決策樹/SVM/KNN算法對比 模型評估指標解析 讀者收獲&#xff1a;掌握經典機器學習全流程 …

rsync + inotify 數據實時同步

rsync inotify 數據實時同步 一、rsync簡介 rsync是linux系統下的數據鏡像備份工具。使用快速增量備份工具Remote Sync可以遠程同步&#xff0c; 支持本地復制&#xff0c;或者與其他SSH、rsync主機同步 二、rsync三種命令 Rsync的命令格式常用的有以下三種&#xff1a;&#…

Linux基礎介紹-3——第一階段

文章目錄一、進程管理1.1 進程的基本概念1.2 常見管理命令1.3 進程優先級調整&#xff1a;nice 與 renice二、軟件包管理三、防火墻管理四、shell腳本五、xshell鏈接kali一、進程管理 1.1 進程的基本概念 進程是程序的動態執行實例&#xff0c;每個進程都有唯一的 PID&#x…