TOPSIS法详解+MATLAB求解盗圣例题

本文为北海的数模课程学习笔记,课程出自微信公众号:数学建模BOOM。

求赞!求收藏!求关注!

目录

基本概念

适用赛题

原理与典型例题

数据预处理

数据类型及处理方法

 向量规范化​编辑

 加权处理

求解公式

代码求解

基本概念

TOPSIS(Technique for Order Preference by Similarity to Ideal Solution)法是一种多准则决策分析方法,通过计算各方案相对于理想解和负理想解的距离,来确定各方案的相对优劣,从而辅助决策者做出选择。

举一个通俗的例子说明:评选盗圣。

因为只比距离正理想解近的话相同的概率比较大(并列第一),所以还要比谁距离负理想解远。

特殊情况

  1. 如果多个指标就用多维空间中的距离。 
  2. 如果不在一个数量级要归一化。
  3. 如果有负面的指标,就以最小为优。

适用赛题

原理与典型例题

数据预处理

数据类型及处理方法

变化后的区间型属性可以当做效益型属性

 向量规范化

区间型属性要先变换再向量规范化

 加权处理

每一列分别乘以权重

求解公式

 实现难度会低于层次分析法AHP

代码求解

求解过程
输入原始数据
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));     % 对生师比进行变换
  • qujian: 这个向量包括两个元素,定义了一个区间 [qujian(1), qujian(2)]
  • lbub: 这两个数值定义了整个函数定义域的下限(lower bound)和上限(upper bound)。
  • x: 这是输入变量,可以是一个数值或向量。

这个函数的定义可以分为三个部分:

  1. 第一部分: 当 x[lb, qujian(1)) 之间时,函数的值由下式给出:

    (1−(qujian(1)−x)/(qujian(1)−lb))⋅(x≥lb & x<qujian(1))(1−(qujian(1)−x)/(qujian(1)−lb))⋅(x≥lb&x<qujian(1))

    x 接近 lb 时,这个部分接近 0;当 x 接近 qujian(1) 时,这个部分接近 1。因此,在该区间内,函数值从 0 线性增长到 1。

  2. 第二部分: 当 x[qujian(1), qujian(2)] 之间时,函数的值为 1。这可以表示为:

    (x≥qujian(1) & x≤qujian(2))(x≥qujian(1)&x≤qujian(2))

    这个部分将确保在这个特定区间内,函数值始终为 1。

  3. 第三部分: 当 x(qujian(2), ub] 之间时,函数的值由下式给出:

    (1−(x−qujian(2))/(ub−qujian(2)))⋅(x>qujian(2) & x≤ub)(1−(x−qujian(2))/(ub−qujian(2)))⋅(x>qujian(2)&x≤ub)

    x 接近 qujian(2) 时,这个部分接近 1;当 x 接近 ub 时,这个部分接近 0。因此,在该区间内,函数值从 1 线性减小到 0。

数据预处理:向量规范化

 每一列(同一属性/指标)的元素值都化为0到1的值,且平方和为1
norm求向量数范,等于一个向量中的所有元素求平方和再开根

公式b_{i j}=\frac{a_{i j}}{\sqrt{\sum_{i=1}^{m} a_{i j}^{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'表示降序排序,得分高的放在第一位

sf是对综合评价指数f降序排序后的结果,ind对应原始元素的序号
ind=[4 3 2 1 5],代表第一名是第4号院校,第2名是3号院校……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值