数学建模--TOPSIS优劣解距离法

写在前面:
笔记为自行整理,内容出自课程《数学建模学习交流》,主讲人:清风html


TOPSIS代码: Python实现.
web

层次分析法的一些局限
有关层次分析法的内容:AHP
(1) 评价的决策层不能太多,不然判断矩阵和一致矩阵差别会很大。app

n 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
RI 0 0 0.52 0.89 1.12 1.26 1.36 1.41 1.46 1.49 1.52 1.54 1.56 1.58 1.59

平均随机一致性指标RI的表格中n最可能是15ide

(2) 若是决策层中的指标的数据是已知的,咱们须要用其它方法利用这些数据使得评价更加准确。例以下表:
学生 加权成绩 工时数 课外竞赛得分
张三 89.7 232 5
李四 86.5 20 4
梁二十 82.6 12 3

引例:

张三同宿舍共有四名同窗,他们第一学期的高数成绩以下表所示:svg

姓名 成绩
张三 89
李四 60
王五 74
刘六 99

若要为这四名同窗进行评分,使得该评分能合理的描述其高数成绩的高低。
很天然的想法是根据成绩高低来排一个名:函数

姓名 成绩 名次
张三 89 2
李四 60 4
王五 74 3
刘六 99 1

但想要正向的反应四者之间的成绩,须要对名词进行修正,使得其越大表示越好,从而:学习

姓名 成绩 名次 修正后的排名 评分
张三 89 2 3 3/10=0.3
李四 60 4 1 1/10=0.1
王五 74 3 2 2/10=0.2
刘六 99 1 4 4/10=0.4

但上述想法的不合理之处在于,在保证其相对排名不变的状况下,不管咱们如何修改他们的成绩,最后的评分是不变的。
一个好的想法是:
= x m i n m a x m i n 评分=\frac{x-min}{max-min}
并对其归一化处理:spa

姓名 成绩 未归一化的评分 归一化的评分
张三 89 (89-60)/(99-60)=0.74 0.74/2.1=0.35
李四 60 0 0
王五 74 0.36 0.17
刘六 99 1 0.48

问题拓展:增长指标个数.net

姓名 成绩 与他人争吵次数
张三 89 2
李四 60 0
王五 74 1
刘六 99 3

成绩是越高越好,这样的指标称为极大型指标(效益型指标)
争吵次数越低越好,这样的指标称为极小型指标(成本型指标)
为了获得综合的评分,咱们要统一指标类型,将全部的指标转换为极大型指标,及指标正向化。
极小型转换为极大型:
m a x x max-x orm

姓名 成绩 争吵次数正向化
张三 89 1
李四 60 3
王五 74 2
刘六 99 0
指标类型 极大型 极大型

而且,为了消去不一样指标量纲的影响,须要对已正向化的数据进行标准化处理
标准化只须要用该元素除以其同单位的行或列上的全部元素平方后加和再开根号便可。

姓名 成绩 争吵
张三 0.5437 0.2673
李四 0.3665 0.8018
王五 0.4520 0.5345
刘六 0.6048 0
指标类型 极大型 极大型

假设有n个要评价的对象,m个评价指标的标准化矩阵:
Z = [ z 11 z 12 z 1 m z 21 z 22 z 2 m z n 1 z n 2 z n m ] Z=\left[ \begin{matrix} z_{11}& z_{12}& \cdots& z_{1m}\\ z_{21}& z_{22}& \cdots& z_{2m}\\ \vdots& \vdots& \ddots& \vdots\\ z_{n1}& z_{n2}& \cdots& z_{nm}\\ \end{matrix} \right]
又由于:
z min max min = z min ( max z ) + ( z min ) = z 与最小值的距离 z 与最大值的距离 + z 与最小值的距离 \frac{z-\min}{\max -\min}=\frac{z-\min}{\left( \max -z \right) +\left( z-\min \right)}=\frac{z\text{与最小值的距离}}{z\text{与最大值的距离}+z\text{与最小值的距离}}
定义最大值 Z + = ( Z 1 + , Z 2 + , , Z m + ) \text{定义最大值}Z^+=\left( Z_1^+,Z_2^+,\cdots ,Z_m^+ \right) = ( max { z 11 , z 21 , , z n 1 } , max { z 12 , z 22 , , z n 2 } , , max { z 1 m , z 2 m , , z n m } ) =\left( \max \left\{ z_{11},z_{21},\cdots ,z_{n1} \right\} ,\max \left\{ z_{12},z_{22},\cdots ,z_{n2} \right\} ,\cdots ,\max \left\{ z_{1m},z_{2m},\cdots ,z_{nm} \right\} \right)
定义最小值 Z = ( Z 1 , Z 2 , , Z m ) \text{定义最小值}Z^-=\left( Z_1^-,Z_2^-,\cdots ,Z_m^- \right) = ( min { z 11 , z 21 , , z n 1 } , min { z 12 , z 22 , , z n 2 } , , min { z 1 m , z 2 m , , z n m } ) =\left( \min \left\{ z_{11},z_{21},\cdots ,z_{n1} \right\} ,\min \left\{ z_{12},z_{22},\cdots ,z_{n2} \right\} ,\cdots ,\min \left\{ z_{1m},z_{2m},\cdots ,z_{nm} \right\} \right)
定义第 i ( i = 1 , 2 , , n ) i\left( i=1,2,\cdots ,n \right) 个评价对象与最大值的距离 D i + = j = 1 m ( Z j + z i j ) 2 D_i^+=\sqrt{\sum_{j=1}^m{\left( Z_j^+-z_{ij} \right) ^2}}
定义第 i ( i = 1 , 2 , , n ) i\left( i=1,2,\cdots ,n \right) 个评价对象与最小值的距离 D i = j = 1 m ( Z j z i j ) 2 D_i^-=\sqrt{\sum_{j=1}^m{\left( Z_j^--z_{ij} \right) ^2}}
那么,咱们能够计算得出第 i ( i = 1 , 2 , , n ) i\left( i=1,2,\cdots ,n \right) 个评价对象未归一化的得分: S i = D i D i + + D i S_i=\frac{D_i^-}{D_i^++D_i^-}
很明显, 0 S i 1 0\le S_i\le 1 ,且 S i S_i 越大, D i + D_i^+ 越小,即越接近最大值。

姓名 成绩 争吵
张三 0.5437 0.2673
李四 0.3665 0.8018
王五 0.4520 0.5345
刘六 0.6048 0

从而对于上表来讲,
D 张三 + = ( 0.6048 0.5437 ) 2 + ( 0.8018 0.2673 ) 2 = 0.537981 D_{\text{张三}}^+=\sqrt{\left( 0.6048-0.5437 \right) ^2+\left( 0.8018-0.2673 \right) ^2}=0.537981
D 张三 = ( 0.3665 0.5437 ) 2 + ( 0 0.2673 ) 2 = 0.320701 D_{\text{张三}}^-=\sqrt{\left( 0.3665-0.5437 \right) ^2+\left( 0-0.2673 \right) ^2}=0.320701
D 李四 + = ( 0.6048 0.3665 ) 2 + ( 0.8018 0.8018 ) 2 = 0.2383 D_{\text{李四}}^+=\sqrt{\left( 0.6048-0.3665 \right) ^2+\left( 0.8018-0.8018 \right) ^2}=0.2383
D 李四 + = ( 0.3665 0.3665 ) 2 + ( 0 0.8018 ) 2 = 0.8018 D_{\text{李四}}^+=\sqrt{\left( 0.3665-0.3665 \right) ^2+\left( 0-0.8018 \right) ^2}=0.8018
最终可获得:
S 张三 = D 张三 D 张三 + + D 张三 S_{\text{张三}}=\frac{D_{\text{张三}}^-}{D_{\text{张三}}^++D_{\text{张三}}^-}
同理获得李4、王五和刘六的评分S。

姓名 D + D^+ D D^- 未归一化的得分 归一化的得分 排名
张三 0.5380 0.3206 0.3734 0.1857 3
李四 0.2382 0.8018 0.7709 0.3834 1
王五 0.3078 0.5413 0.6375 0.3170 2
刘六 0.8018 0.2382 0.2291 0.1139 4

TOPSIS介绍

TOPSIS(Technique for Order Preference by Similarity to an Ideal Solution )法是C.L.Hwang和K.Yoon于1981年首次提出,TOPSIS法根据有限个评价对象与理想化目标的接近程度进行排序的方法,是在现有的对象中进行相对优劣的评价。TOPSIS法是一种逼近于理想解的排序法,该方法只要求各效用函数具备单调递增(或递减)性就行。TOPSIS法是多目标决策分析中一种经常使用的有效方法,又称为优劣解距离法。
其基本原理,是经过检测评价对象与最优解、最劣解的距离来进行排序,若评价对象最靠近最优解同时又最远离最劣解,则为最好;不然不为最优。其中最优解的各指标值都达到各评价指标的最优值。最劣解的各指标值都达到各评价指标的最差值。
TOPSIS法其中“理想解”和“负理想解”是TOPSIS法的两个基本概念。所谓理想解是一设想的最优的解(方案),它的各个属性值都达到各备选方案中的最好的值;而负理想解是一设想的最劣的解(方案),它的各个属性值都达到各备选方案中的最坏的值。方案排序的规则是把各备选方案与理想解和负理想解作比较,若其中有一个方案最接近理想解,而同时又远离负理想解,则该方案是备选方案中最好的方案。——百度百科.

步骤总结

第一步:将原始矩阵正向化,即,将全部的指标类型统一转换为极大型指标
常见的四种指标:

指标名称 指标特色 举例
极大型指标 越大越好 成绩、企业利润
极小型指标 越小越好 不合格率、污染程度
中间型指标 越接近某个值越好 评估水质量的PH值
区间型指标 落在某个区间最好 体温、水中植物性养分物量

极小型–>极大型:
公式: m a x x max-x
若是全部元素均为整数,也可使用 1 / x 1/x
中间型–>极大型:
{ x i } \left\{ x_i \right\} 是一组中间型指标序列,且最佳的数值为 x b e s t x_{best} ,令 M = m a x { x i x b e s t } M=max\left\{ |x_i-x_{best}| \right\} ,那么正向化的公式以下:
x ~ i = 1 x i x b e s t M \tilde{x}_i=1-\frac{|x_i-x_{best}|}{M}
区间型–>极大型:
{ x i } \left\{ x_i \right\} 是一组区间型指标序列,且最好的区间为 [ a , b ] [a,b] ,令 M = max { a min { x i } , max { x i } b } M=\max \left\{ a-\min \left\{ x_i \right\} ,\max \left\{ x_i \right\} -b \right\}
那么正向化的公式以下:
x ~ i = { 1 a x M   , x < a 1             , a x b 1 x b M   , x > b \tilde{x}_i=\left\{ \begin{array}{l} 1-\frac{a-x}{M}\ ,x<a\\ 1\ \ \ \ \ \ \ \ \ \ \ ,a\le x\le b\\ 1-\frac{x-b}{M}\ ,x>b\\ \end{array} \right.
第二步:对正向化后的矩阵进行标准化
第三步:计算得分并归一化


更新

基于熵权法对Topsis模型的修正

在上述的模型中,最后计算综合得分的时候是默认两个指标(成绩,争吵次数)的权重是相等的,但实际上这样作并不许确,于是咱们引入了熵权法来进行客观赋权
原理: 指标的变异程度(能够理解为方差)越小,所反映的信息量也越少,其对应的权值也应该越低。于是客观是指数据自己就能够告诉咱们权重。
(一个极端的例子:对于某个指标,全部的样本观测值都相同,则能够认为这个指标的权值为 0 0 ,即这个指标对评价没有任何帮助)。
那么要如何度量信息量的大小?
举一个简单的例子:张三和李四是一对表兄弟,张三家里颇有钱,但李四家庭条件不好,某天张三和李四都购买了一辆价值500w的车子,张三家庭富裕,你们以为他购买并不为奇。然而李四则不同,他家庭条件那么差,怎么会买得起500w的车?这带来的信息量就很大。
这个例子告诉咱们:越有可能发生的事情,信息量越少;越不可能发生的事情,信息量就越多
假设 x x 表示事件 X X 可能发生的某种状况, p ( x ) p(x) 表示这种状况发生的几率:
能够定义: I ( x ) = l n ( p ( x ) ) I(x)=-ln(p(x)) ,由于 0 p ( x ) 1 0\le p(x)\le 1 ,因此 I ( x ) 0 I(x)\ge 0 ,而且 I ( x ) I(x) ( 0 , 1 ) (0,1) 上单调递减。
若是事件 X X 可能发生的状况分别为 x 1 , x 2 , . . . x n x_1,x_2,...x_n ,那么能够定义事件 X X 的信息熵为:
H ( x ) = i = 1 n [ p ( x i ) I ( x i ) ] = i = 1 n [ p ( x i ) ln ( p ( x i ) ) ] H\left( x \right) =\sum_{i=1}^n{\left[ p\left( x_i \right) I\left( x_i \right) \right]}=-\sum_{i=1}^n{\left[ p\left( x_i \right) \ln \left( p\left( x_i \right) \right) \right]}
能够看出,信息熵的本质就是信息量的指望值。
能够证实:
p ( x 1 ) = p ( x 2 ) = = p ( x n ) = 1 n H ( x ) 取最大值,此时 H ( x ) = ln n \text{当}p\left( x_1 \right) =p\left( x_2 \right) =\cdots =p\left( x_n \right) =\frac{1}{n}\text{,}H\left( x \right) \text{取最大值,此时}H\left( x \right) =\ln n

熵权法的计算步骤

  1. 判断输入的矩阵中是否存在负数,若是有则要从新标准化到非负区间。

假设有 n n 个要评价的对象, m m 个评价指标,构成的正向化矩阵以下:
X = [ x 11 x 12 x 1 m x 21 x 22 x 2 m x n 1 x n 2 x n m ] X=\left[ \begin{matrix} x_{11}& x_{12}& \cdots& x_{1m}\\ x_{21}& x_{22}& \cdots& x_{2m}\\ \vdots& \vdots& \ddots& \vdots\\ x_{n1}& x_{n2}& \cdots& x_{nm}\\ \end{matrix} \right]
判断 X X 中是否存在负数,若是有,则须要对 X X 使用另外一种标准化。
记标准化后的矩阵为 Z Z ,标准化公式为:
z i j = x i j min { x 1 j , x 2 j , , x n j } max { x 1 j , x 2 j , x n j } min { x 1 j , x 2 j , , x n j } z_{ij}=\frac{x_{ij}-\min \left\{ x_{1j},x_{2j},\cdots ,x_{nj} \right\}}{\max \left\{ x_{1j},x_{2j},\cdots x_{nj} \right\} -\min \left\{ x_{1j},x_{2j},\cdots ,x_{nj} \right\}}

  1. 计算第 j j 项指标下第 i i 个样本发生的几率,记为 p i j p_{ij}
  2. 计算每一个指标的信息熵,并计算信息效用值,并归一化获得每一个指标的熵权。

对于第 j j 个指标而言,其信息熵的计算公式为:
e j = 1 ln n i = 1 n p i j ln ( p i j ) ( j = 1 , 2 , , m ) e_j=-\frac{1}{\ln n}\sum_{i=1}^n{p_{ij}\ln \left( p_{ij} \right)}\left( j=1,2,\cdots ,m \right)
在前面提到过, l n n lnn H ( x ) H(x) 取的最大值,因此能够保证信息熵 e j e_j 始终位于 [ 0 , 1 ] [0,1] 上面。
因为信息熵越大所表明的含义为信息越少,因此这里定义信息效用值 d j = 1 e j d_j=1-e_j ,信息效用值越大,其对应的信息就越多。
将信息效用值进行归一化处理,就能获得每一个指标的熵权 W j = d j / j = 1 m d j ( j = 1 , 2 , , m ) W_j=d_j/\sum_{j=1}^m{d_j}\left( j=1,2,\cdots ,m \right)
所以能够更改前面对"距离"的定义,在距离的基础上乘以该指标对应的权值。
定义第 i ( i = 1 , 2 , , n ) i\left( i=1,2,\cdots ,n \right) 个评价对象与最大值的距离 D i + = j = 1 m w j ( Z j + z i j ) 2 D_i^+=\sqrt{\sum_{j=1}^m{w_j\left( Z_j^+-z_{ij} \right) ^2}}
定义第 i ( i = 1 , 2 , , n ) i\left( i=1,2,\cdots ,n \right) 个评价对象与最小值的距离 D i = j = 1 m w j ( Z j z i j ) 2 D_i^-=\sqrt{\sum_{j=1}^m{w_j\left( Z_j^--z_{ij} \right) ^2}}