TOPSIS法(小白必看&文章包含详细源代码及注释)

您所在的位置:网站首页 样本容量的定义是什么 TOPSIS法(小白必看&文章包含详细源代码及注释)

TOPSIS法(小白必看&文章包含详细源代码及注释)

2024-07-15 13:31| 来源: 网络整理| 查看: 265

这一周我主要学习了TOPSIS法即优劣解距离向量法。

1.AHP的局限性

前两周主要学习了层次分析法,层次分析法存在这样一些局限性:

(1)层次分析法主观性很强,我们建模过程中判断矩阵都是自己手动填写的。

(2)层次分析法方案层不能太多,太多的话,构建的判断矩阵很可能不能通过一致性检验。而且随机一致性指标RI表中n也只给到了15。

(3)层次分析法是根据成对比较法和1~9尺度表构建判断矩阵得到数据的,对于一些有已知数据题目,层次分析法是不能很好利用原始数据的。

2.TOPSIS优点

针对AHP的上述局限性,学习TOPSIS可以弥补层次分析法的一些缺点:

(1)优劣解距离法可以充分利用原始数据信息,且其结果能充分反应各评价方案与最优方案的接近程度。

(2)对样本容量没有严格限制,数据计算简单易行,无需数据检验。(topsis法适用于两个以上)

3.Topsis法简介

1981年,C.L.Hwang和K.Yoon首次提出了Topsis,全称Technique for Order Preference by Similarity to an Ideal Solution,可翻译为逼近理想解排序法,国内常称为优劣解距离法。它是一种常用的综合评价方法。

4.Topsis的基本过程

(1)原始矩阵正向化,得到正向化矩阵

a.指标类型

  指标类型一般分为四种,极大型指标、极小型指标、中间型指标、  区间型指标。

  极大型指标越大越好,极小型指标越小越好,中间型指标越接近中    间值越好,区间型指标落在区间内最好。

b.正向化的公式

正向化就是将原始数据指标都转化为极大型指标。

极小型——极大型:x_{i}=max-x_{i} 

当指标值中没有“0”时也可用公式:x_{i}=\frac{1}{x_{i}}

中间型——极大型:x_{i}=1-\frac{\left | x_{i}-mid \right |}{mid}(其中mid为中间值)

区间型——极大型:

                               \left\{\begin{matrix} x_{i}=1-\frac{a-x_{i}}{M}(x^{i}\leqslant a) & & \\ x_{i}=1 (a\leqslant x_{i}\leqslant b) & & \\ x_{i}=1-\frac{x_{i}-b}{M}(x^{i}\geqslant b) \end{matrix}\right.

 

注:M为距离区间最远的距离,即max(a-min(x_{i}),max(x_{i})-b)          当x在区间内时,正向化后的值为1;

当x小于区间下限a时,x_{i}=1-\frac{a-x_{i}}{M}

当x大于区间上限b时,x_{i}=1-\frac{x_{i}-b}{M};

(2)对正向化矩阵标准化

标准化公式:

                               Z_{ij}=\frac{x_{ij}}{\sqrt{\sum_{1}^{n}x_{ij}^{2}}}

(3)计算得分并归一化

a.构造评分公式:S=\frac{x-min}{max-min}

          评分公式变形:S=\frac{x-min}{(max-x)+(x-min)}

          Topsis的思想:最优解即最大值,最劣解即最小值。

b.计算D+与D-:

          定义最大值:Z+向量用于存放标准化矩阵中每一列的最大值

          定义最小值:Z-向量用于存放标准化矩阵中每一列的最小值

          定义第i个(i=1,2,...,n)个评价对象与最大值的距离:等于第i行每一个元素与其所在列的最大值的差的平方和的0.5次方

定义第i个(i=1,2,...,n)个评价对象与最大值的距离:等于第i行每一个元素与其所在列的最小值的差的平方和的0.5次方

         c.计算未归一化的得分记为G

                                   G=\frac{D_{-}}{D_{+}+D_{-}}

 

d.对得分进行归一化

                           S_{i}=\frac{G_{i}}{ \sum_{1}^{n}G_{i}}

 

5.问题思考

(1)为什么要进行正向化?

(2)为什么要进行标准化,标准化是为了消除量纲的影响,那么可不可以用下面的公式来实现?

                             Z_{ij}=\frac{x_{ij}}{\sqrt{x_{ij}^2}}

(2)构造评分公式的含义,背后的思想

6.代码思路及实现

   (1)通过软件Matlab实现

a.先根据每一步的公式理清思路

b.根据分析,使用for循环实现较为可行

(学习编程软件中for循环相关操作)

c.根据步骤分块实现不同的功能

d.代码编写过程中尽量使每一步结果都输出,这样当结果与预期

不符时方便纠错。并且可输入简单的数值对代码进行检验,查找错

误所在之处,进而修改完善。

e .找相关数据进行结果检验,验证结果的准确性。

(2)通过软件SPSS实现

a.论文中有可通过SPSS实现标准化,导入数据,进行相应操作后,标准化结果却与MATLAB中的结果不同。学习SPSS标准化,有两种不同的标准化方式,即z-score标准化和离差标准化。

b.默认的是z-score标准化。其公式不同于我们步骤中的公式。它是基于原始数据的均值(mean)和标准差(standard deviation)进行数据的标准化。将A的原始值x使用z-score标准化到x’。

步骤如下:

首先求出各变量(指标)的算术平均值(数学期望)xi和标准差si ;进行标准化处理:zij=(xij-xi)/si,其中zij为标准化后的值;xij为实际值。

最后将逆指标前的正负号对调。

z-score标准化后的变量值围绕0上下波动,大于0说明高于平均水平,小于0说明低于平均水平。

c.我们MATLAB中使用的公式是SPSS中标准化的规范化方法,也叫离差标准化,是对原始数据的线性变换,使结果映射到[0,1]区间。

可以通过SPSS的语法编辑窗口来编写代码实现TOPSIS(需要学习并掌握SPSS的基础语法才能实现代码的功能实现)

(3)MATLAB代码简单思路

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3