TOPSIS法(Technique for Order Preference by Similarity to Ideal Solution) 可翻译为逼近理想解排序法,国内常简称为优劣解距离法 TOPSIS 法是一种常用的综合评价方法,其能充分利用原始数据的信息, 其结果能精确地反映各评价方案之间的差距。

使用此类方法,有以下几个步骤:、

目录

第一步:将原始矩阵正向化

1、常见的四个指标

2、转化方法

(1)极小型指标 转为极大型指标

(2)中间型指标转为极大型指标

(3)区间型指标转为极大型指标

第二步:正向化矩阵标准化

第三步:计算得分并归一化

四、模型优化

五、代码实现

1、正向化函数的实现

2、Topsis方法实现


第一步:将原始矩阵正向化

将原始矩阵正向化,就是将所有的指标类型统一转化为极大型(转换函数不唯一)

1、常见的四个指标

2、转化方法

(1)极小型指标 转为极大型指标

(2)中间型指标转为极大型指标

(3)区间型指标转为极大型指标

第二步:正向化矩阵标准化

标准化的目的是消除不同指标量纲的影响

第三步:计算得分并归一化

四、模型优化

当每一个指标都要权重时,则距离公式改变为:

五、代码实现

1、正向化函数的实现

function [posit_x] = Positivization(x,type,i)
% 输入变量有三个:
% x:需要正向化处理的指标对应的原始列向量
% type: 指标的类型(1:极小型, 2:中间型, 3:区间型)
% i: 正在处理的是原始矩阵中的哪一列
% 输出变量posit_x表示:正向化后的列向量if type == 1  %极小型disp(['第' num2str(i) '列是极小型,正在正向化'] )posit_x = Min2Max(x);  %调用Min2Max函数来正向化disp(['第' num2str(i) '列极小型正向化处理完成'] )disp('~~~~~~~~~~~~~~~~~~~~分界线~~~~~~~~~~~~~~~~~~~~')elseif type == 2  %中间型disp(['第' num2str(i) '列是中间型'] )best = input('请输入最佳的那一个值: ');posit_x = Mid2Max(x,best);disp(['第' num2str(i) '列中间型正向化处理完成'] )disp('~~~~~~~~~~~~~~~~~~~~分界线~~~~~~~~~~~~~~~~~~~~')elseif type == 3  %区间型disp(['第' num2str(i) '列是区间型'] )a = input('请输入区间的下界: ');b = input('请输入区间的上界: '); posit_x = Inter2Max(x,a,b);disp(['第' num2str(i) '列区间型正向化处理完成'] )disp('~~~~~~~~~~~~~~~~~~~~分界线~~~~~~~~~~~~~~~~~~~~')elsedisp('没有这种类型的指标,请检查Type向量中是否有除了1、2、3之外的其他值')end
end

2、Topsis方法实现

%%  第一步:判断是否需要正向化
[n,m] = size(X);%X为指标的原始矩阵
disp(['共有' num2str(n) '个评价对象, ' num2str(m) '个评价指标'])
Judge = input(['这' num2str(m) '个指标是否需要经过正向化处理,需要请输入1 ,不需要输入0:  ']);if Judge == 1Position = input('请输入需要正向化处理的指标所在的列,例如第2、3、6三列需要处理,那么你需要输入[2,3,6]: '); %[2,3,4]disp('请输入需要处理的这些列的指标类型(1:极小型, 2:中间型, 3:区间型) ')Type = input('例如:第2列是极小型,第3列是区间型,第6列是中间型,就输入[1,3,2]:  '); %[2,1,3]% 注意,Position和Type是两个同维度的行向量for i = 1 : size(Position,2)  %这里需要对这些列分别处理,因此我们需要知道一共要处理的次数,即循环的次数X(:,Position(i)) = Positivization(X(:,Position(i)),Type(i),Position(i));% Positivization是我们自己定义的函数,其作用是进行正向化,其一共接收三个参数enddisp('正向化后的矩阵 X =  ')disp(X)
end%% 让用户判断是否需要增加权重
disp('请输入是否需要增加权重向量,需要输入1,不需要输入0')
Judge = input('请输入是否需要增加权重: ');
if Judge == 1disp(['如果你有3个指标,你就需要输入3个权重,例如它们分别为0.25,0.25,0.5, 则你需要输入[0.25,0.25,0.5]']);weigh = input(['你需要输入' num2str(m) '个权数。' '请以行向量的形式输入这' num2str(m) '个权重: ']);OK = 0;  % 用来判断用户的输入格式是否正确while OK == 0 if abs(sum(weigh) - 1)<0.000001 && size(weigh,1) == 1 && size(weigh,2) == m   % 这里要注意浮点数的运算是不精准的。OK =1;elseweigh = input('你输入的有误,请重新输入权重行向量: ');endend
elseweigh = ones(1,m) ./ m ; %如果不需要加权重就默认权重都相同,即都为1/m
end
%% 第二步:对正向化后的矩阵进行标准化
Z = X ./ repmat(sum(X.*X) .^ 0.5, n, 1);
disp('标准化矩阵 Z = ')
disp(Z)%% 第三步:计算与最大值的距离和最小值的距离,并算出得分
D_P = sum([(Z - repmat(max(Z),n,1)) .^ 2 ],2) .^ 0.5;   % D+ 与最大值的距离向量
D_N = sum([(Z - repmat(min(Z),n,1)) .^ 2 ],2) .^ 0.5;   % D- 与最小值的距离向量
S = D_N ./ (D_P+D_N);    % 未归一化的得分
disp('最后的得分为:')
stand_S = S / sum(S)
[sorted_S,index] = sort(stand_S ,'descend')

注:此博客的方法和图片均来自b站的清风建模,若侵权可联系删除

TOPSIS法(优劣距离法)相关推荐

  1. [数学建模]---2.Topsis优劣距离法

    一.有关excel数据的导入 ①可以直接在工作区将矩阵的元素直接复制粘贴过去,并创建一个变量X来存储代表这个矩阵 ②右击这个变量,另存为一个.mat文件,下次再用的时候,代码区直接  load wat ...

  2. 数学建模学习笔记(二)——Topsis优劣解距离法

    (续上篇文章)层次分析法的局限 上一篇文章中,层次分析法有这样的局限 评价决策层不能太多: 数据是已知的的话,便无法使用层次分析法进行精确的分析评价: 因此,为对这些情况做出更为精准的分析,我们可以使 ...

  3. MATLAB 之 优劣解距离法(TOPSIS )

    文章目录 一.TOPSIS 简介 二.TOPSIS 步骤 1:将原始矩阵正向化,得到正向化矩阵 1.1 指标类型 1.2 正向化公式 2. 正向化矩阵标准化 3. 计算得分并归一化 3.1 方法 3. ...

  4. TOPSIS算法(优劣解距离法)的使用举例与matlab实现

    文章目录 一.算法的提出 二.TOPSIS算法的一般步骤 1.形成决策矩阵 2.计算加权决策矩阵 (1)指标正向化处理 a.极大值指标正向化 b.极小型指标极大正向化 c.中间型指标极大正向化 d.区 ...

  5. TOPSIS法笔记(优劣解距离法)

    一.概述 C.L.Hwang 和K.Yoon 于1981年首次提出TOPSIS (Technique for Order Preference by Similarity to an Ideal So ...

  6. TOPSIS(优劣解距离法)【附Python实现代码及可视化代码】

    目录 一.指标正向化 1.极小型指标->极大型指标 2.中间型指标->极大型指标 3.区间型指标->极大型指标 二.标准化处理 三.计算得分并归一化(不带权重) 四.计算得分并归一化 ...

  7. Python实现TOPSIS分析法(优劣解距离法)

    文章目录 (1).题目 (2).读取Excel表中的数据 (3).将不同的指标转换为极大型指标 (4).正向化矩阵标准化 (5).计算得分并归一化 (6).主函数 (7).完整代码部分 (8).计算结 ...

  8. 数学建模——TOPSIS法(优劣解距离法)学习笔记(一)

    一.TOPSIS方法 TOPSIS法(Technique for Order Preference by Similarity to Ideal Solution) 可翻译为逼近理想解排序法,国内常简 ...

  9. 数学建模学习笔记(2):TOPSIS方法(优劣解距离法)和熵权法修正

    文章目录 TOPSIS方法概述 TOPSIS方法步骤(重点) 熵权法对TOPSIS模型的修正 熵权法的步骤(重点) TOPSIS方法由C.L.Hwang和K.Yoon在1981年首次提出,在国内常简称 ...

最新文章

  1. 使用 github 和 jitpack 构建 android 依赖
  2. Web APi之过滤器执行过程原理解析【二】(十一)
  3. java学习笔记总略
  4. ajax滚动条动态加载,下拉滚动条,动态加载ajax加载数据
  5. 漫步线性代数二十六——特征值和特征向量(续)
  6. 【论文笔记】Simple and Deep Graph Convolutional Networks
  7. 用python做股票因子分析_什么是多因子量化选股模型?
  8. 透视相机(PerspectiveCamera)
  9. 使用百度地图API进行Android地图应用开发(Eclipse)
  10. 多目标优化——帕累托最优
  11. 码云最火开源项目 TOP 50
  12. css实现人走路效果,如何使用纯CSS实现一个人独自行走的动画效果(附源码)
  13. Zotero 和它的朋友们: 一个文献阅读生态
  14. ./bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file:
  15. 虚拟机由于硬盘存储空间过满导致启动异常+虚拟机扩容
  16. 前言-如何学习区块链
  17. windows搭建go语言开发环境
  18. 地摊金融沦为噱头?贷款需要有房产,“被城管驱逐就赔款”
  19. php 美化json,分享一个 PHP 版的 JSON 数据格式化函数
  20. 登陆失败 禁用当前的账户

热门文章

  1. Linux 常用基本命令 rmdir rm
  2. 怎样调用通达信l2行情接口?
  3. MIP影视模板泛站程序万能模板
  4. 用C语言给NI公司数据采集卡编程序进行电压数据采集
  5. 20145312《信息安全系统设计基础》课程总结
  6. 实验室异型电磁铁DZ-12的主要技术参数
  7. java时间单位_System.currentTimeMillis()计算方式与时间的单位转换
  8. 产品经理学习路线图和教程汇总,最新入门路径!
  9. Enscape 出 Mac 版本了,适用于SketchUp 2021免费公测版,附下载地址
  10. qt编译出现的异常(一)