数学建模--国赛备赛---TOPSIS算法

目录

1.准备部分

1.1提交材料

1.2MD5码相关要求

2.TOPSIS算法

2.1算法概述

2.2基本概念

2.3算法核心思想

2.4拓展思考

3.适用赛题

3.1适用赛题说明

3.2适用赛题举例

4.赛题分析

4.1指标的分类

4.2数据预处理

4.2.1区间型属性的变换

4.2.2向量规范化

4.3数据加权处理

4.4求解的相关数据含义

4.5求解过程的再次复盘

5.代码求解

5.1数据导入

5.2区间型数据变换

5.3向量规范化

5.4加权处理后求得结果

5.5完整代码


1.准备部分

1.1提交材料

数学建模论文和相应的支撑材料,这个数学建模论文pdf提交,支撑材料尽量压缩(zip格式),命名这个支撑材料合理即可;

1.2MD5码相关要求

记得去阅读这个MD5码的相关要求,这个不可以随意更改,必须严格的按照要求;

2.TOPSIS算法

2.1算法概述

2.2基本概念

正理想解和负理想解的相关说明,在这个TOPSIS算法里面,我们那这个例子来进行说明,这个里面一共就只有两个指标,这个盗窃成功次数里面的最大值我们叫做这个指标的正理想解即为4,同理我们既可以得到这个盗窃总价值里面的正理想解就是4,负理想解就是这个指标里面的最小值,分别是这个4,2;上面的完成之后,我们把两个指标的正理想解作为一个指标在二维的坐标平面里面画出来,把这个负理想解同样画出来;

可能有些同学会有疑问,问什么这个负理想解不可缺少,因为这个里面只能有一个盗圣,如果是只会绘制出来这个正理想解和其他的四个坐标,这个里面的张三和李四到达这个正理想解点的距离是一样的,这个时候我们无法评选出来,但是有了这个负理想解之后,这个负理想解的顶点到达这两个点的距离就不一样,我们就可以依据这个那个点到达这个负理想解的距离更加远去进行判断这个谁是盗圣,因为那个店距离这个负理想解越近,就说明这个点距离这个差的标准的越近,这个就不会复合盗圣的要求(在比较的情况下看来);

2.3算法核心思想

上面我们已经介绍了这个正理想解和负理想解,什么是真正的TOPSIS,这个算法的核心思想又是什么,我们介绍一下:实际上就是一句话;

根据这个不同的已知点到达这个正理想解和负理想解的距离进行判断的;

2.4拓展思考

我们上面的这个指标只有两个,而且都是正面的,无论是这个盗窃成功的次数还是这个盗窃的总价值,这个指标都是越大越可以证明这个人越接近盗圣,但是如果出现这个多个指标的情况,我们的这个二维的平面图形就显得捉襟见肘了,而且这个负面指标,例如这个盗窃失败的次数如果也是作为一个指标,我们又应该如何考虑这个问题;

这个里面的盗窃的总价值显示的就是万元作为单位,但是如果我们把这个单位给去掉,这个表格里面的数据就不在一个数量级上面了,我们这个时候如果直接进行运算,这个和盗窃的金额相比之下,这个盗窃成功的次数就显得很小,我们就会忽略不计,否则这个就会增加我们的这个计算量,我们这个时候就无法让这个盗窃成功的次数发挥它的作用;

以上的这些问题或许你觉得讲的很有道理,但是这个究竟如何解决,你可能还是没有思路,不需要着急,在下面的这个赛题的解析部分,我们将会通过在题目里面遇到这些问题并且给予你们相应的解决方案;

3.适用赛题

3.1适用赛题说明

首先我们的这个问题的评价是和客观的,还记得之前介绍的这个层次分析法的思路吗,这个就不是很客观,需要我们进行这个一致性检验之类的,因为这个对应的权重以及分数就是我们自己主观臆断的,但是这个TOPSIS算法就是很客观;

3.2适用赛题举例

我们接下来对于这个赛题的介绍,就是以这个赛题作为案例的,这个里面囊括了很多的情况,例如我们上面介绍的这个不仅仅是只有两个指标,而且不同的指标的这个数量级也是不一样的,而且每一个指标并不都是越大越好,这个下面我们还会进行分析;

4.赛题分析

4.1指标的分类

我们把上面的这4个指标划分为了下面的三个不同的类型,效益型数据,成本型数据,以及这个区间型数据,很好理解不再赘述;

4.2数据预处理

4.2.1区间型属性的变换

这个就是使用的下面的这个图片里面的公式,我们的区间行变换针对的就是区间性的数据,这个生师比就是这个类型的数据,因此这个区间型属性的变换就是处理的生师比这个指标;

具体的处理方法就是直接套用这个公式,其中这个里面需要有无法容忍的下限,和无法容忍的上限,还有一个就是最优的属性区间,这个上限和下限就是不合理的比例的边界情况;

在这个最有区间里面的数值,我们记作1,超出这个上限和下限的,我们记作0,在这个上限下面,下限上面的数据,我们需要套用公式进行处理,aij就是我们已知的,需要进行处理的数据;

第一个和第二个院校都是在这个最优区间里面的,我们直接记作1,第五个院校低于这个下限,我们记作0,这个34院校就需要进行计算了;

为什么是a2,因为这个生师比在这个指标里面是属于第二个指标7这个数据需要带入分段函数的第三个进行计算,10也是需要带入第三个函数进行运算;

4.2.2向量规范化

我们的向量规范化就是在进行这个数量级的统一,经过这个处理之后达到的效果就是这个所有的数据全部位于0~1之间,我们的向量规范化是在区间型属性变换的基础上面进行的,而不是在原始的数据上面进行的,实际上只有师生比经过了区间型属性变换,其他的这个数据进行向量化规范的时候使用的还是原始的数据;

这个计算的方法公式的分母就是这个指标的每一列数据的平方和再求得算术平方根,分子就是每一个表格里面的数据;

4.3数据加权处理

就是这个也是有权重的,只不过这个权重不像之前的这个层次分析法一样对于这个结果的影响很大,这个里面我们的权重合理即可;

例如这个0.2,0.3,0.4,0.1这个权重就是我们设置的,计算的话,例如这个上面的数据预处理之后的第一个数据0.0638直接乘以这个0.2即可得到这个权重处理之后的数据;

4.4求解的相关数据含义

我们基本思路韩式求每一个点到达这个正理想解和负理想解的距离,具体这个正理想解越大,这个效益就会越好,距离负理想解越远,这个结果也会越好(对于这个效益而言);

我们最后还要求解这个综合评价指数,这个公式我们进过变形就可以发现,这个就是TOPSIS算法的核心思想(根据这个分子分母的关系即可确定);

4.5求解过程的再次复盘

我们现实对于这个原始数据进行预处理,这个里面包括了区间型属性的变换,以及这个向量的规范化,然后对于这个处理之后的数据进行甲醛处理,最后求解距离带入求解指标,指标越大,说明这个院校教育质量就越好;

5.代码求解

5.1数据导入

5.2区间型数据变换

这个就是套公式,这个里面使用到了函数句柄,这个东西我自己也是第一次见到,但是这个并不是很难理解,这个可以建立在编程C语言的逻辑判断的上面进行理解,蓝色的点表示这个是一句话,只不过我们写在多行上面;

@就是函数句柄的标志,这个下面是有3行,代表的就是分段函数的3种情况,你可能会好奇,这个分段函数不是有4种情况嘛,为什么这个函数句柄里面只有三种,因为这个0自动就是一种结果

例如这个@下面的第一行,后半部分实际上就是区间,如果在这个区间里面,我们的这一行的  表达式的就会执行,其他行的逻辑判断就是0,如果这个上面显示的三个情况都不符合,这个逻辑判断的结果都是0,那么这个a2就是0,正好对应我们的分段函数的第四种情况;

函数句柄里面实际上就有这个最优区间的变量名字,相关参数还包括了最大上限和最小下限,最后一行就是利用这个函数句柄对于这个生师比进行变换,就是把第二列的所有的数据传递进去作为函数的参数,得到新的变换之后的数据;

5.3向量规范化

这个两个点就表示所有的数据,我们这个里面使用的就是循环,我拿一个进行说明,就例如第一次循环的时候这个j=1,我们这个时候的循环语句就是b(:,1)表示的就是第一行第一列的数据和第二行第一列的数据,第三行第一列的数据,以及第四行第一列的数据,第五行第一列的数据,分别对应各自的规范化处理之后的结果;

5.4加权处理后求得结果

我们这个里面使用到了repmat函数,这个函数实际上的作用就是矩阵的复制,第三个参数1表示这个矩阵的复制是在列的方向上进行的,w就是我们自己设置的权重这个矩阵,m是我们之前求解的这个原始数据的行数和列数(在整个程序的最开始部分);

因为这个里面的正理想解和负理想解有不同类型的数据,例如这个延毕率就是越小越好,其他的各项指标都是越大越好的,我们进行其他的指标处理的时候,正理想解直接取得这个最大值即可,但是这个延毕率的最小值才是正理想解,在求解负理想解的时候也是如此;

接下来我们利用循环求解这个到达正理想解,负理想解的距离,带入这个公式得到综合评价指数f最后使用sort函数,加上这个descend参数表示这个结果是按照降序进行排列的,我们就可以得到这几个院校的最终排名;

5.5完整代码


clc, clear


% 输入原始数据
a=[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];
[m,n]=size(a);      % m是行数(方案数),n是列数(属性数)



%区间型属性变换

% 定义函数句柄b2,相当于在此定义了一个函数
% @(qujian,lb,ub,x)意味着调用b2时,需要给它括号里的四个参数
% (x>=lb & x<qujian(1))是逻辑与,如果&符号左右两边的条件都满足,则为1,否则为0
% 四种情况是互斥的,所以可以乘以各自区间条件逻辑计算后相加
a2=@(qujian,lb,ub,x)...
(1-(qujian(1)-x)./(qujian(1)-lb)).*(x>=lb & x<qujian(1))...
+(x>=qujian(1) & x<=qujian(2))...
+(1-(x-qujian(2))./(ub-qujian(2))).*(x>qujian(2) & x<=ub); 

% 设最优区间等参数
qujian=[5,6]; lb=2; ub=12;
a(:,2)=a2(qujian,lb,ub,a(:,2));     % 对生师比进行变换



%向量规范化

for j=1:n
    b(:,j)=a(:,j)/norm(a(:,j));  %向量规划化
end



%加权求解

w=[0.2 0.3 0.4 0.1];  
ww = repmat(w,m,1);     % repmat复制得到m个权重矩阵w,在矩阵下面排列
c=b.*ww;      %求加权后的矩阵;

% 注意正理想解和负理想解的定义
% max(c)是包含矩阵c每一列的最大值的行向量
Cstar=max(c);    %求正理想解
Cstar(4)=min(c(:,4))  %属性4为成本型的!!!专门修改它
C0=min(c);       %q求负理想解
C0(4)=max(c(:,4))        %属性4为成本型的!!!专门修改它

for i=1:m
    Sstar(i)=norm(c(i,:)-Cstar);  %求到正理想解的距离
    S0(i)=norm(c(i,:)-C0);      %求到负理想的距离
end

% 综合评价指数f
f=S0./(Sstar+S0);
[sf,ind]=sort(f,'descend')       % 'descend'表示降序排序,得分高的放在第一位

相关推荐

  1. 蓝桥杯复习——基础算法

    2024-07-20 21:50:03       33 阅读
  2. 蓝桥杯复习——数据结构

    2024-07-20 21:50:03       27 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-20 21:50:03       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-20 21:50:03       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-20 21:50:03       45 阅读
  4. Python语言-面向对象

    2024-07-20 21:50:03       55 阅读

热门阅读

  1. Go语言入门之函数

    2024-07-20 21:50:03       18 阅读
  2. swift小知识点

    2024-07-20 21:50:03       14 阅读
  3. 项目中MyBatis要引入的内容

    2024-07-20 21:50:03       16 阅读
  4. ccf-csp认证--仓库规划

    2024-07-20 21:50:03       17 阅读
  5. Kraken代码阅读(一)

    2024-07-20 21:50:03       15 阅读
  6. Oracle数据库 v$access

    2024-07-20 21:50:03       14 阅读
  7. ZooKeeper 部署

    2024-07-20 21:50:03       17 阅读
  8. 【Webpack】提高打包速度

    2024-07-20 21:50:03       15 阅读
  9. Python(re模块的具体使用)

    2024-07-20 21:50:03       19 阅读
  10. 2024 暑假友谊赛 2

    2024-07-20 21:50:03       19 阅读