TOPSIS法 什么时候用?

TOPSIS法 是根据有限个评价对象与理想化目标的接近程度进行排序的方法,是在现有的对象中进行相对优劣的评价
【其中最优解的各指标值都达到各评价指标的最优值,最劣解的各指标值都达到各评价指标的最差值】

TOPSIS法 特别适合具有多组评价对象时,要求通过检测评价对象与最优解、最劣解的距离来进行排序

作业解答

如何改编代码,使用户能选择是否加入指标的权重计算?

% % % % % % % % % % % % % % % % % % % % % % % 举个例子 % % % % % % % % % % % % % % % % % % % % % % % % 假如原始数据为:
A = [1, 2, 3;2, 4, 6]% 权重矩阵为:
B = [ 0.2, 0.5 ,0.3 ] % 加权后输出:
0.2000    1.0000    0.9000
0.4000    2.0000    1.8000      % 加权后的矩阵 C% 简约的代码如下:
C = A;
for i = 1: size(A,2)C(:,i) = C(:,i) .* B(i);
end
disp(C)% % % % % % % % % % % % % % % % % % % % % % % 正式代码 % % % % % % % % % % % % % % % % % % % % % % % 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

TOPSIS法的顺序

正向化(每一列都转为极大型)
标准化(每一个元素都被标准化处理)
归一化(每一列的和都为 1 )
计算权重(求每一行的和)

下图引用自 数学建模优劣解距离算法——Topsis模型

什么时候用熵权法?

可以用熵值来判断某个指标的离散程度,其信息熵值越小,指标的离散程度越大, 该指标对综合评价的影响(即权重)就越大,因此,可利用信息熵这个工具,计算出各个指标的权重【如果某项指标的值全部相等,则该指标在综合评价中不起作用】

对于一些数据容易获取的分析,个人觉得熵值法可靠一些
对于数据比较难获取且存在相关及共线性问题的话建议采取主成分分析法(第14讲学)

TOPSIS法的代码部分

%%  第一步:把数据复制到工作区,并将这个矩阵命名为 X
load data_water_quality.mat          % 数据的名字叫 data_water_quality%%  第二步:判断是否需要正向化
[n,m] = size(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]for i = 1 : size(Position,2)X(:,Position(i)) = Positivization(X(:,Position(i)),Type(i),Position(i));enddisp('正向化后的矩阵 X =  ')disp(X)
end%% 第三步:对正向化后的矩阵进行标准化
Z = X ./ repmat(sum(X.*X) .^ 0.5, n, 1);
disp('标准化矩阵 Z = ')
disp(Z)%% 第四步:让用户判断是否需要增加权重(可以自己决定权重,也可以用熵权法确定权重)
disp("请输入是否需要增加权重向量,需要输入1,不需要输入0")
Judge = input('请输入是否需要增加权重: ');
if Judge == 1Judge = input('使用熵权法确定权重请输入1,否则输入0: ');if Judge == 1if sum(sum(Z<0)) >0   % 如果之前标准化后的Z矩阵中存在负数,则重新对X进行标准化disp('原来标准化得到的Z矩阵中存在负数,所以需要对X重新标准化')for i = 1:nfor j = 1:mZ(i,j) = [X(i,j) - min(X(:,j))] / [max(X(:,j)) - min(X(:,j))];endenddisp('X重新进行标准化得到的标准化矩阵Z为:  ')disp(Z)endweight = Entropy_Method(Z);disp('熵权法确定的权重为:')disp(weight)elsedisp(['如果你有3个指标,你就需要输入3个权重,例如它们分别为0.25,0.25,0.5, 则你需要输入[0.25,0.25,0.5]']);weight = input(['你需要输入' num2str(m) '个权数。' '请以行向量的形式输入这' num2str(m) '个权重: ']);OK = 0;  % 用来判断用户的输入格式是否正确while OK == 0 if abs(sum(weight) -1)<0.000001 && size(weight,1) == 1 && size(weight,2) == m  % 注意浮点数OK =1;elseweight = input('你输入的有误,请重新输入权重行向量: ');endendend
elseweight = ones(1,m) ./ m ; %如果不需要加权重就默认权重都相同,即都为1/m
end%% 第五步:计算与最大值的距离和最小值的距离,并算出得分
D_P = sum([(Z - repmat(max(Z),n,1)) .^ 2 ] .* repmat(weight,n,1) ,2) .^ 0.5;   % D+ 与最大值的距离向量
D_N = sum([(Z - repmat(min(Z),n,1)) .^ 2 ] .* repmat(weight,n,1) ,2) .^ 0.5;   % D- 与最小值的距离向量
S = D_N ./ (D_P+D_N);    % 未归一化的得分
disp('最后的得分为:')
stand_S = S / sum(S)
[sorted_S,index] = sort(stand_S ,'descend')

切记不能直接用于论文中,要根据题目适当的修改,避免查重

TOPSIS法的评估

Topsis法 的优点:
(1) 避免了数据的主观性,不需要目标函数,不用通过检验,而且能够很好的刻画多个影响指标的综合影响力度
(2) 对于数据分布及样本量、指标多少无严格限制,既适于小样本资料,也适于多评价单元、多指标的大系统,较为灵活、方便
Topsis法 的缺点:
(1) 需要的每个指标的数据,对应的量化指标选取会有一定难度
(2) 不确定指标的选取个数为多少适宜,才能够去很好刻画指标的影响力度
(3) 必须有两个以上的研究对象才可以进行使用

其他文件

%% Entropy_Method.m       % 是熵权法计算权重的函数function [W] = Entropy_Method(Z)[n,m] = size(Z);D = zeros(1,m);  % 初始化保存信息效用值的行向量for i = 1:mx = Z(:,i);  % 取出第i列的指标p = x / sum(x);% 注意,p有可能为0,此时计算ln(p)*p时,Matlab会返回NaN,所以这里我们自己定义一个函数e = -sum(p .* mylog(p)) / log(n); % 计算信息熵D(i) = 1- e; % 计算信息效用值endW = D ./ sum(D);  % 将信息效用值归一化,得到权重
end%% mylog.m       % 用于替代MATLAB中的log函数,因为计算熵权法时需要判断 p = 0function [lnp] =  mylog(p)
n = length(p);   % 向量的长度
lnp = zeros(n,1);   % 初始化最后的结果for i = 1:n   % 开始循环if p(i) == 0   % 如果第i个元素为0lnp(i) = 0;  % 那么返回的第i个结果也为0elselnp(i) = log(p(i));  endend
end%% Positivization.m       % 是处理矩阵正向化的函数function [posit_x] = Positivization(x,type,i)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%% Min2Max.m 、Mid2Max.m 、Inter2Max.m           % 处理极小型、中间型、区间型的函数function [posit_x] = Min2Max(x)          % 极小型posit_x = max(x) - x;
endfunction [posit_x] = Mid2Max(x,best)     % 中间型M = max(abs(x-best));posit_x = 1 - abs(x-best) / M;
endfunction [posit_x] = Inter2Max(x,a,b)    % 区间型r_x = size(x,1);  % row of x M = max([a-min(x),max(x)-b]);posit_x = zeros(r_x,1);% 初始化posit_x全为0for i = 1: r_xif x(i) < aposit_x(i) = 1-(a-x(i))/M;elseif x(i) > bposit_x(i) = 1-(x(i)-b)/M;elseposit_x(i) = 1;endend
end

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

  1. TOPSIS法(优劣解距离法)介绍及 python3 实现

    文章目录 TOPSIS法(优劣解距离法)介绍及 python3 实现 1 简述 2 TOPSIS过程 2.1 指标属性同向化,一般选择指标正向化 2.1.1 极小型指标:期望指标值越小越好(如患病率. ...

  2. 基于熵权法优劣解距离法_基于优劣解距离法的火电机组单辅机运行状态评估

    龙源期刊网 http://www.qikan.com.cn 基于优劣解距离法的火电机组单辅机运行状 态评估 作者:王瑾石 来源:<中国化工贸易 · 上旬刊> 2019 年第 01 期 摘要 ...

  3. 基于熵权法优劣解距离法_物流学年学论文参考文献 物流学年专著类参考文献哪里找...

    [100个]物流学年学论文参考文献供您参考,希望能解决毕业生们的物流学年专著类参考文献哪里找相关问题,整理好参考文献那就开始写物流学年论文吧! 一.物流学年论文参考文献范文 [1]浙江省物流立法现状. ...

  4. Topsis算法(优劣解距离法)——综合评价方法

    一.Topsis算法 TOPSIS 法是一种常用的组内综合评价方法,能充分利用原始数据的信息,其结果能精确地反映各评价方案之间的差距.基本过程为基于归一化后的原始数据矩阵,采用余弦法找出有限方案中的最 ...

  5. 基于熵权法优劣解距离法_维普资讯中文期刊服务平台-基于改进TOPSIS方法的航空装备预研项目技术风险评估...

    摘 要:技术风险是引发费用风险和进度风险的主要因素,因此在航空装备的研制中需要重点管控和规避.为提供可靠的航空装备预研项目技术方案的选择依据,采用改进的TOPSIS方法对五种不同航空装备预研方案的技术 ...

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 【招聘(西安)】深圳市中兴云服务有限公司.NET工程师
  2. CSS3 实用技巧:制作三角形
  3. vue中v-bind指令的使用之Vue知识点归纳(七)
  4. 输出三角形面积和周长 (15 分)
  5. Linux 命令(6)—— sort 命令
  6. 【高校联合主办| SCI、EI 快检索】物联网,机器学习,网络安全,通信技术,算法,微芯片等计算机多主题征稿!...
  7. Printf函数中%p代表什么数据类型
  8. Linux英伟达驱动程序下载和安装
  9. php hprose扩展1.5.5,基于Hprose for PHP 1.5.6、Yii2.0.7的RPC的基本实现流程
  10. 关于k700c,t628键值的问题!
  11. 将中划线转为驼峰式写法
  12. 一、CPU寄存器说明
  13. k8s中对pod设置限制只设置了limits
  14. 【多功能改进】基于OpenCV图像采集的人脸识别网络推流及局域网无线控制系统(将图像在URL地址上输出,可做成网络摄像头,带识别框)
  15. 全国大学生“高教杯”成图大赛——图错了如何修改
  16. 数据不在有用时进行安全销毁
  17. python ocr文字识别竖排繁体_繁体文字识别 ABBYY 与 千百OCR 使用比较
  18. phpStrom 连接数据库时报错:Uncaught Error: Class ‘mysqli‘ not found in
  19. python哪里培训
  20. 本地搭建start.spring.io

热门文章

  1. 团宝回来了 星晨急便跑了 你们在愚弄谁
  2. Shader编程学习笔记(九)—— Cg语言入门1 - 输入输出和语义
  3. matlab中传递函数的离散化
  4. 推荐十四款常见的Web前端开发框架
  5. SVG SMIL 动画(基本动画 、变换动画)
  6. 前端性能测试 WebPagetest功能
  7. Simulink学习之Combinatorial Logic模块
  8. 音视频之渲染yuv图片
  9. JS中常见的String方法
  10. 围住一只猫猫需要几步?【多猫预警】