【数学建模】优劣解距离法Topsis模型(含MATLAB代码)

2024-04-21 22:44

本文主要是介绍【数学建模】优劣解距离法Topsis模型(含MATLAB代码),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

TOPSIS法,全称 Technique for Order Preference by Similarity to an Ideal Solution,是由C.L.Hwang和K.Yoon于1981年首次提出的 。这是一种多目标决策分析中常用的有效方法,也被称作优劣解距离法 。 TOPSIS法的基本原理是通过检测评价对象与最优解、最劣解的距离来进行排序。如果一个方案距离理想最优解越近,距离最劣解越远,我们就认为这个方案更好 。

TOPSIS法的主要适用场景包括:

土地利用规划:在土地资源管理和规划中,TOPSIS法可以用来评估不同土地利用方案的优劣,帮助决策者选择最佳的土地利用策略 。

物料选择评估:在供应链管理和物料采购中,TOPSIS法可以用来评估不同供应商提供的物料质量,帮助企业选择性价比最高的物料 。

项目投资:在金融管理和投资决策中,TOPSIS法可以用来评估不同投资项目的风险和收益,帮助投资者选择最有利的投资方案 。

医疗卫生:在医疗管理和健康政策制定中,TOPSIS法可以用来评估不同治疗方案的效果,帮助医生和患者选择最佳的治疗方案。

指标类型:

极大型(效益型)期望取值越大越好
极小型期望取值越小越好
中间型期望取值为适当的中间值最好
区间型期望取值落在某一个确定的区间内最好

一致化处理(正向化):所谓一致化处理就是将评价指标的类型进行统一;使得表中任意属性下性能越优的方案变换后的属性值越大(极大型)。

无量纲化处理:不同指标,不同单位。

归一化:不同指标,不同数值大小。

构造计算评分公式:

TOPSIS法符号说明:

设:多属性决策方案集A={a1,a2,……,am},即有m个可行方案;

  衡量方案优劣的属性变量(指标)为x1,x2,……,xn,即有n个评价指标这时方案集A中的方案ai(i=1,2,……,m)的n个属性值构成了向量[ai1,ai2,……,ain]它作为n维空间中的一个点,则每个方案依照其各项指标的值就对应n维空间中一个坐标点。

举个栗子:以下是五所高校(ai)的基本情况,我们要根据“人均专著”(x1)、“逾期毕业率”(x2)两个方面来为这五所高校进行一个排名。

序号人均专著/(本/人)逾期毕业率/%
10.14.1
20.35.1
30.46.8
40.80.3
51.21.7

正理想解C+是设想各指标属性都达到最满意值的解[1.2,0.3]

负理想解C-是设想各指标属性都达到最不满意值的解 [0.1,6.8]

在n维空间中,算出方案集D中的各备选方案ai与正理想解C+和负理想解C-的距离:

d*:备选方案di(i=1,2,……,m)到正理想解的距离;

d-:备选方案di(i=1,2,……,m)到负理想解的距离。

理论介绍:

第一步:将n个评价指标x1,x2,……,xn,看成n条坐标轴,由此可以构造出一个n维空间,则每个方案依照其各项指标的数据就对应n维空间中每一个坐标点。

第二步:针对各项指标从所有待评价方案中选出该指标的最优值(正理想解,对应最有坐标点)和最差值(负理想解,对应最差标点),依次求出各个待评价方案的坐标点分别最优坐标点和最差坐标点的距离d*和d-。

第三步:构造相对贴进度(评价参考值)f:

则f值越大代表评价结果越优。

算法步骤:

(1)构造决策矩阵A=(aij)m×n,每一列是一个评价指标,每一行是一个待评价方案;

为了去掉量纲的影响,为了方便比较,做规范化处理得到B=(bij)m×n,其中:

注:该规范化(向量归一化法)处理后,各评价方案的同一评价指标的平方和为1.

(2)根据每个评价指标对评价结果的贡献程度不同,指定不同的权重:

W=[w1,w2,……,wn],将B的第j列乘以其权重wj,得到带权的规范矩阵C=(cij)m×n。

(3)确定正理想解C+和负理想解C-:

C+=[c1+,c2+,……,cn+];C-=[c1-,c2-, ……,cn-];

(4)计算每个待评价方案到正理想解和负理想解的距离:

 (5)计算每个待评价方案的相对贴进度(评价参考值):

再将从大到小排列 ,得到各备选方案的优先序。

案例分析:以下是五所高校的基本情况,我们要根据“人均专著”、“师生比”、“科研经费”、“逾期毕业率”四个方面围着五所高校进行一个评估。

序号人均专著/(本/人)师生比科研经费/(万元/年)逾期毕业率/%
10.1450004.1
20.3570005.1
30.4960006.8
40.811100002.6
51.228001.7

第一步:导入数据、数据预处理、构建决策矩阵

先把数据规范化,规范化的作用:

a.正向化  b.无量纲化  c.归一化

方法

法1.线性变换法:将原始决策矩阵A =(aij)m×n,进行线性比例变换

    若x为极大型(效益型)属性:

    若x为极小型(成本型)属性: 

注:经过该变换之后的bij最优值不一定是1,最差值不一定为0.

0<=bij<=1;所有指标均为正向指标。

法二、极差变换法(使变换后的每个属性的最优值为1,最差为0)

          若x为极大型(效益型)属性:          若x为极小型(成本型)属性:

法三、区间型属性的变换:若x区间型属性

           假设给定最优属性区间为[c,d], 为无法容忍下限,为无法容忍下限

若以该案列为例:假设2某地高校师生比的最有区间为[5,9],且a2-=1;a2*=12.

序号师生比
14
25
39
411
52

数据处理——>

序号师生比变换后的师生比
140.75
251
391
4110.3333333
520.25

法四、中间属性的变换

           若x为中间型属性,且假设最优值为k,那么:

 比如:

生产线零件长/cm
112
211
313
415

假设零件在12cm为最佳,则处理后的矩阵为

生产线零件长/cm变换后的零件长/cm
1121
2111/3
3132/3
4150

法五、向量归一化(使得每列平方和为1)

 注:向量归一标准化后:

1、0<=bij<=1;

2、正、负向指标的方向没有发生变化

法六、标准样本变换法(大数定律):

 

序号人均专著/(本/人)师生比科研经费/(万元/年)逾期毕业率/%
10.1450004.1
20.3570005.1
30.4960006.8
40.811100002.6
51.228001.7

称B=(bij)m×n 为向量标准样本变换矩阵。

注:经标准样本变换后标准化矩阵的样本均值为0,方差为1.

先对第二列进行区间型属性的变换,再对所有属性进行规范化(向量归一法)

序号人均专著/(本/人)师生比科研经费/(万元/年)逾期毕业率/%
10. 0653720450.453413450.3445082140.412670364
20. 1961161350.6045512660. 48231150.513321672
30. 261488180.6045512660. 4134098570.684428896
40. 522976360.2015170890. 6890164280.261693401
50. 7844645410.151137817 0. 055121314 0.171107224

 

确定正理想解和负理想解

正理想解C+=[0.235339362,0.1209102531,0.275606571,0.017110722]

负理想解C-=[0.019611614,0.030227563,0.022048526,0.06844289]

计算各方案到正理想解和负理想解的距离

d*:备选方案ai(i=1,2,……,m)到正理想解的距离;

d-:备选方案ai(i=1,2,……,m)到负理想解的距离

序号d*d-
10.2588927190.133388582
20.1978920460.198124257
30. 1985039370. 179510995
40. 112842220. 291592888
50. 2692861540. 22175088

计算各方案的相近贴进度 

序号fi排行
40.720988071
20.5002931842
30.4748780533
50.4515970594
10.3400329855

 在实际应用中,TOPSIS法因其简便、直观和易于理解的特性,已经被广泛应用于各个领域。然而,需要注意的是,TOPSIS法也有其局限性,比如对数据敏感性高、对样本容量的要求、以及对权重确定的主观性等问题 。因此,在使用TOPSIS法时,应结合实际情况和具体需求,合理考虑其适用性和局限性.

看代码部分:

%%  第一步:把数据复制到工作区,并将这个矩阵命名为X
% (1)在工作区右键,点击新建(Ctrl+N),输入变量名称为X
% (2)在Excel中复制数据,再回到Excel中右键,点击粘贴Excel数据(Ctrl+Shift+V)
% (3)关掉这个窗口,点击X变量,右键另存为,保存为mat文件(下次就不用复制粘贴了,只需使用load命令即可加载数据)
% (4)注意,代码和数据要放在同一个目录下哦,且Matlab的当前文件夹也要是这个目录。
clear;clc
load data_water_quality.mat
%% 注意:如果提示: 错误使用 load,无法读取文件 'data_water_quality.mat'。没有此类文件或目录。
% 那么原因是因为你的Matlab的当前文件夹中不存在这个文件
% 可以使用cd函数修改Matlab的当前文件夹
% 比如说,我的代码和数据放在了: D:第2讲.TOPSIS法(优劣解距离法)\代码和例题数据
% 那么我就可以输入命令:
% cd 'D:第2讲.TOPSIS法(优劣解距离法)\代码和例题数据'
% 也可以看我更新的视频:“更新9_Topsis代码为什么运行失败_得分结果怎么可视化以及权重的确定如何更加准确”,里面有介绍%%  第二步:判断是否需要正向化
[n,m] = size(X);
disp(['共有' num2str(n) '个评价对象, ' num2str(m) '个评价指标']) 
Judge = input(['这' num2str(m) '个指标是否需要经过正向化处理,需要请输入1 ,不需要输入0:  ']);if Judge == 1Position = input('请输入需要正向化处理的指标所在的列,例如第2、3、6三列需要处理,那么你需要输入[2,3,6]: '); %[2,3,4]disp('请输入需要处理的这些列的指标类型(1:极小型, 2:中间型, 3:区间型) ')Type = input('例如:第2列是极小型,第3列是区间型,第6列是中间型,就输入[1,3,2]:  '); %[2,1,3]% 注意,Position和Type是两个同维度的行向量for i = 1 : size(Position,2)  %这里需要对这些列分别处理,因此我们需要知道一共要处理的次数,即循环的次数X(:,Position(i)) = Positivization(X(:,Position(i)),Type(i),Position(i));% Positivization是我们自己定义的函数,其作用是进行正向化,其一共接收三个参数% 第一个参数是要正向化处理的那一列向量 X(:,Position(i))   回顾上一讲的知识,X(:,n)表示取第n列的全部元素% 第二个参数是对应的这一列的指标类型(1:极小型, 2:中间型, 3:区间型)% 第三个参数是告诉函数我们正在处理的是原始矩阵中的哪一列% 该函数有一个返回值,它返回正向化之后的指标,我们可以将其直接赋值给我们原始要处理的那一列向量enddisp('正向化后的矩阵 X =  ')disp(X)
end%% 第三步:对正向化后的矩阵进行标准化
Z = X ./ repmat(sum(X.*X) .^ 0.5, n, 1);
disp('标准化矩阵 Z = ')
disp(Z)%% 第四步:计算与最大值的距离和最小值的距离,并算出得分
D_P = sum([(Z - repmat(max(Z),n,1)) .^ 2 ],2) .^ 0.5;   % D+ 与最大值的距离向量
D_N = sum([(Z - repmat(min(Z),n,1)) .^ 2 ],2) .^ 0.5;   % D- 与最小值的距离向量
S = D_N ./ (D_P+D_N);    % 未归一化的得分
disp('最后的得分为:')
stand_S = S / sum(S)
[sorted_S,index] = sort(stand_S ,'descend')% A = magic(5)  % 幻方矩阵
% M = magic(n)返回由1到n^2的整数构成并且总行数和总列数相等的n×n矩阵。阶次n必须为大于或等于3的标量。
% sort(A)若A是向量不管是列还是行向量,默认都是对A进行升序排列。sort(A)是默认的升序,而sort(A,'descend')是降序排序。
% sort(A)若A是矩阵,默认对A的各列进行升序排列
% sort(A,dim)
% dim=1时等效sort(A)
% dim=2时表示对A中的各行元素升序排列
% A = [2,1,3,8]
% Matlab中给一维向量排序是使用sort函数:sort(A),排序是按升序进行的,其中A为待排序的向量;
% 若欲保留排列前的索引,则可用 [sA,index] = sort(A,'descend') ,排序后,sA是排序好的向量,index是向量sA中对A的索引。
% sA  =  8     3     2     1
% index =  4     3     1     2% % 注意:代码文件仅供参考,一定不要直接用于自己的数模论文中
% % 国赛对于论文的查重要求非常严格,代码雷同也算作抄袭
% % 视频中提到的附件可在售后群(购买后收到的那个无忧自动发货的短信中有加入方式)的群文件中下载。包括讲义、代码、我视频中推荐的资料等。
% % 关注我的微信公众号《数学建模学习交流》,后台发送“软件”两个字,可获得常见的建模软件下载方法;发送“数据”两个字,可获得建模数据的获取方法;发送“画图”两个字,可获得数学建模中常见的画图方法。另外,也可以看看公众号的历史文章,里面发布的都是对大家有帮助的技巧。
% % 购买更多优质精选的数学建模资料,可关注我的微信公众号《数学建模学习交流》,在后台发送“买”这个字即可进入店铺(我的微店地址:https://weidian.com/?userid=1372657210)进行购买。
% % 视频价格不贵,但价值很高。单人购买观看只需要58元,三人购买人均仅需46元,视频本身也是下载到本地观看的,所以请大家不要侵犯知识产权,对视频或者资料进行二次销售。
% % 如何修改代码避免查重的方法:https://www.bilibili.com/video/av59423231(必看)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

这篇关于【数学建模】优劣解距离法Topsis模型(含MATLAB代码)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/924217

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

uva 10014 Simple calculations(数学推导)

直接按照题意来推导最后的结果就行了。 开始的时候只做到了第一个推导,第二次没有继续下去。 代码: #include<stdio.h>int main(){int T, n, i;double a, aa, sum, temp, ans;scanf("%d", &T);while(T--){scanf("%d", &n);scanf("%lf", &first);scanf

uva 10025 The ? 1 ? 2 ? ... ? n = k problem(数学)

题意是    ?  1  ?  2  ?  ...  ?  n = k 式子中给k,? 处可以填 + 也可以填 - ,问最小满足条件的n。 e.g k = 12  - 1 + 2 + 3 + 4 + 5 + 6 - 7 = 12 with n = 7。 先给证明,令 S(n) = 1 + 2 + 3 + 4 + 5 + .... + n 暴搜n,搜出当 S(n) >=

uva 11044 Searching for Nessy(小学数学)

题意是给出一个n*m的格子,求出里面有多少个不重合的九宫格。 (rows / 3) * (columns / 3) K.o 代码: #include <stdio.h>int main(){int ncase;scanf("%d", &ncase);while (ncase--){int rows, columns;scanf("%d%d", &rows, &col

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

图神经网络模型介绍(1)

我们将图神经网络分为基于谱域的模型和基于空域的模型,并按照发展顺序详解每个类别中的重要模型。 1.1基于谱域的图神经网络         谱域上的图卷积在图学习迈向深度学习的发展历程中起到了关键的作用。本节主要介绍三个具有代表性的谱域图神经网络:谱图卷积网络、切比雪夫网络和图卷积网络。 (1)谱图卷积网络 卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,即F{f*g}