02【评价类】模型——TOPSIS法(理想解法、优劣解距离法)

2023-12-15 04:20

本文主要是介绍02【评价类】模型——TOPSIS法(理想解法、优劣解距离法),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

02【评价类】模型——TOPSIS法(理想解法、优劣解距离法) 

目录

02【评价类】模型——TOPSIS法(理想解法、优劣解距离法) 

一、引述

二、TOPSIS法的应用

2.1 决策矩阵正向化处理

2.1.1 效益型指标(极大型指标)

2.1.2 成本型指标(极小型指标)

2.1.3 区间型指标

2.1.4 中间型指标

2.1.5 问题解决 

2.2 正向化矩阵规范化处理

2.3 构造指标的权重向量

2.3.1 层次分析法求权重向量

2.3.2 熵权法求权重向量

2.3.3 默认权重向量

2.3.4 问题解决

2.4 求各方案到正、负理想解的距离

2.4.1 求正、负理想解

2.4.2 求各方案与正、负理想解的距离

2.4.3 求综合指标值

三、TOPSIS法程序实现

四、总结


一、引述

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

引例:研究生院试评估。
 为了客观地评价我国研究生教育的实际状况和各研究生院的教学质量,国务院学位委员会办公室组织过一次研究生院的评估。为了取得经验,先选5所研究生院,收集有关数据资料进行了试评估,图1-1是所给出的部分数据。

图1-1  研究生院试评估的部分数据

由此表格可得到决策矩阵为:

A=\begin{bmatrix} 0.1 & 5 & 5000 & 4.7\\ 0.2&6 &6000 & 5.6\\ 0.4& 6 &7000 &6.7 \\ 0.9 & 10 &10000 &2.3 \\ 1.2&2 & 400&1.8 \end{bmatrix}

 注:第i行第j列为a_{ij}

二、TOPSIS法的应用

2.1 决策矩阵正向化处理

2.1.1 效益型指标(极大型指标)

一个指标越大越好,则称为效益型指标或极大型指标;

比如:一个学生的成绩,国家的GDP,一个公司的利润等;本例中的“人均专著”即为效益型指标。

注:该指标为统一型指标,即下面三种指标需要正向化处理为该类型指标。

2.1.2 成本型指标(极小型指标)

一个指标越小越好,则称为成本型指标或极小型指标;

比如:一个工厂某种产品的成本,一个人的负面评价等;本例中的“科研经费”和“逾期毕业”即为成本型指标。

成本型指标转化成效益型指标的值x_{ij}为:

 x_{ij}=max-a_{ij}

或  x_{ij}=\tfrac{1}{a_{ij}}

2.1.3 区间型指标

一个指标的值落在某个区间最好,则称为区间型指标;

比如:人体温度(36~37℃);本例中的“生师比”即为区间型指标。

 区间型指标转化成效益型指标的值x_{ij}为:

M=\max \left\{a-\min \left\{p_{i}\right\}, \max \left\{p_{i}\right\}-b\right\},{x}_{ij}=\left\{\begin{array}{ll} 1-\frac{a-p_{i}}{M} & , p_{i}<a \\ 1 & , a \leq p_{i} \leq b \\ 1-\frac{p_{i}-b}{M} & ,p_{i}>b \end{array}\right.(j=1,2,...,n)

其中\left \{ p_{i} \right \}是一组区间型指标序列,且最佳区间为\left [ a,b \right ].

公式解释如下,

图2-1 区间型指标转化为效益型指标的公式解释图

根据公式以及图2-1可知,其中M的值为a-min\left \{ p_{i} \right \},即为图2-1中红色段的长度。对于公式的右半部分,以p_{i}<a的情况为例(即p_{i}落在红色段),a-{p_{i}}即表示p_{i}距离最佳区间\left [ a,b \right ]的距离,以该值作为分子,以距离最佳区间\left [ a,b \right ]的距离作为分母。则\tfrac{a-p_{i}}{M}表示与最佳区间\left [ a,b \right ]远近程度(离最佳区间\left [ a,b \right ]越远该值越大,越近该值越小),显然这是一个成本型指标,所以为了转化成效益型指标,我们用1减去\tfrac{a-p_{i}}{M}(即1-\tfrac{a-p_{i}}{M},显然\tfrac{a-p_{i}}{M}是属于\left [ 0,1 \right ]的),那么就将区间型指标转化成了效益型指标。下面的a\leqslant p_{i}\leqslant bp_{i}>b的情况同理可得。

2.1.4 中间型指标

一个指标越靠近某个中间值越好,则称为中间型指标;

比如:河水的PH值(PH=7)。

中间型指标转化为效益型指标的值x_{ij}为: 

M=max\left \{ \left | p_{i} -p_{best}\right | \right \},x_{ij}=1-\tfrac{\left | p_{i}-p_{best} \right |}{M} (j=1,2,...,n)

公式解释如下, 

图2-2 中间型指标转化为效益型指标的公式解释图

 根据公式以及图2-2可知,其中M的值为p_{best}-min\left \{ p_{i} \right \},即图2-2红色段的长度。公式的右半部分\left | p_{i}-p_{best} \right |即表示p_{i}p_{best}的距离并作为分子,p_{i}p_{best}的最大距离M作为分母;用\tfrac{\left | p_{i}-p_{best} \right |}M来描述p_{i}p_{best}远近程度p_{i}p_{best}距离越远该值越大,越近该值越小),显然这是一个成本型指标,因此我们用1减去\tfrac{\left | p_{i}-p_{best} \right |}M(即1-\tfrac{\left | p_{i}-p_{best} \right |}{M},显然\tfrac{\left | p_{i}-p_{best} \right |}M是属于\left [ 0,1 \right ]的)来将其转化为效益型指标

2.1.5 问题解决 

将决策矩阵正向化处理之后得到正向化矩阵:

X=\begin{bmatrix} 0.1&1 &5000 &2\\ 0.2 &1 &4000& 1.1\\ 0.4 &0.75& 3000& 0\\ 0.9 &0& 0 &4.4\\ 1.2 &0.25&9600& 4.9\\ \end{bmatrix}

其中x_{ij}可由(2.1.2,2.1.3和2.1.4)中的公式求得。

2.2 正向化矩阵规范化处理

为了去除量纲的影响,因此我们需要对已得到的正向化矩阵进行规范化处理,得到规范化矩阵:

 B=\begin{bmatrix} 0.0638 &0.6172 &0.4194 &0.2869 \\ 0.1275 &0.6172 &0.3355 & 0.1578 \\ 0.2550 &0.4629& 0.2516 &0\\ 0.5738 & 0&0 &0.6313 \\ 0.7651 &0.1543 &0.8052 &0.7030 \\ \end{bmatrix}

其中b_{i j}=x_{i j} / \sqrt{\sum_{i=1}^{n} x_{i j}^{2}}.

上面公式可解释为,规范化矩阵的每一个元素即为正向化矩阵的对应元素/

2.3 构造指标的权重向量

2.3.1 层次分析法求权重向量

求权重向量即为各指标求其所占权重\omega_{j},我们首先根据成对比较阵标度表对指标两两进行比较,从而得到判断矩阵(成对比较矩阵),然后依照层次分析法的步骤流程来得到权重向量,

w=\left [ \omega _{1} ,\omega _{2} ,...,\omega _{n} \right ]^{T}

其中,\omega_{j}的具体求法请参照本系列其他文章(01层次分析法)。

2.3.2 熵权法求权重向量

具体求法请参照本系列的其他文章(03熵权法)。

2.3.3 默认权重向量

若不采取上面两种方法构造权重向量,则采取默认权重向量,

w=[\tfrac{1}{n},\tfrac{1}{n},...,\tfrac{1}{n}]

其中,n为决策矩阵的列数,即指标的个数。

2.3.4 问题解决

在本引例中,采取默认权重向量,即

w=[\tfrac{1}{4},\tfrac{1}{4},...,\tfrac{1}{4}].

在求得规范化矩阵B和指标的权重向量w后可得到加权规范阵:

C=\begin{bmatrix} 0.0159 &0.1543 & 0.1048 & 0.0717 \\ 0.0319 & 0.1543 & 0.0839 &0.0395 \\ 0.0638 &0.1157 &0.0629& 0\\ 0.1435 &0& 0 &0.1578 \\ 0.1913 &0.0386& 0.2013 & 0.1758\\ \end{bmatrix}

其中,c_{ij}=b_{ij}\cdot w_{j},(i=1,2,...,m;j=i,2,...,n)

2.4 求各方案到正、负理想解的距离

2.4.1 求正、负理想解

正理想解为:

C^{+}=\begin{bmatrix} 0.1913 & 0.1543& 0.2013& 0.1758 \end{bmatrix}

其中,c_{j}^{+}=max\left \{ c_{ij} \right \},(i=1,2,...,m)

 正理想解即位每个指标在各方案之间的最大值。

负理想解为:

C^{-}=\begin{bmatrix} 0.0159 &0 &0 & 0 \end{bmatrix}

其中, c_{j}^{-}=min\left \{ c_{ij} \right \},(i=1,2,...,m)

负理想解即位每个指标在各方案之间的最小值。

2.4.2 求各方案与正、负理想解的距离

d^{+}=\begin{bmatrix} 0.2255 \\ 0.2404 \\ 0.2604 \\ 0.2587 \\ 0.1157 \\ \end{bmatrix}

其中,d_{i}^{+}=\sqrt{\sum_{j=1}^{n}\left(c_{j}^{+}-c_{i j}\right)^{2}}.

d^{-}=\begin{bmatrix} 0.1999 \\ 0.1807 \\ 0.1401 \\ 0.2029 \\ 0.3219 \end{bmatrix}

其中, d_{i}^{-}=\sqrt{\sum_{j=1}^{n}\left(c_{j}^{-}-c_{i j}\right)^{2}}

这里的与正、负理想解的距离采用的是欧几里得距离(欧氏距离)。

2.4.3 求综合指标值

在求得各方案与正负理想解的距离后,则可以得到各个方案的综合指标值(即各方案得分):

R=\begin{bmatrix} 0.4698 \\ 0.4292 \\ 0.3499 \\ 0.4395 \\ 0.7356 \end{bmatrix}

其中 r_{i}=\tfrac{d_{i}^{-}}{d_{i}^{-}+d_{i}^{+}}.

再将综合指标归一化,

\tilde{R}=\begin{bmatrix} 0.1938 \\ 0.1770 \\ 0.1443 \\ 0.1813 \\ 0.3035 \end{bmatrix}

其中,\tilde{r_{i}}=r_{i}/\sum_{i=1}^{m}r_{i}.

由数据可知,第5所研究院的综合指标值(0.3035)最高。

归一化:归一化的目的就是使得预处理的数据被限定在一定的范围内(比如[0,1]或[-1,1]),从而消除奇异样本数据导致的不良影响。奇异样本数据是指相对于其他输入样本特别大或特别小的样本值。(标准化,规范化又是什么呢?)

三、TOPSIS法程序实现

TOPSIS法的代码实现如下:

//FileName:G_TOPSIS.m(主程序)

%% TOPSIS
% 程序的预处理部分
clear;clc;
disp('请输入决策矩阵');
A=input('A=');
disp('请输入各列的指标类型(1.效益型,2.成本型,3.区间型,4.中间型):');
Type=input('Type=');
[n1,n2]=size(A);%% 决策矩阵正向化处理
% 将成本型、区间型和中间型指标转化为效益型指标
X=zeros(n1,n2);
for i=1:n2switch Type(i)case 1X(:,i)=A(:,i);case 2X(:,i)=G_Min2Max(A(:,i));case 3disp('请输入区间的上下界a,b:');a=input('a=');b=input('b=');X(:,i)=Inter2Max(A(:,i),a,b);case 4disp('请输入最好值value:');value=input('value=');X(:,i)=Mid2Max(A(:,i),value);otherwisedisp('您输入的Type中的数据包含不属于1~4的数据,请修改!');       end
end%% 正向矩阵规范法处理
% 为了将已正向化的矩阵消除量纲的影响,则需要对其进行规范化处理
sum_X=sqrt(sum(X.*X));
B=X./repmat(sum_X,n1,1);%% 求加权规范矩阵
% 一个方案的各指标的重要程度不同,则需要对各指标赋予权值
% 构造权重向量主要方法有:层次分析法,熵权法和默认方法
weigh=ones(1,n2)./n2;%默认方法
C=B.* repmat(weigh,n1,1);%% 计算与正负理想解的距离
C_up=max(C);% C_up(j)表示第j个指标的正理想解
C_down=min(C);
temp1=C-repmat(C_up,n1,1);%temp1为cij-C_up(j)的差值
temp2=C-repmat(C_down,n1,1);
D_up=sum(temp1.^2,2).^0.5;%D_up(i)即为第i个方案与正理想解的距离
D_down=sum(temp2.^2,2).^0.5;
result=D_down./(D_up+D_down);%计算各方案的综合指标
disp('result=');
disp(result);
[sort_result,index]=sort(result,'descend');
disp('sort_result=');
disp(sort_result);
disp('index');
disp(index);

下面三个代码段为正向化处理时所用到的函数: 

 //FileName:G_Min2Max.m(成本型\rightarrow效益型)

function [f1]=G_Min2Max(X)
% X表示需要正向化的决策矩阵的某一列[n1,~]=size(X);f1=repmat(max(X),n1,1)-X;
end

  //FileName:G_Min2Max.m(区间型\rightarrow效益型) 

function [f2]=G_Inter2Max(X,a,b)
% X表示需要正向化的决策矩阵的某一列
% a,b分别表示最佳区间的上下限M=max([a-min(X),max(X)-b]);%向量X中的所有元素与最佳区间[a,b]的最远距离f2=ones(size(X),1);for i=1:size(X)if i<af2(i)=1-(a-X(i))/M;%当X(i)小于a时的公式elseif i>bf2(i)=1-(X(i)-b)/M;elsef2(i)=1;endend
end

   //FileName:G_Min2Max.m(中间型\rightarrow效益型) 

function [f3]=G_Mid2Max(X,value)
% X表示需要正向化的决策矩阵的某一列
% value表示处于中间的最好值M=max(abs(X-value));f3=1-abs(X-value)/M;
end

四、总结

用TOPSIS法解决评价类问题时整体实现的流程:

图4 TOPSIS实现流程图

小结: 

  1. TOPSIS法是对于各指标的数据都是已知的,而层析分析法的几乎没有任何数据;
  2. 因为熵权法存在缺陷,所以平时发表论文时一般不使用,而数模比赛时可以用。

疑问:

  1. 归一化、标准化和规范法有什么异同?
  2. 在写论文时,需要对指标正向化的公式进行解释吗? 

  结束语:本文部分内容来自于B站“数学建模学习交流”以及疯学网数学建模系列教程

  

这篇关于02【评价类】模型——TOPSIS法(理想解法、优劣解距离法)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/495097

相关文章

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo

SpringBoot快速接入OpenAI大模型的方法(JDK8)

《SpringBoot快速接入OpenAI大模型的方法(JDK8)》本文介绍了如何使用AI4J快速接入OpenAI大模型,并展示了如何实现流式与非流式的输出,以及对函数调用的使用,AI4J支持JDK8... 目录使用AI4J快速接入OpenAI大模型介绍AI4J-github快速使用创建SpringBoot

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

Spring AI Alibaba接入大模型时的依赖问题小结

《SpringAIAlibaba接入大模型时的依赖问题小结》文章介绍了如何在pom.xml文件中配置SpringAIAlibaba依赖,并提供了一个示例pom.xml文件,同时,建议将Maven仓... 目录(一)pom.XML文件:(二)application.yml配置文件(一)pom.xml文件:首

如何在本地部署 DeepSeek Janus Pro 文生图大模型

《如何在本地部署DeepSeekJanusPro文生图大模型》DeepSeekJanusPro模型在本地成功部署,支持图片理解和文生图功能,通过Gradio界面进行交互,展示了其强大的多模态处... 目录什么是 Janus Pro1. 安装 conda2. 创建 python 虚拟环境3. 克隆 janus

本地私有化部署DeepSeek模型的详细教程

《本地私有化部署DeepSeek模型的详细教程》DeepSeek模型是一种强大的语言模型,本地私有化部署可以让用户在自己的环境中安全、高效地使用该模型,避免数据传输到外部带来的安全风险,同时也能根据自... 目录一、引言二、环境准备(一)硬件要求(二)软件要求(三)创建虚拟环境三、安装依赖库四、获取 Dee