综合评价与决策方法
TOPSIS法
原理
正理想解
C
∗
C^*
C∗是一个方案集
D
D
D中并不存在的虚拟的最佳方案,它的每个属性值都是决策矩阵中该属性的最好值;而负理想解
C
0
C^0
C0则是虚拟的最差方案,它的每个属性值都是决策矩阵中该属性的最差值。在 维空间中,将方案集
D
D
D 中的各备选方案
d
i
d_i
di 与正理想解
C
∗
C^*
C∗ 和负理想解
D
D
D 的距离进行比较,既靠近正理想解又远离负理想解的方案就是方案集
D
D
D 中的最佳方案;并可以据此排定方案集
D
D
D中各备选方案的优先序。
用理想解法求解多属性决策问题的概念简单,只要在属性空间定义适当的距离测度就能计算备选方案与理想解的距离。TOPSIS法所用的是欧氏距离。至于既用正理想解又用负理想解是因为在仅仅使用正理想解时有时会出现某两个备选方案与正理想解的距离相同的情况,为了区分这两个方案的优劣,引入负理想解并计算这两个方案与负理想解的距离,与正理想解的距离相同的方案离负理想解远者为优。
具体步骤
数据预处理
一致化 :
属性具有多种类型,包括效益型、成本型和区间型等。这三种属性,效益型属性越大越好,成本型属性越小越好,区间型属性是在某个区间最佳。
将属性的类型做一致化处理,使得表中任一属性下性能越优的方案变换后的属性值越大。
clc, clear
x2=@(qujian,lb,ub,x)(1-(qujian(1)-x)./(qujian(1)-lb)).*...
(x>=lb & x<qujian(1))+(x>=qujian(1) & x<=qujian(2))+...
(1-(x-qujian(2))./(ub-qujian(2))).*(x>qujian(2) & x<=ub);
%上述语句定义变换的匿名函数,语句太长,使用了两个续行符
% f=@(输入参数们) 表达式
qujian=[5,6]; lb=2; ub=12; %最优区间,无法容忍下界和上界
x2data=[5 6 7 10 2]'; %x2属性值
y2=x2(qujian,lb,ub,x2data) %调用匿名函数,进行数据变换
规范化
与下面介绍的几种变换不同,从变换后属性值的大小上无法分辨属性值的优劣。它的最大特点是,规范化后,各方案的同一属性值的平方和为1,因此常用于计算各方案与某种虚拟方案(如理想点或负理想点)的欧氏距离的场合。
for j=1:n
b(:,j)=a(:,j)/norm(a(:,j)); %向量规划化
end
无量纲化 :
在用各种多属性决策方法进行分析评价时,需要排除量纲的选用对决策或评估结果的影响,这就是无量纲化
y=zscore(x);
归一化 :
属性值表中不同指标的属性值的数值大小差别很大,为了直观,更为了便于采用各种多属性决策与评估方法进行评价,需要把属性值表中的数值归一化,即把表中数值均变换到[0,1]区间上
x
=
x
−
m
i
n
m
a
x
−
m
i
n
x=\displaystyle \frac{x-min}{max-min}
x=max−minx−min
A =
m
a
p
m
i
n
m
a
x
mapminmax
mapminmax(A,0,1);%归一化
mapminmax按行逐行地对数据进行标准化处理,将每一行数据分别标准化到区间[ymin, ymax]内,其计算公式是:y = (ymax-ymin)*(x-xmin)/(xmax-xmin) + ymin。YMIN和YMAX为调用mapminmax函数时设置的参数,如果不设置这两个参数,这默认归一化到区间[-1, 1]内。标准化处理后的数据为Y,PS为记录标准化映射的结构体
[y1,PS] = mapminmax(x1,ymin,ymax)
当需要对另外一组数据做归一时,就可以用下面的方法做相同的归一了
y2 = mapminmax('apply',x2,PS)
当需要把归一的数据还原时,可以用以下命令:
x1_again= mapminmax('reverse',y1,PS)
此外,还可在属性规范时用非线形变换或其它办法,来解决或部分解决某些目标的达到程度与属性值之间的非线性关系,以及目标间的不完全补偿性。常用的属性规范化方法有以下几种。
加权矩阵
[m,n]=size(b);
c=b.*repmat(w,m,1);
确定正负理想解
Cstar=max(c) %求正理想解,每种属性都取最优值,max取每列最大值
Cstar(4)=min(c(:,4)) %属性4为成本型的,得取最小的
C0=min(c); %q求负理想解
C0(4)=max(c(:,4)) %属性4为成本型的
各方案到正负理想解的距离
for i=1:m
Sstar(i)=norm(c(i,:)-Cstar); %求到正理想解的距离
S0(i)=norm(c(i,:)-C0); %求到负理想的距离
end
或者
Sstar=vecnorm(c-Cstar,2,2) %逐行计算2范数即到正理想解的距离
S0=vecnorm(c-C0,2,2) %逐行计算2范数即到负理想解的距离
计算 综合评价指数并排序
f=S0./(Sstar+S0);
[sf,ind]=sort(f,'descend') %求排序结果
完整代码
对于一致化,只对区间型属性 进行了变换,成本型属性没管
向量规范化,使得各方案同一属性平方和为1,方便计算到理想解的距离
求理想解时,考虑了成本型属性,在最优方案中选取了成本属性最小的值
没有进行标准化处理(消除量纲)
没有进行归一化(不同指标的属性值的数值大小差别很大)
clc, clear
format short g
a=[0.1 5 5000 4.7
0.2 6 6000 5.6
0.4 7 7000 6.7
0.9 10 10000 2.3
1.2 2 400 1.8];
[m,n]=size(a);
% a=zscore(a) 消除无量纲,标准化(规范化,下面那个规范化应该叫 模一化)
% 先消除了无量纲,区间属性那一列就都不会落在可以接收的区间内了
x2=@(qujian,lb,ub,x)(1-(qujian(1)-x)./(qujian(1)-lb)).*...
(x>=lb & x<qujian(1))+(x>=qujian(1) & x<=qujian(2))+...
(1-(x-qujian(2))./(ub-qujian(2))).*(x>qujian(2) & x<=ub);
qujian=[5,6]; lb=2; ub=12;
a(:,2)=x2(qujian,lb,ub,a(:,2)); %对区间型属性2进行变换
a=zscore(a); %先搞好区间属性再来消除无量纲
for j=1:n
b(:,j)=a(:,j)/norm(a(:,j)); %向量规范化 进行矩阵规范化
end
% b=a./vecnorm(a) %废了废了,2016版本用不起vecnorm
b
w=[0.2 0.3 0.4 0.1];
c=b.*repmat(w,m,1) %求加权矩阵 ,repmat堆叠矩阵
Cstar=max(c) %求正理想解,每种属性都取最优值,max取每列最大值
Cstar(4)=min(c(:,4)) %属性4为成本型的,得取最小的
C0=min(c); %q求负理想解
C0(4)=max(c(:,4)) %属性4为成本型的
for i=1:m
Sstar(i)=norm(c(i,:)-Cstar); %求到正理想解的距离
S0(i)=norm(c(i,:)-C0); %求到负理想的距离
end
f=S0./(Sstar+S0);
[sf,ind]=sort(f,'descend') %求排序结果
% Sstar=vecnorm(c-Cstar,2,2) %逐行计算2范数即到正理想解的距离
% S0=vecnorm(c-C0,2,2) %逐行计算2范数即到负理想解的距离
% f=S0./(Sstar+S0)
% [sf,ind]=sort(f,'descend') %求排序结果