备战数学建模25-理想解法(TOPSIS模型2)

Posted nuist__NJUPT

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了备战数学建模25-理想解法(TOPSIS模型2)相关的知识,希望对你有一定的参考价值。

目录

一、理想解法

1-基本概念

2-基本方法和原理

3-理想解法的计算步骤

4-理想解法经典案例及MATLAB实现


一、理想解法

1-基本概念

理想解法,也叫做优劣解距离法,简称TOPSIS,是一种有效的多指标评价方法,通过构造评价问题的最优解和最劣解,然后计算每个方案到靠近最优解和远离最劣解的程度,来对方案进行排序,从而选出最优方案。

2-基本方法和原理

引入正理想解和负理想解,防止方案与正理想解距离相等,此时可以比较与负理想解的距离,TOPSIS法所用的距离是欧式距离。

3-理想解法的计算步骤

首先需要进行正向化,都转换成效益性指标,然后才进行规范化消除量纲的影响。

 然后给各个指标加权,其实这个一般不用,默认各个指标等权。

 然后确定正理想解和负理想解,具体如下:

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

 计算各方案的排序指标,并排序,距离正理想解的距离越小,越接近最大值,越好。

在这里对上述理想解法的步骤进行总结:

1、数据预处理,正向化,都转换成极大型指标,然后归一化消除量纲的影响。

2、对各项指标加权(可省略)

3、确定正负理想解;

4、计算各个方案到正负理想解的距离;

5、计算各方案的综合评价指标;

6、根据评价指标由大到小排列方案的优劣次序;

4-理想解法经典案例及MATLAB实现

对上述方案进行评估,根据评价好坏进行排名:

人均专著和科研经费是极大型,生师比是区间型,逾期毕业率是极小型;区间型5-6为最好。

主程序:

%主程序
clear; clc
X = [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] ;
 
%正向化处理,全部转换成极大型
[n,m] = size(X) ;
disp(['一共有' num2str(n) '个评价对象,' num2str(m) '个评价指标']) ;
 
position = [2,4] ; %需要正向化处理的指标所在的列
type = [3,1] ; %区间型和极小型

for i = 1 : size(position, 2)
    X(:,position(i)) = Positivization(X(:,position(i)),type(i),position(i));
end
disp('正向化后的矩阵 = ') ;
disp(X) ;

 
%对正向化处理后的矩阵进行标准化处理
z = X ./ repmat(sum(X.*X) .^ 0.5, n, 1);
disp('标准化矩阵 = ') ;
disp(z) ;
 
disp('需要给指标加相应的权重?需要输入1,不需要输入2') ;
judge2 = input('请输入1或者2:') ;
%计算与最大值和最小值的距离,计算得分,并降序排序
if judge2 == 2
D1 = sum((z - repmat(max(z),n,1)) .^ 2 ,2) .^ 0.5;   
D2 = sum((z - repmat(min(z),n,1)) .^ 2,2) .^ 0.5; 
end

if judge2 == 1
    w = input('请按照向量形式输入各个指标权重:') ;
    D1 = sum(repmat(w,n,1) .* (z - repmat(max(z),n,1)) .^ 2 ,2) .^ 0.5;   
    D2 = sum(repmat(w,n,1) .* (z - repmat(min(z),n,1)) .^ 2,2) .^ 0.5; 
end

s = D2 ./ (D1 + D2) ;
disp('最后的得分:') ;
ss = s / sum(s) ;
disp(ss) ;
[s1, I] = sort(s, 1, 'descend') ;
disp('最后的排名由高到底依次是:') ;
disp(I) ;

极小型转换成极大型:

function [position_x] = min_max(x)
position_x = max(x) - x ;
end

区间型转换成极大型代码:

function [position_x] = inter_max(x, left, right)
row = size(x, 1) ;
M = max([left - min(x),max(x) - right]) ;
position_x = zeros(row, 1) ;
 
for i = 1 : row 
    if x(i) < left 
        position_x(i) = 1 - (left - x(i)) / M ;
    else if x(i) > right 
         position_x(i) = 1 - (x(i) - right) / M ;
    else
      position_x(i) = 1 ;
        end
    end
end
end

区间型转换成极大型代码2:

function [position_x] = inter_max(x, left, right)
row = size(x, 1) ;
position_x = zeros(row, 1) ;

for i = 1 : row 
    if x(i) < left && x(i) >= 2 
        position_x(i) = 1 - (left - x(i)) / (left - 2) ;
    else if x(i) >= left && x(i) <= right
          position_x(i) = 1 ;   
    else if x(i) > right && x(i) <= 12
         position_x(i) = 1 - (x(i) - right) / (12 - right) ;
    else
         position_x(i) =  0 ;
        end
        end
    end
end
end

以上是关于备战数学建模25-理想解法(TOPSIS模型2)的主要内容,如果未能解决你的问题,请参考以下文章

数学建模之理想解法(TOPSIS)

TOPSIS算法

数学建模暑期集训7:TOPSIS法(优劣解距离法)

数学建模优劣解距离法Topsis模型部分

数学建模复习(2. topsis优劣解距离法)

如何搞定熵权topsis?