数学建模之TOPSIS模型(含matlab代码)

 

目录

一、方法和原理

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的数据进行最优值为给定区间时的变换。

代码如下:

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 "时,进行降序排序

 正理想解、负理想解、排队指标值和排序结果

  • 6
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TOPSIS法是一种多属性决策分析方法,可以用来评价多个决策方案的相对优劣。Matlab中可以使用以下代码实现: 假设有4个决策方案,每个方案有3个评价指标,存储在一个4行3列的矩阵X中。 ```matlab X = [3 2 6; 5 4 8; 7 5 9; 4 6 7]; ``` 首先需要将所有指标标准化,使得它们的取值范围相同。可以使用以下代码实现: ```matlab [n,m] = size(X); % n为方案数,m为指标数 X1 = X./sqrt(sum(X.^2)); % 指标标准化 ``` 接下来,需要确定每个指标的权重。可以使用主观赋权法或客观赋权法来确定权重。这里假设已经确定了指标权重,存储在一个1行3列的矩阵W中。 ```matlab W = [0.3 0.4 0.3]; % 指标权重 ``` 然后计算加权规范化矩阵,即将指标标准化后乘以指标权重,得到每个方案的加权规范化得分。 ```matlab X2 = X1.*W; % 加权规范化矩阵 ``` 接下来需要确定正负理想解。正理想解是指在每个指标上取值最大的方案,负理想解是指在每个指标上取值最小的方案。可以使用以下代码实现: ```matlab Z = [max(X2); min(X2)]; % 正负理想解 ``` 然后计算每个方案到正负理想解的距离,可以使用欧氏距离或曼哈顿距离。这里使用欧氏距离。 ```matlab D = sqrt(sum((X2-Z(:,1)').^2,2)) ./ (sqrt(sum((X2-Z(:,1)').^2,2)) + sqrt(sum((X2-Z(:,2)').^2,2))); % 距离值 ``` 最后按照距离值的大小排序,得到每个方案的相对优劣程度。 ```matlab [~,rank] = sort(D,'descend'); % 相对优劣程度排序 ``` rank中的第一个元素即为最优方案的编号。 完整的代码如下: ```matlab X = [3 2 6; 5 4 8; 7 5 9; 4 6 7]; [n,m] = size(X); X1 = X./sqrt(sum(X.^2)); % 指标标准化 W = [0.3 0.4 0.3]; % 指标权重 X2 = X1.*W; % 加权规范化矩阵 Z = [max(X2); min(X2)]; % 正负理想解 D = sqrt(sum((X2-Z(:,1)').^2,2)) ./ (sqrt(sum((X2-Z(:,1)').^2,2)) + sqrt(sum((X2-Z(:,2)').^2,2))); % 距离值 [~,rank] = sort(D,'descend'); % 相对优劣程度排序 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值