【理想解法學習筆記】

目錄

    • 理想解法
      • 原理簡介
      • 算法步驟
      • 屬性值規范化方法
      • 代碼示例

理想解法

原理簡介

?TOPSIS(Technique for Order Preference by Simi larity to IdealSolution)法是一種逼近理想解的排序方法。其基本的處理思路是:首先建立初始化決策矩陣,而后基于規范化后的初始矩陣,找出有限方案中的最優方案和最劣方案(也就是正、負理想解),然后分別計算各個評價對象與最優方案和最劣方案的距離,獲得各評價方案與最優方案的相對接近程度,最后進行排序,并以此作為評價方案優劣的依據。

?設多屬性決策方案集為 D = { d 1 , d 2 , . . . , d m } D=\left \{ d_1,d_2,...,d_m \right \} D={d1?,d2?,...,dm?},衡量方案優劣的屬性變量為 x 1 , x 2 , . . . , x n x_1,x_2,...,x_n x1?,x2?,...,xn?。,這時方案集 D D D中的每個方案 d i ( i = 1 , 2 , ? , m ) d_i(i=1,2,?,m) di?(i=12?m) n n n個屬性值構成的向量是 [ a i 1 , a i 2 , . . . , a i n ] \left [ a_{i1},a_{i2},...,a_{in} \right ] [ai1?,ai2?,...,ain?],它作為 n n n維空間中的一個點,能唯一地表征方案 d i d_i di?。正理想解 C ? C^* C?是一個方案集 D D D中并不存在的虛擬的最佳方案,它的每個屬性值都是決策矩陣中該屬性的最優值;而負理想解 C 0 C^0 C0則是虛擬的最差方案,它的每個屬性值都是決策矩陣中該屬性的最差值。在 n n n維空間中,將方案集 D D D中的各備選方案 d i d_i di?.與正理想解 C ? C^* C?和負理想解 C 0 C^0 C0的距離進行比較,既靠近正理想解又遠離負理想解的方案就是方案集D中的最優方案,并可以據此排定方案集D中各備選方案的優先序。對比備選方案和理想解需要定義適合的距離測度,TOPSIS所用的是歐幾里得距離。

算法步驟

假設初始的決策矩陣 A A A為:
A = [ a 11 … a 1 j … a 1 n ? ? ? ? ? a i 1 … a i j … a i n ? ? ? ? ? a m 1 … a m j … a m n ] A=\begin{bmatrix} a_{11}& \dots& a_{1j}& \dots &a_{1n} \\ \vdots& \vdots& \vdots& \vdots&\vdots\\ a_{i1}& \dots& a_{ij}& \dots &a_{in}\\ \vdots& \vdots& \vdots& \vdots&\vdots\\ a_{m1}& \dots& a_{mj}& \dots &a_{mn}\\ \end{bmatrix} A=?????????a11??ai1??am1?????a1j??aij??amj?????a1n??ain??amn???????????
(1)對初始決策矩陣 A A A的所有備選方案的每一個屬性進行規范化處理,即對 A A A的每一個列向量 [ a 1 j , a 2 j , . . . , a m j ] T , j ∈ 1 , . . . , n \left [ a_{1j},a_{2j},...,a_{mj} \right ]^T,j\in 1,...,n [a1j?,a2j?,...,amj?]T,j1,...,n規范化處理得到規范化的決策矩陣 B = ( b i j ) m × n B=\left ( b_{ij} \right )_{m\times n} B=(bij?)m×n?.
b i j = a i j ∑ i = 1 m a i j 2 , i = 1 , . . . , m , j = 1 , . . . , n b_{ij}=\frac{a_{ij}}{\sqrt{\sum_{i=1}^{m}a_{ij}^2}},i=1,...,m,j=1,...,n bij?=i=1m?aij2? ?aij??,i=1,...,m,j=1,...,n
(2)構造加權規范陣,假設 n n n個屬性的權重構成的權重向量為 ω = [ ω 1 , ω 2 , . . . , ω n ] ? \omega=\left [ \omega_1,\omega_2,...,\omega_n \right ]^\top ω=[ω1?,ω2?,...,ωn?]?,將規范化的決策矩陣 B = ( b i j ) m × n B=\left ( b_{ij} \right )_{m\times n} B=(bij?)m×n?的每一行與權重向量對應相乘即得到加權規范陣 C = ( c i j ) m × n C=\left ( c_{ij} \right )_{m\times n} C=(cij?)m×n?
c i j = b i j ? ω j , j = 1 , . . . , n , i = 1 , . . . , m c_{ij}=b_{ij}\ast \omega_j,j=1,...,n,i=1,...,m cij?=bij??ωj?,j=1,...,n,i=1,...,m
(3)確定正理想解 C ? C^* C?和負理想解 C 0 C^0 C0,對于成本型屬性,選擇最小值,對于效益型屬性,選擇最大值。遍歷 C C C的每一列 C j ( j = 1 , . . . , n ) C_j(j=1,...,n) Cj?(j=1,...,n),根據指標類型選擇每一列的最大值或最小值。
c j ? = { max ? { C j } , j 為 效 益 型 指 標 min ? { C j } , j 為 成 本 型 指 標 c_{j}^*=\begin{cases} \max\left \{ C_{j} \right \},j為效益型指標 \\ \min\left \{ C_{j} \right \},j為成本型指標 \end{cases} cj??={max{Cj?},jmin{Cj?},j?

c j 0 = { min ? { C j } , j 為 效 益 型 指 標 max ? { C j } , j 為 成 本 型 指 標 c_{j}^0=\begin{cases} \min\left \{ C_{j} \right \},j為效益型指標 \\ \max\left \{ C_{j} \right \},j為成本型指標 \end{cases} cj0?={min{Cj?},jmax{Cj?},j?

其中 c j ? , c j 0 c_j^*,c_j^0 cj??,cj0?分別表示正、負理想解的第 j j j個元素取值。

(4)計算各方案到兩個理想解的距離,即計算加權規范陣 C C C的每一行 C i ( i = 1 , . . . , m ) C_i(i=1,...,m) Ci?(i=1,...,m)與理想解 C ? , C 0 C^*,C^0 C?,C0的距離。

  • 距離正理想解的距離 s i ? s_i^* si??
    s i ? = ∑ j = 1 n ( c i j ? c j ? ) 2 s_i^*=\sqrt{\sum_{j=1}^{n}\left ( c_{ij}-c_j^* \right )^2 } si??=j=1n?(cij??cj??)2 ?

  • 距離負理想解的距離 s i 0 s_i^0 si0?
    s i 0 = ∑ j = 1 n ( c i j ? c j 0 ) 2 s_i^0=\sqrt{\sum_{j=1}^{n}\left ( c_{ij}-c_j^0 \right )^2 } si0?=j=1n?(cij??cj0?)2 ?

(5)計算各方案的排序指標值,按照指標值大小確定方案排序
f i ? = s i 0 s i 0 + s i ? , i = 1 , . . . , m f_i^*=\frac{s_i^0}{s_i^0+s_i^*},i=1,...,m fi??=si0?+si??si0??,i=1,...,m

屬性值規范化方法

數據的預處理又稱屬性值的規范化。

作用:

  • 在綜合評價之前將屬性的類型作一致化處理使得表中任-屬性下性能越優的方案變換后的屬性值越大;
  • 在用各種多屬性決策方法進行分析評價時需要排除量綱的選用對決策或評估結果的影響;
  • 為了便于采用各種多屬性決策與評估方法進行評價’需要把屬性值表中的數值歸一化,即把表中數值均變換到 [ 0 , 1 ] \left [ 0,1 \right ] [0,1]區間上。

常見方法:

設原始的決策矩陣為 A = ( a i j ) m × n A=\left ( a_{ij} \right )_{m\times n} A=(aij?)m×n?,變化后的決策矩陣為 B = ( b i j ) m × n B=\left ( b_{ij} \right )_{m\times n} B=(bij?)m×n?

  • 標準化處理

    在實際問題中,不同變量的測量單位往往不同,為了消除量綱效應,使每個變量都具有同等的表現力,數據分析中常對數據進行標準化處理,即
    b i j = a i j ? μ j s j , i = 1 , . . . , m , j = 1 , . . . , n b_{ij}=\frac{a_{ij}-\mu_{j}}{s_j},i=1,...,m,j=1,...,n bij?=sj?aij??μj??,i=1,...,m,j=1,...,n
    其中 μ j = 1 m ∑ i = 1 m a i j \mu_{j}=\frac{1}{m}\sum_{i=1}^{m}a_{ij} μj?=m1?i=1m?aij?表示第 j j j列均值, s j = 1 m ? 1 ∑ i = 1 m ( a i j ? u j ) 2 s_j=\sqrt{\frac{1}{m-1}\sum_{i=1}^{m}\left ( a_{ij}-u_j \right )^2} sj?=m?11?i=1m?(aij??uj?)2 ?表示第 j j j列方差, j = 1 , . . . , n j=1,...,n j=1,...,n

  • 線性變換

    • 效益型屬性
      b i j = a i j a j m a x , j = 1 , . . . , n b_{ij}=\frac{a_{ij}}{a_j^{max}},j=1,...,n bij?=ajmax?aij??,j=1,...,n
      其中 a j m a x a_j^{max} ajmax?表示決策矩陣 A A A j j j列的最大值。

    • 成本型屬性
      b i j = 1 ? a i j a j m a x , j = 1 , . . . , n b_{ij}=1-\frac{a_{ij}}{a_j^{max}},j=1,...,n bij?=1?ajmax?aij??,j=1,...,n

  • 標準0-1變換

    • 效益型屬性
      b i j = a i j ? a j m i n a j m a x ? a j m i n , j = 1 , . . . , n b_{ij}=\frac{a_{ij}-a_j^{min}}{a_j^{max}-a_j^{min}},j=1,...,n bij?=ajmax??ajmin?aij??ajmin??,j=1,...,n
      其中 a j m a x , a j m i n a_j^{max},a_j^{min} ajmax?,ajmin?分別表示初始的決策矩陣 A A A j j j列的最大值、最小值。

    • 成本型屬性
      b i j = a j m a x ? a i j a j m a x ? a j m i n , j = 1 , . . . , n b_{ij}=\frac{a_j^{max}-a_{ij}}{a_j^{max}-a_j^{min}},j=1,...,n bij?=ajmax??ajmin?ajmax??aij??,j=1,...,n

  • 區間屬性變換

    對于區間屬性,設第 j j j個屬性最優屬性區間為 [ a j 0 , a j ? ] \left [ a_j^0,a_j^* \right ] [aj0?,aj??],無法容忍下限為 a j l b a_j^{lb} ajlb?,無法容忍上限為 a j u b a_j^{ub} ajub?,則
    b i j = { 1 ? ( a j 0 ? a i j ) ( a j 0 ? a j l b ) ,? a j l b ≤ a i j < a j 0 1 ,? a j 0 ≤ a i j ≤ a j ? 1 ? ( a i j ? a j ? ) ( a j u b ? a j ? ) ,? a j ? < a i j ≤ a j u b 0 ,? o t h e r b_{ij}=\begin{cases} 1-\frac{\left ( a_j^0-a_{ij} \right ) }{\left ( a_j^0-a_j^{lb} \right )} & \text{ , } a_j^{lb}\le a_{ij}< a_j^0 \\ 1& \text{ , } a_j^{0}\le a_{ij}\le a_j^* \\ 1-\frac{\left ( a_{ij}-a_{j}^* \right ) }{\left ( a_j^{ub}-a_j^{*} \right )}& \text{ , } a_j^*< a_{ij}\le a_j^{ub} \\ 0& \text{ , } other \end{cases} bij?=????????????????1?(aj0??ajlb?)(aj0??aij?)?11?(ajub??aj??)(aij??aj??)?0??,?ajlb?aij?<aj0??,?aj0?aij?aj???,?aj??<aij?ajub??,?other?

  • 向量規范化
    b i j = a i j ∑ i = 1 m a i j 2 , j = 1 , . . . , n b_{ij}=\frac{a_{ij}}{\sqrt{\sum_{i=1}^{m}a_{ij}^2} },j=1,...,n bij?=i=1m?aij2? ?aij??,j=1,...,n
    規范化后,各方案同一屬性值的平方和為1。

代碼示例

? ?假設現有5個高校的數據,需要根據這些數據對高校進行評估。

人均專著/(本/人)生師比科研經費/(萬元每年)逾期畢業率/%
10.1550004.7
20.2660005.6
30.4770006.7
40.910100002.3
51.224001.8

? ?對上面的4個指標進行分析,人均專著、科研經費屬于效益型指標,逾期畢業率屬于成本型指標,而生師比屬于區間型指標,假設生師比最優區間為 [ 5 , 6 ] \left [ 5,6 \right ] [56],無法容忍下限為2,無法容忍上限為12,需要對其中一些指標進行轉換。給出python代碼如下:

import numpy as npA = np.array([[0.1, 5, 5000, 4.7],[0.2, 6, 6000, 5.6],[0.4, 7, 7000, 6.7],[0.9, 10, 10000, 2.3],[1.2, 2, 400, 1.8]])# 師生比的最優區間
opt_range = [5, 6]
# 師生比的容忍上下限
to_lb = 2
to_ub = 12# 屬性的權向量
omega = np.array([0.2, 0.3, 0.4, 0.1])# 對師生比進行區間屬性進行規范化處理
def range_trans(param, opt_range, lb, ub):""":param param: 待轉換的元素值:param opt_range: 最優區間:param lb: 無法容忍下限:param ub: 無法容忍上限:return:"""if lb <= param < opt_range[0]:return 1 - (opt_range[0] - param)/(opt_range[0] - lb)elif param <= opt_range[1]:return 1elif param <= ub:return 1 - (param - opt_range[1])/(ub - opt_range[1])else:return 0# Press the green button in the gutter to run the script.
if __name__ == '__main__':# 方案數m,屬性數nm, n = np.shape(A)# 對師生比作區間變換for i in range(m):A[i, 1] = range_trans(A[i, 1], opt_range, to_lb, to_ub)# 對逾期畢業率做標準0-1變換a4_max = max(A[:, 3])a4_min = min(A[:, 3])for i in range(m):A[i, 3] = (a4_max - A[i, 3])/(a4_max - a4_min)# 屬性進行向量規范化B = np.zeros([m, n])for i in range(m):for j in range(n):B[i, j] = A[i, j] / np.linalg.norm(A[:, j])# 構建加權規范陣omega_mat = np.tile(omega, (m, 1))C = B * omega_mat# 求正、負理想解。前兩個屬性以及第三個max_vec = np.amax(C, axis=0)min_vec = np.amin(C, axis=0)# 計算各方案與正、負理想解之間的距離res_array = np.zeros([m])for i in range(m):d0 = np.linalg.norm(max_vec - C[i, :])d1 = np.linalg.norm(min_vec - C[i, :])res_array[i] = d1/(d0 + d1)print(res_array.tolist())

運行結果如下:

[0.5240156414355697, 0.5725615802335773, 0.61086314578445, 0.7027067250301631, 0.32916727350419983]

從運行結果上來看,數值越大說明對該高校的評估結果越好,具體的排名為 [ 4 , 3 , 2 , 1 , 5 ] \left [ 4,3,2,1,5 \right ] [4,3,2,1,5],因此第4所高校總體來說評價最好。

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

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

相關文章

Linux基礎開發工具—vim

目錄 1、vim的概念 2、vim的常見模式 2.1 演示切換vim模式 3、vim命令模式常用操作 3.1 移動光標 3.2 刪除文字 3.3 復制 3.4 替換 4、vim底行模式常用命令 4.1 查找字符 5、vim的配置文件 1、vim的概念 Vim全稱是Vi IMproved&#xff0c;即說明它是Vi編輯器的增強…

Skyvern AI 實現 瀏覽器爬蟲+自動化工具

一、前言 本文Skyvern是一款功能強大的模擬瀏覽器自動化操作爬蟲軟件。它通過模擬人類在瀏覽器中的操作&#xff0c;實現對目標網站的自動化訪問、數據抓取和處理。Skyvern支持多種編程語言&#xff0c;用戶可根據需求編寫腳本&#xff0c;實現高效的數據采集。同時&#xff0c…

Spring Boot + MyBatis + MySQL:快速搭建CRUD應用

一、引言 1. 項目背景與目標 在現代Web開發中&#xff0c;CRUD&#xff08;創建、讀取、更新、刪除&#xff09;操作是幾乎所有應用程序的核心功能。本項目旨在通過Spring Boot、MyBatis和MySQL技術棧&#xff0c;快速搭建一個高效、簡潔的CRUD應用。我們將從零開始&#xff…

【Academy】OAuth 2.0 身份驗證漏洞 ------ OAuth 2.0 authentication vulnerabilities

OAuth 2.0 身份驗證漏洞 ------ OAuth 2.0 authentication vulnerabilities 1. 什么是 OAuth&#xff1f;2. OAuth 2.0 是如何工作的&#xff1f;3. OAuth 授權類型3.1 OAuth 范圍3.2 授權代碼授權類型3.3 隱式授權類型 4. OAuth 身份驗證4.1 識別 OAuth 身份驗證4.2 偵察OAuth…

C#常用的循環語句

在C#中&#xff0c;循環是一種控制結構&#xff0c;用于重復執行一組語句直到滿足特定條件。C#提供了幾種循環結構&#xff0c;包括for循環、while循環、do-while循環和foreach循環。每種循環都有其特定的用途和場景。下面我將逐一介紹這些循環的用法。 一、C#循環類型 1. fo…

C語言(23)

字符串函數 11.strstr函數 1.1函數介紹&#xff1a; 頭文件&#xff1a;string.h char *strstr ( const char * str1,const char *str2); 作用&#xff1a;在一個字符串&#xff08;str1&#xff09;中尋找另外一個字符串&#xff08;str2&#xff09;是否出現過 如果找到…

Vue3實戰學習(Vue3的基礎語法學習與使用(超詳細))(3)

目錄 &#xff08;1&#xff09;Vue3工程環境準備、項目基礎腳手架搭建詳細教程。(博客鏈接) &#xff08;2&#xff09;Vue3的基礎語法學習與使用。 &#xff08;1&#xff09;"{{}}"綁定數據。 <1>ref()函數定義變量——綁定數據。 <2>reactive({...})…

vtkDepthSortPolyData 根據相機視圖方向對多邊形數據進行排序

1. 作用 在 3D 渲染中&#xff0c;透明對象的渲染順序非常重要。如果透明對象的渲染順序不正確&#xff0c;可能會導致錯誤的視覺效果&#xff08;例如&#xff0c;遠處的透明對象遮擋了近處的透明對象&#xff09;。vtkDepthSortPolyData 通過對多邊形數據進行深度排序&#…

【2025力扣打卡系列】0-1背包 完全背包

堅持按題型打卡&刷&梳理力扣算法題系列&#xff0c;語言為python3&#xff0c;Day5 0-1背包【目標和】 有n個物品&#xff0c;第i個物品的體積為w[i], 價值為v[i]。每個物品至多選一個&#xff0c;求體積和不超過capacity時的最大價值和常見變形 至多裝capacity&#x…

MyBatis-Plus 分頁查詢接口返回值問題剖析

在使用 MyBatis-Plus 進行分頁查詢時,很多開發者會遇到一個常見的問題:當分頁查詢接口返回值定義為 Page<T> 時,執行查詢會拋出異常;而將返回值修改為 IPage<T> 時,分頁查詢卻能正常工作。本文將從 MyBatis-Plus 的分頁機制入手,詳細分析這一問題的根源,并提…

《人月神話》:軟件工程的成本寓言與生存法則

1975年&#xff0c;Fred Brooks在《人月神話》中寫下那句振聾發聵的斷言——“向進度落后的項目增加人力&#xff0c;只會讓進度更加落后”——時&#xff0c;他或許未曾料到&#xff0c;這一觀點會在半個世紀后的人工智能與云原生時代&#xff0c;依然如達摩克利斯之劍般懸在每…

三維建模與視頻融合(3D-Video Integration)技術初探。

三維建模與視頻融合&#xff08;3D-Video Integration&#xff09;是一種將虛擬三維模型無縫嵌入實拍視頻場景的技術&#xff0c;廣泛應用于影視特效、增強現實&#xff08;AR&#xff09;、游戲開發、廣告制作 、視頻監控 等領域。 一、技術核心流程 三維建模與動畫 使用工具…

SpringMVC-全局異常處理

文章目錄 1. 全局異常處理2. 項目異常處理方案2.1 異常分類2.2 異常解決方案2.3 異常解決方案具體實現 1. 全局異常處理 問題&#xff1a;當我們在SpingMVC代碼中沒有對異常進行處理時&#xff0c;三層架構的默認處理異常方案是將異常拋給上級調用者。也就是說Mapper層報錯會將…

2025 cv2.imwrite存儲帶有中文路徑

一、前言 cv使用的更多一些&#xff0c;不過cv讀取和寫入帶有中文路徑的圖片會報錯有寫出亂碼。 以下代碼是從視頻中獲取第2幀保存在中文文件夾下的實例&#xff1a; cap cv2.VideoCapture("***.mp4")cap.set(cv2.CAP_PROP_POS_FRAMES, 2)ret, framecap.read()cv2…

在 CentOS 上,常用幾種方法來確保 Python 腳本在斷開終端后繼續運行

在 CentOS 上&#xff0c;你可以使用以下幾種方法來確保 Python 腳本在斷開終端后繼續運行&#xff1a; 1. 使用 nohup 命令 nohup 命令可以讓進程在終端關閉后繼續運行。 nohup python main.py > output.log 2>&1 &nohup&#xff1a;忽略掛斷信號&#xff0c…

blazemeter工具使用--用于自動生成jmeter腳本并進行性能測試

1、安裝blazemeter&#xff08;網上有很多詳情的教程&#xff09; 2、開始錄制&#xff1a;設置號你的文件名稱后開始錄制 3、錄制完成后保存為jmeter(jmx)文件 4、在jmeter中打開文件 5、添加一個后置處理器&#xff1a;查看結果樹&#xff0c;后運行看看能否成功&#xf…

6-langchang多模態輸入和自定義輸出

6-langchang多模態輸入和自定義輸出 多模態數據輸入urlbase64url list工具調用自定義輸出: JSON, XML, YAML如何解析 JSON 輸出json如何解析xmlYAML解析器多模態數據輸入 這里我們演示如何將多模態輸入直接傳遞給模型。我們目前期望所有輸入都以與OpenAI 期望的格式相同的格式…

【C#實現手寫Ollama服務交互,實現本地模型對話】

前言 C#手寫Ollama服務交互&#xff0c;實現本地模型對話 最近使用C#調用OllamaSharpe庫實現Ollama本地對話&#xff0c;然后思考著能否自己實現這個功能。經過一番查找&#xff0c;和查看OllamaSharpe源碼發現確實可以。其實就是開啟Ollama服務后&#xff0c;發送HTTP請求&a…

【C#學習筆記02】基本元素與數據類型

引言 深入了解C語言的基本元素、計算機存儲器結構、常量與變量的概念以及數據類型。這些內容是C語言編程的基礎&#xff0c;掌握它們對于編寫高效、可靠的嵌入式程序至關重要。 1.C語言的基本元素 ?編程語言的發展離不開自然語言&#xff0c;所以編程語言的語法和詞匯也是由…

ESP8266TCP客戶端(單連接TCP Client)

單連接TCP Client 電腦作為服務器&#xff0c;8266作為客戶端 1.配置WiFi模式 ATCWMODE3 //softAPstation mode 相應&#xff1a;ok 2.連接路由器 ATCWJAP“SSID”&#xff0c;“password” //SSID就是wifi的名字&#xff0c; password WIFI密碼 響應&#xff…