时间

2020年5月4日

组别

数学建模

姓名

Zkaisen

这一周我主要学习了TOPSIS法即优劣解距离向量法。

1.AHP的局限性

前两周主要学习了层次分析法,层次分析法存在这样一些局限性:

(1)层次分析法主观性很强,我们建模过程中判断矩阵都是自己手动填写的。

(2)层次分析法方案层不能太多,太多的话,构建的判断矩阵很可能不能通过一致性检验。而且随机一致性指标RI表中n也只给到了15。

(3)层次分析法是根据成对比较法和1~9尺度表构建判断矩阵得到数据的,对于一些有已知数据题目,层次分析法是不能很好利用原始数据的。

2.TOPSIS优点

针对AHP的上述局限性,学习TOPSIS可以弥补层次分析法的一些缺点:

(1)优劣解距离法可以充分利用原始数据信息,且其结果能充分反应各评价方案与最优方案的接近程度。

(2)对样本容量没有严格限制,数据计算简单易行,无需数据检验。(topsis法适用于两个以上)

3.Topsis法简介

1981年,C.L.Hwang和K.Yoon首次提出了Topsis,全称Technique for Order Preference by Similarity to an Ideal Solution,可翻译为逼近理想解排序法,国内常称为优劣解距离法。它是一种常用的综合评价方法。

4.Topsis的基本过程

(1)原始矩阵正向化,得到正向化矩阵

a.指标类型

指标类型一般分为四种,极大型指标、极小型指标、中间型指标、  区间型指标。

极大型指标越大越好,极小型指标越小越好,中间型指标越接近中    间值越好,区间型指标落在区间内最好。

b.正向化的公式

正向化就是将原始数据指标都转化为极大型指标。

极小型——极大型:

当指标值中没有“0”时也可用公式:

中间型——极大型:(其中mid为中间值)

区间型——极大型:

注:M为距离区间最远的距离,即          当x在区间内时,正向化后的值为1;

当x小于区间下限a时,

当x大于区间上限b时,;

(2)对正向化矩阵标准化

标准化公式:

(3)计算得分并归一化

a.构造评分公式:

评分公式变形:

Topsis的思想:最优解即最大值,最劣解即最小值。

b.计算D+与D-:

定义最大值:Z+向量用于存放标准化矩阵中每一列的最大值

定义最小值:Z-向量用于存放标准化矩阵中每一列的最小值

定义第i个(i=1,2,...,n)个评价对象与最大值的距离:等于第i行每一个元素与其所在列的最大值的差的平方和的0.5次方

定义第i个(i=1,2,...,n)个评价对象与最大值的距离:等于第i行每一个元素与其所在列的最小值的差的平方和的0.5次方

c.计算未归一化的得分记为G

d.对得分进行归一化

5.问题思考

(1)为什么要进行正向化?

(2)为什么要进行标准化,标准化是为了消除量纲的影响,那么可不可以用下面的公式来实现?

(2)构造评分公式的含义,背后的思想

6.代码思路及实现

(1)通过软件Matlab实现

a.先根据每一步的公式理清思路

b.根据分析,使用for循环实现较为可行

(学习编程软件中for循环相关操作)

c.根据步骤分块实现不同的功能

d.代码编写过程中尽量使每一步结果都输出,这样当结果与预期

不符时方便纠错。并且可输入简单的数值对代码进行检验,查找错

误所在之处,进而修改完善。

e .找相关数据进行结果检验,验证结果的准确性。

(2)通过软件SPSS实现

a.论文中有可通过SPSS实现标准化,导入数据,进行相应操作后,标准化结果却与MATLAB中的结果不同。学习SPSS标准化,有两种不同的标准化方式,即z-score标准化和离差标准化。

b.默认的是z-score标准化。其公式不同于我们步骤中的公式。它是基于原始数据的均值(mean)和标准差(standard deviation)进行数据的标准化。将A的原始值x使用z-score标准化到x’。

步骤如下:

首先求出各变量(指标)的算术平均值(数学期望)xi和标准差si ;进行标准化处理:zij=(xij-xi)/si,其中zij为标准化后的值;xij为实际值。

最后将逆指标前的正负号对调。

z-score标准化后的变量值围绕0上下波动,大于0说明高于平均水平,小于0说明低于平均水平。

c.我们MATLAB中使用的公式是SPSS中标准化的规范化方法,也叫离差标准化,是对原始数据的线性变换,使结果映射到[0,1]区间。

可以通过SPSS的语法编辑窗口来编写代码实现TOPSIS(需要学习并掌握SPSS的基础语法才能实现代码的功能实现)

(3)MATLAB代码简单思路

所遇到的问题:

1.没有理解在论文6.2.2中先用算术平均数计算对应的平均值?

后来懂了,他是通过VISSIM软件汇总数据,取平均值的.

2.表4中处理后的数据是同趋化后的数据吧,可是我通过代码求出的数据却和论文中的不同,本以为是标准化方法不同的原因,可是我用SPSS进行标准化后的数据进行得分计算,结果仍然不一样。

3.虽然通过论文学习了Matlab相关知识,但实现不了学习的论文中的内容.

论文中的数据都是自己通过统计得到的。

总结:

1.不懂的地方多思考,多百度

2.遇到问题,多尝试,用不同的方法来测试验证结果

3.学习优秀论文要注重学其方法,不必拘泥于一些具体实现上

(因为具体的功能实现可能需要具体的环境)

Matlab代码

% TOPSIS法

% % 导入数据

% clear;clc;close all;%清屏,clc清空命令窗口,clear清空工作区,clos all清除图形

% 点击工作区右键,新建并为矩阵命名为X

% 把数据复制到工作区

% 在excel中复制数据,在回到Excel中右键,点击粘贴excel中的数据(ctrl+shift+V)

% 关掉这个窗口,右键另存,保存为mat文件

% (下次就不用复制粘贴了,只需要使用load命令即可加载数据)

%  load data_kaifangqian.mat

[r,c]=size(X)

Max_total=max(X)%每一列数据的最大值,它是一个行向量

Min_total=min(X)%每一列数据的最小值,它是一个列向量

B=zeros(1,c);%定义一个0矩阵用来存放指标类型

disp('请输入指标类型,0表示极大型,1表示极小型,2表示中间型,3表示区间型')

for j=1:c     %通过for循环依次从键盘输入指标类型对应的数字

B(j)=input('please  enter a type:');

end

disp(B)

%%

%%指标正向化

C=zeros(1,c)

A=zeros(r,c)%这里我用A矩阵存放正向化后的数据

for j=1:c

if B(j)==0%无需正向化

for i=1:r

A(i,j)=X(i,j);%直接将原数值赋值给矩阵A

end

elseif B(j)==1%该列数据为极小型,需要正向化

for i=1:r

A(i,j)=Max_total(j)-X(i,j);

end

elseif B(j)==2%中间型指标,需要正向化

mid=input('中间值mid:')%中间值也就是公式中的x(best)

for i=1:r

C(i)=abs(X(i,j)-mid);%abs函数是绝对值函数

end

Max_mid=max(C);%用Max_mid来存放离中间值最远的值,也就是公式中的M

for i=1:r

A(i,j)=1-C(i)./Max_mid;%代入公式计算正向化后的指标数值,并赋值给矩阵A

end

elseif B(j)==3%指标类型是区间型指标的情况

a=input('请输入区间下限:')%区间下限,公式中的a

b=input('请输入区间上限:')%区间上限,公式中的b

e=(a-Min_total(j));%求出离区间下限最远的距离并赋值给e

d=(Max_total(j)-b);%求出离区间上限最远的距离并赋值给d

M=max(e,d);%比较e和d的值,并把最大值赋值给M

for  i=1:r

if (X(i,j)>=a)&&(X(i,j)<=b) %如果指标刚好在区间内,那么正向化后的值为1

A(i,j)=1;

elseif X(i,j)<a %如果Xi小于a,用公式计算正向化后的数值并赋值给矩阵A

A(i,j)=1-(a-X(i,j))./M;

elseif X(i,j)>b%如果xi大于b,用公式计算正向化后的数值并赋值给矩阵A

A(i,j)=1-(X(i,j)-b)./M ;

end

end

end

end

%%

%标准化

%方法一结合上节课层次分析法,通过repmat函数,sum函数和乘方运算来实现

Z=A./repmat(sum(A.*A).^0.5,r,1);

disp(Z);

%方法二通过for循环来实现

for i=1:r

for j=1:c

D=sum(A.*A).^0.5 ;% A.*A就是矩阵A的每一个元素平方,sum求和得到的是一个行向量,存放矩阵中每一列元素的和

Z=A./repmat(D,r,1);

%repmat函数表示将A复制m*n块,及把A作为的元素,Z由m*n个A平铺而成。

end

end

disp(Z)

%%

% % 求得分并进行归一化

S=zeros(r,1);%存放最终的归一化后的得分

G=zeros(r,1);%存放未归一化的得分

DP=zeros(r,1);%存放D+

DN=zeros(r,1);%存放D-

E=zeros(r,c);

F=zeros(r,c);

Max_Z=max(Z);%存放标准化后每一列的最大值

Min_Z=min(Z);%存放标准化后每一列的最小值

for i=1:r

for j=1:c

E(i,j)=(Max_Z(j)-Z(i,j)).*(Max_Z(j)-Z(i,j));%就是求解D+公式中分母中根号下面的内容

F(i,j)=(Min_Z(j)-Z(i,j)).*(Min_Z(j)-Z(i,j));%就是求解D-公式中分母中根号下面的内容

end

DP(i)=sum(E(i,:)).^0.5;%第i个(i=1,2,...,n)个评价对象与最大值的距离。这里用到了E(i,:),就是取第i行的所有数据

DN(i)=sum(F(i,:)).^0.5;%第i个(i=1,2,...,n)个评价对象与最小值的距离

G(i)=DN(i)/(DP(i)+DN(i));

end

disp(DN)

disp(DP)

disp(G)

%%对得分进行归一化

for i=1:r

S(i)=G(i)/sum(sum(G));

end

disp(S)

%%

TOPSIS法(小白必看文章包含详细源代码及注释)相关推荐

  1. Linux操作系统与基本使用,小白必看文章

    什么是操作系统 操作系统是负责整个系统最基本功能和系统管理,包括内核.设备驱动程序.启动引导程序.命令行shell或其它种类的用户界面.基本的文件管理工具和系统工具. 用户界面是操作系统的外在表象,内 ...

  2. 微软MS08-067漏洞,小白必看,超详细!!!

    实验环境,攻击机:kali  ip:192.168.1.110             目标机:win   xp   IP:192.168.1.30 1.nmap扫描目标机445端口是否开启:nmap ...

  3. 消息队列 常见问题分析(小白必看)

    如果对消息队列的基础知识还不了解的话建议先阅读下文: 消息队列 基础入门(小白必看) 一.简介 很久以前也写过一篇关于消息队列的文章,这里的文章,这篇文章是对消息队列使用场景,以及一些模型做过一点介绍 ...

  4. 智能车小白必看,该竞赛相关宝贵经验+资源借鉴总结1

    文章目录 智能车小白必看,该竞赛相关宝贵经验+资源借鉴总结1 竞赛准备的大体流程 做智能车竞赛的宏观建议整合 摄像头组的具体建议 学习资源链接 后记 经验参考来源 智能车小白必看,该竞赛相关宝贵经验+ ...

  5. 该如何选择手机群控系统,小白必看,防进深坑。

    该如何选择手机群控系统,小白必看,防进深坑. 群控还有什么好聊的?都是老话常谈了.依然还有人天天问! 百度一搜,各类文章,层出不穷.讲的是那么生动,那么彻底.铺天盖地的营销文案,自我问答,既扮演着老板 ...

  6. 小白必看、手把手教你利用爬虫爬网页

    接下来从网络爬虫的概念.用处与价值和结构等三个方面,让大家对网络爬虫有一个基本的了解. 网络爬虫及其应用 随着网络的迅速发展,万维网成为大量信息的载体,如何有效地提取并利用这些信息成为一个巨大的挑战, ...

  7. 计算机新手教程装系统,新手小白必看电脑重装系统教程 四种方法至少会一种就够用!...

    电脑买来时间久了,就会出来卡顿.蓝屏等很多问题.你的电脑有这些问题吗?当电脑出现这些问题时,我们该怎么做呢?当然就是给电脑重装系统,那么你会给电脑重装系统吗?小白必看的电脑重装系统教程哦! 给电脑装系 ...

  8. 通俗易懂计算机知识,内存条是什么 有什么用?小白必看内存知识扫盲 通俗易懂!...

    我们日常使用电脑系统.软件.游戏等都是安装在硬盘中的,那么内存条是什么,到底有啥用?下面本文将通过通俗易懂的理解,来跟大家说说这个电脑内存条,希望大家看完以后心里都能有个谱,这几乎是史上最通俗易懂的内 ...

  9. centos7 mysql创建表_CentOS7 MySQL数据库入门 小白必看

    昨天网盾科技发布的一篇关于CentOS7配置ssh的文章,有很多小伙伴都收藏了,想必是对大家很有帮助,那么今天网盾科技再给大家分享一篇关于CentOS7配置MySQL数据库入门的文章,小白必看哟! l ...

  10. 小白必看 | VRay Next 太阳光如何穿过窗外的背景照射到室内?

    作者:活力网 大家好!今天将结合一个场景案例与大家分享:VRay Next 太阳光如何穿过窗外的背景照射到室内.详细图文讲解,零基础小白必看. 今天的分享将结合以下场景进行操作 模型来源:www.iM ...

最新文章

  1. AWS CSAA -- 04 AWS Object Storage and CDN - S3 Glacier and CloudFront(三)
  2. 计算机无法屏幕亮度,电脑屏幕亮度无法调节怎么办
  3. RouteOS的DHCP服务器配置
  4. QT获取本地网络信息
  5. 一些Base64编码/解码及数据压缩/解压方面的知识
  6. 【Java】使用Switch语句实现成绩等级判断
  7. 设计灵感|简单的几何图形还能这么用在网页设计中!
  8. 计算机基础第1次作业,计算机应用基础 第一次作业
  9. STM8学习笔记---Modbus通信协议简单移植
  10. docker compose dns 缓存_Docker深入浅出 | Docker Compose多容器实战
  11. SSO单点登录Spring-Security+CAS+使用手册.doc
  12. oracle decode和case when,竟然where 后可以跟着decode 那也就是 where后可以跟着case when ????...
  13. 异常值筛选 拉依达准则 格拉布斯_时序预测竞赛之异常检测算法综述
  14. 爱好-超级IP:超级IP
  15. Ubuntu 快捷截图
  16. 29.顺时针打印矩阵
  17. nth_element详解
  18. Linux日常维护命令
  19. 请更换备份电池 pos机_什么pos机刷信用卡最好最安全,不会跳码最稳定
  20. 字节跳动青训营笔试题解

热门文章

  1. 利用tensorflow加载VGG19
  2. STM8S103FP6芯片PB_4/PB_5输出问题
  3. Restsharp 与 unity3D WWW
  4. 如何写软件的需求和设计文档
  5. 数据挖掘学习(四)——常见案例总结
  6. QGIS的部分使用流程
  7. PHP测试POST请求工具
  8. 三大框架 —— 持久层框架MyBatis
  9. linux下解压zip文件命令
  10. 焊缝标注vlx实用程序_【CAD自动标注插件下载】CAD自动标注插件yjbz.VLX v1.0 最新版-开心电玩...