【理想解法学习笔记】

目录

    • 理想解法
      • 原理简介
      • 算法步骤
      • 属性值规范化方法
      • 代码示例

理想解法

原理简介

 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=12m) 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=a11ai1am1a1jaijamja1nainamn
(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=1maij2 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(cijcj)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(cijcj0)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+sisi0,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=sjaijμ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=m1i=1maij表示第 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=m11i=1m(aijuj)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=ajmaxaij,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=1ajmaxaij,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=ajmaxajminaijajmin,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=ajmaxajminajmaxaij,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(aj0ajlb)(aj0aij)11(ajubaj)(aijaj)0 , ajlbaij<aj0 , aj0aijaj , aj<aijajub , 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=1maij2 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.mzph.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…