TOPSIS 法是一种常用的综合评价方法,能充分利用原始数据的信息,其结果能精确地反映各评价方案之间的差距。TOPSIS全称Technique for Order Preference by Similarity to an Ideal Solution ,TOPSIS法是C.L.Hwang和K.Yoon于1981年首次提出的,它根据有限个评价对象与理想化目标的接近程度进行排序的方法,是在现有的对象中进行相对优劣的评价。作为一种逼近于理想解的排序法,该方法只要求各效用函数具有单调递增(或递减)性就行,它是多目标决策分析中一种常用的有效方法,国内常简称为优劣解距离法或理想点法。

一、TOPSIS法的原理

设多属性决策方案集为\(D=\{d_1,d_2,\cdots,d_m\}\),衡量方案优劣的属性变量为\(\{x_1,\cdots,x_n\}\),这时方案集D中的每个方案\(d_i(i=1,\cdots,m)\)的\(n\)个属性值构成的向量是\([a_{i1},\cdots,a_{in}]\),它作为\(n\)维空间中的一个点,能唯一地表征方案\(d_i\)。

正理想解\(C^*\)是一个方案集\(D\)中并不存在的虚拟的最佳方案,它的每个属性值都是决策矩阵中该属性的最好值;而负理想解\(C^0\)则是虚拟的最差方案,它的每个属性值都是决策矩阵中该属性的最差值。在\(n\)维空间中,将方案集\(D\)中的各备选方案\(d_i\)与正理想解\(C^*\)和负理想解\(C^0\)的距离进行比较,既靠近正理想解又远离负理想解的方案就是方案集\(D\)中的最佳方案;并可以据此排定方案集\(D\)中各备选方案的优先序。

为什么既用正理想解,又用负理想解?

考虑到只有一个正理想解时可能会出现两个方案离正理想解距离相同的情况。​ 基本过程为先将原始数据矩阵统一指标类型(一般正向化处理) 得到正向化的矩阵,再对正向化的矩阵进行标准化处理以消除各指 标量纲的影响,并找到有限方案中的最优方案和最劣方案,然后分 别计算各评价对象与最优方案和最劣方案间的距离,获得各评价对 象与最优方案的相对接近程度,以此作为评价优劣的依据。该方法对数据分布及样本含量没有严格限制,数据计算简单易行。

用理想解法求解多属性决策问题的概念简单,只要在属性空间定义适当的距离测度就能计算备选方案与理想解的距离。TOPSIS法所用的是欧氏距离。至于既用正理想解又用负理想解是因为在仅仅使用正理想解时有时会出现某两个备选方案与正理想解的距离相同的情况,为了区分这两个方案的优劣,引入负理想解并计算这两个方案与负理想解的距离,与正理想解的距离相同的方案离负理想解远者为优。

二、TOPSIS的算法步骤

TOPSIS法的具体算法如下:

用向量规划化的方法求得规范决策矩阵

设多属性决策问题的决策矩阵\(A=(a_{ij}​)_{m×n​}\),规范化决策矩阵\(B=(b_{ij}​)_{m×n​}\)​,其中

\[b_{ij}=\frac{a_{ij}}{\sqrt{\sum_{i=1}^{m}a_{ij}^2}}, i=1,2,\cdots m; j=1,2,\cdots,n \quad (1)
\]

构造加权规范阵\(\mathbf{C}=(c_{ij})_{m\times n}\)

设由决策人给定各属性的权重向量为$ \mathbf{w}=[w_1,w_2,\cdots,w_n]^T$,则

\[ c_{ij}=w_j\cdot b_{ij}, i=1,2,\cdots,m; j=1,2,\cdots,n\quad (2)
\]

确定正理想解 和负理想解

设正理想解 \(C^*\)的第 \(j\)个属性值为\(c_j^*\),负理想解\(C^0\)第\(j\)个属性值为\(c_j^0\),则

正理想解:

\[c_j^*=
\begin{cases} \max_i{c_{ij}}, j为效益型属性,\\\min_i{c_{ij}}, j为成本型属性, \end{cases} \quad j=1,2,⋯,n\quad (3)
\]

负理想解:

\[c_j^0=
\begin{cases} \min_i{c_{ij}}, j为效益型属性,\\ \max_i{c_{ij}}, j为成本型属性,\end{cases} \quad j=1,2,⋯,n \quad(4)
\]

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

备选方案\(d_i\)到正理想解的距离为

\[s_i^*=\sqrt{\sum_{j=1}^{n}{(c_{ij}-c_j^*)^2}}, i=1,2,\cdots,m \quad(5)
\]

备选方案\(d_i\)到负理想解的距离为

\[ s_i^0=\sqrt{\sum_{j=1}^{n}{(c_{ij}-c_j^0)^2}}, i=1,2,\cdots,m \quad (6)
\]

计算各方案的排序指标值(即综合评价指数)

\[f_i^*=s_i^0/(s_i^0+s_i^*), i=1,2,\cdots,m\quad (7)
\]

按\(f_i^*\)​由大到小排列方案的优劣次序。

三、R语言计算示例

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

人均专著\(x_1\)(本/人) 生师比\(x_2\) 科研经费\(x_3\) (万元、年) 逾期毕业率\(x_4\) (%)
1 0.1 5 5000 4.7
2 0.2 6 6000 5.6
3 0.4 7 7000 6.7
4 0.9 10 10000 2.3
5 1.2 2 400 1.8

3.1 构造初始决策矩阵

\(D=(d_{ij})_{m \times n}\)。据题意可以判断\(x_1,x_3\)是效益型属性,$x_2,x_4 $为消费型属性.

D <- matrix(c(0.1, 0.2, 0.4, 0.9, 1.2,
1/5, 1/6, 1/7, 1/10, 1/2,
5000, 6000, 7000, 10000, 400,
1/4.7, 1/5.6, 1/6.7, 1/2.3, 1/1.8), nrow = 5)

3.2 数据预处理

按列(属性)对决策矩阵\(D\)归一化

col_sum <- apply(D, 2, sum) # 2代表列
ColSum <- matrix(c(col_sum, col_sum, col_sum, col_sum, col_sum ), nrow = 5, byrow = T) # 按行填入
R <- D/ColSum
R
[,1] [,2] [,3] [,4]
[1,] 0.03571429 0.18025751 0.17605634 0.13897831
[2,] 0.07142857 0.15021459 0.21126761 0.11664251
[3,] 0.14285714 0.12875536 0.24647887 0.09749224
[4,] 0.32142857 0.09012876 0.35211268 0.28399915
[5,] 0.42857143 0.45064378 0.01408451 0.36288780

3.3 信息熵法计算权重

Entropy <- function(x) -sum(x*log(x))/log(5)
E <- apply(R, 2, Entropy)
F <- 1 - E
w <- F/sum(F)
 w
[1] 0.3670204 0.2179919 0.2510037 0.1639840

3.4 正理想和负理想解

#赋权
W <- diag(w)
V <- R %*% W
#计算正理想解和负理想解
v_max <- apply(V, 2, max)
v_min <- apply(V, 2, min)

3.5 与正理想解的相对接近度计算

#计算正负理想距离
V_MAX <- matrix(c(v_max, v_max, v_max, v_max, v_max), nr = 5, byrow = TRUE)
V_MIN <- matrix(c(v_min, v_min, v_min, v_min, v_min), nr = 5, byrow = TRUE)
fun <- function(x) sqrt(sum(x^2))
s_max <- apply(V-V_MAX, 1, fun)
s_min <- apply(V-V_MIN, 1, fun)
C <- s_min/(s_max + s_min)
C
[1] 0.2157095 0.2533230 0.3423939 0.6089369 0.6669153

因此五所研究院的得分为0.2157095, 0.2533230, 0.3423939, 0.6089369, 0.6669153,故五所研究院的排名顺序5 > 4 > 3 > 2 > 1。

总结

Topsis 法是理解解的排序方法,它借助于评价问题的正理想解和负理想解,对各评价对象进行排序。所谓正理想解是一个虚拟的最佳对象,其每个指标值都是对所有评价对象中的该指标的最好值;而负理想解是另一个虚拟的最差对象,其每个指标值都是所有评价对象中该指标的最差值。求出各评价对象与正理想解和负理想解的距离,并依次对各评价对象进行优劣排序。

参考文献

TOPSIS算法

R语言实战Topsis综合评价法

综合评价与决策方法01——理想解法

系统评价——理想点TOPSIS法的R语言实现(五)的更多相关文章

  1. 从零开始学习R语言(五)——数据结构之“列表(List)”

    本文首发于知乎专栏:https://zhuanlan.zhihu.com/p/60141740 也同步更新于我的个人博客:https://www.cnblogs.com/nickwu/p/125678 ...

  2. 基于R语言的时间序列指数模型

    时间序列: (或称动态数列)是指将同一统计指标的数值按其发生的时间先后顺序排列而成的数列.时间序列分析的主要目的是根据已有的历史数据对未来进行预测.(百度百科) 主要考虑的因素: 1.长期趋势(Lon ...

  3. R语言︱噪声数据处理、数据分组——分箱法(离散化、等级化)

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 分箱法在实际案例操作过程中较为常见,能够将一些 ...

  4. 几种经典排序算法的R语言描述

    1.数据准备 # 测试数组 vector = c(,,,,,,,,,,,,,,) vector ## [] 2.R语言内置排序函数 在R中和排序相关的函数主要有三个:sort(),rank(),ord ...

  5. R语言 常见模型

    转自 雪晴网 [R]如何确定最适合数据集的机器学习算法 抽查(Spot checking)机器学习算法是指如何找出最适合于给定数据集的算法模型.本文中我将介绍八个常用于抽查的机器学习算法,文中还包括各 ...

  6. R语言学习笔记:向量

    向量是R语言最基本的数据类型. 单个数值(标量)其实没有单独的数据类型,它只不过是只有一个元素的向量. x <- c(1, 2, 4, 9) x <- c(x[1:3], 88, x[4] ...

  7. R语言书籍的学习路线图

    现在对R感兴趣的人越来越多,很多人都想快速的掌握R语言,然而,由于目前大部分高校都没有开设R语言课程,这就导致很多人不知道如何着手学习R语言. 对于初学R语言的人,最常见的方式是:遇到不会的地方,就跑 ...

  8. 主成分分析(PCA)原理及R语言实现

    原理: 主成分分析 - stanford 主成分分析法 - 智库 主成分分析(Principal Component Analysis)原理 主成分分析及R语言案例 - 文库 主成分分析法的原理应用及 ...

  9. 机器学习与R语言

    此书网上有英文电子版:Machine Learning with R - Second Edition [eBook].pdf(附带源码) 评价本书:入门级的好书,介绍了多种机器学习方法,全部用R相关 ...

  10. 线性函数拟合R语言示例

    线性函数拟合(y=a+bx) 1.       R运行实例 R语言运行代码如下:绿色为要提供的数据,黄色标识信息为需要保存的. x<-c(0.10,0.11, 0.12, 0.13, 0.14, ...

随机推荐

  1. C# 自定义组元扩展类(Tuple)

    组元Tuple没有构造函数,自定义一个有构造函数的组元TupleEx. namespace TupleEx { public class TupleEx<T1> { /// <sum ...

  2. svg矢量二维码加盖在PDF文件中

    正常行驶的bitmap类型的二维码格式,加载到PDF中,将会导致二维码失真,无法扫描. 矢量图可根据尺寸大小进行调节,不会出现失真模糊情况 所用依赖 <PackageReference Incl ...

  3. sql-labs less34--less41

    less 34 汉 addslashes() 函数返回在预定义的字符前添加反斜杠的字符串. 预定义字符是: 单引号(') 双引号(") 反斜杠(\) NULL 提示:该函数可用于为存储在数据 ...

  4. Python中使用pyyaml对yaml文件进行读写删操作

    安装库 pip install pyyaml 读取yaml/yam格式的文件 def get_yaml(filepath) -> list: """ :param ...

  5. mybatis-plus 3.4.3.1 进行批量 saveOrUpdate

    service类通过 SqlHelper.saveOrUpdateBatch 实现通过自定义的 唯一索引 进行 批量保存更新 import com.baomidou.mybatisplus.core. ...

  6. Python3网络爬虫--爬取有声小说(附源码)

    目录 一.目标 1.首页 2.网页源代码 二.爬取详情页 1.查看详情页 2.小说详情 3.小说简介 4.播放列表 三.爬取小说音频 1.确定数据加载方式 2.寻找真实音频播放地址 3.URL解码 4 ...

  7. SpringBoot - Lombok使用详解3(@NoArgsConstructor、@AllArgsConstructor、@RequiredArgsConstructor)

    五.Lombok 注解详解(3) 5,@NoArgsConstructor 注解在类上,为类提供一个无参的构造方法. 注意: 当类中有 final 字段没有被初始化时,编译器会报错,此时可用 @NoA ...

  8. 学生管理系统CLI版

    学生管理系统CLI版 学生类 package com.itheima_03; public class Student { String sid; String name; String age; S ...

  9. css3样式pointer-events,点击穿透和海市蜃楼的效果

    css样式pointer-events pointer-events 是CSS3的一个属性,支持的值非常多,其中大部分都是和SVG有关.目前只了解 none 这个值, 其他值后续要补上. pointe ...

  10. mmdetection RPNHead--_init_()函数

    RPNHead类包含的函数: (1)_init_():初始化函数 (2)_init_layers():设置Head中的卷积层 (3)forward_single():单尺度特征图的前向传播 (4)lo ...