目录
一、方法和原理
1、理想解法
2、方法原理
二、TOPSIS法的具体算法
(1) 用向量规划化的方法求得规范决策矩阵
1、线性变换
2、0-1变换
3、区间型属性的变换
4、向量规范化
5、标准换处理
(2)构成加权规范阵C
(3)确定正理想解和负理想解
(4)计算各方案到正理想解和负理想解的距离
(5) 计算各方案的排队指标值
(6)排序
三、代码及实例
(1) 数据预处理
1、区间变换的代码
2、其他属性标准化处理
(2)向量规划化的方法求得规范决策矩阵代码
(3)构成加权规范阵C代码
(4)确定正理想解和负理想解代码
(5)计算排队指标值并排序代码
(6)总代码
一、方法和原理
1、理想解法
目前已有许多解决多属性决策的排序法,如理想点简单线性加权法、加权平方和法、主成分分析法法功效系数法、可能满意度法、交叉增援阵法等。本节介绍多属性决策问题的理想解法,理想解法亦称为TOPSIS 法,是一种有效的多指标评价方法。这种方法通过构造评价问题的正理想解和负理想解,即各指标的最优解和最劣解,通过计算每个方案到理想方案的相对贴近度,即靠近正理想解和远离负理想解的程度,来对方案进行排序,从而选出最优方案。
2、方法原理
二、TOPSIS法的具体算法
(1) 用向量规划化的方法求得规范决策矩阵
在这之前需要对数据进行预处理,首先需要判断数据属于成本型还是效率型还是区间型。
数据预处理数据的预处理又称属性值的规范化属性值具有多种类型,包括效益型、成本型和区间型等。这三种属性,效益型属性越大越好,成本型属性越小越好,区间型属性是在某个区间最佳。
在进行决策时,一般要进行属性值的规范化,主要有如下三个作用:
(1) 属性值有多种类型,上述三种属性放在同一个表中不便于直接从数值大小判断方案的优劣,因此需要对数据进行预处理,使得表中任一属性下性能越优的方案变换后的属性值越大。
(2)非量纲化,多属性决策与评估的困难之一是属性间的不可公度性,即在属性值表中的每一列数具有不同的单位(量纲)。即使对同一属性,采用不同的计量单位,表中的数值也就不同。在用各种多属性决策方法进行分析评价时,需要排除量纲的选用对决策或评估结果的影响,这就是非量纲化
(3)归一化,属性值表中不同指标的属性值的数值大小差别很大,为了直观,更为了便于采用各种多属性决策与评估方法进行评价,需要把属性值表中的数值归一化即把表中数值均变换到[0,1]区间上。
然后对属性进行规范化,有三种方案。
1、线性变换
2、0-1变换
3、区间型属性的变换
4、向量规范化
这种变换也是线性的,但是它与前面介绍的几种变换不司,从变换后属性值的大小上无法分辨属性值的优劣它的最大特点是,规范化后,各方案的同一属性值的平方和为 1,因此常用于计算各方案与某种虚拟方案(如理想点或负理想点) 的欧氏距离的场合。
5、标准换处理
在实际问题中,不同变量的测量单位往往是不样的。为了消除变量的量纲效应,使每个变量都具有司等的表现力,数据分析中常对数据进行标准化处理
在matlab中使用zscore(x)进行标准化
(2)构成加权规范阵C
(3)确定正理想解和负理想解
(4)计算各方案到正理想解和负理想解的距离
(5) 计算各方案的排队指标值
(6)排序
三、代码及实例
(1) 数据预处理
首先分析四个指标中有成本型也有效率型和区间型,效益型属性越大越好,成本型属性越小越好,区间型属性是在某个区间最佳。其中科研经费为成本型,生师比为区间型。
1、区间变换的代码
我们首先对表1中属性2的数据进行最优值为给定区间时的变换。
代码如下:文章来源:https://www.toymoban.com/news/detail-732565.html
clc,clear
% @是用于定义函数句柄的操作符。函数句柄既是一种变量,可以用于传参和赋值;也是可以当做函数名一样使用
x2=@(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;
x2data=[5 6 7 10 2]';
y2=x2(qujian,lb,ub,x2data)
qujian为自己定的最佳区间,lb为最小的,ub为最大的
x2data为属性2的数据(可改为自己想要变换的区间数据)
2、其他属性标准化处理
利用zscore(x)即可
(2)向量规划化的方法求得规范决策矩阵代码
利用此公式进行转换
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);
x2=@(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)=x2(qujian,lb,ub,a(:,2));%对属性2进行变换
其中a表示最初数据,然后如果没有做数据预处理的话,即没有对属性2进行区间的转换,则在向量规划化时进行。(后面x2=@(qujian....)为进行区间转换的代码)
(3)构成加权规范阵C代码
设权向量为w=[0.2,0.3,0,0.11]得加权的向量规范化属性矩阵
for j=1:n
b(:,j)=a(:,j)/norm(a(:,j));%向量规范化
end
w=[0.2 0.3 0.4 0.1];
c=b.*repmat(w,m,1);%求加权矩阵
%Repmat(a,m,n)%将A复制m*n块
其中权向量为自己设定的
(4)确定正理想解和负理想解代码
把属性4摘出来,因为为成本型属性
cstar=max(c);%求正理想解
cstar(4)=min(c(:,4))%属性4为成本型
c0=min(c);%求负理想解
c0(4)=max(c(:,4))%属性4为成本型的
(5)计算排队指标值并排序代码
第五步,计算排队指示值”(见表 6),由f值的大小可确定各方案的从优到劣的次序为 4,3,2,1,5
代码如下:
for i=1:m
sstar(i)=norm(c(i,:)-cstar);%求到正理想解的距离
s0(i)=norm(c(i,:)-c0);%求到负理想解的距离
end
f=s0./(sstar+s0);
[sf,ind]=sort(f,'descend') %求排序结果
% "ascend"时,进行升序排序,为"descend "时,进行降序排序
(6)总代码
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);
x2=@(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)=x2(qujian,lb,ub,a(:,2));%对属性2进行变换
for j=1:n
b(:,j)=a(:,j)/norm(a(:,j));%向量规范化
end
w=[0.2 0.3 0.4 0.1];
c=b.*repmat(w,m,1);%求加权矩阵
%Repmat(a,m,n)%将A复制m*n块
cstar=max(c);%求正理想解
cstar(4)=min(c(:,4))%属性4为成本型
c0=min(c);%求负理想解
c0(4)=max(c(:,4))%属性4为成本型的
for i=1:m
sstar(i)=norm(c(i,:)-cstar);%求到正理想解的距离
s0(i)=norm(c(i,:)-c0);%求到负理想解的距离
end
f=s0./(sstar+s0);
[sf,ind]=sort(f,'descend') %求排序结果
% "ascend"时,进行升序排序,为"descend "时,进行降序排序
正理想解、负理想解、排队指标值和排序结果文章来源地址https://www.toymoban.com/news/detail-732565.html
到了这里,关于数学建模之TOPSIS模型(含matlab代码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!