【Matlab数学建模】TOPSIS(优劣解距离法)

一、问题引入

  先分析一下层次分析法的不足。

  ① 平均随机一致性指标RI的表格中,n最大为15。那么n太大的话,无法进行一致性检验。
平均随机一致性检验表格
  ② 如果决策层中指标的数据是已知的,那么我们如何利用这些数据来使得评价的更加准确呢?
特例

二、极大型指标构造计算评分

  ① 第一步:求最大最小值。

  ② 第二步:带入构造计算评分的公式 x − m i n m a x − m i n \frac{x - min}{max - min} maxminxmin

  ③ 第三步:进行归一化。
构造计算评分
  代码演示:

function res = func(a)
	mnmx = minmax(a);
	res = (a - mnmx(1)) / (mnmx(2) - mnmx(1));
	res = res / sum(res);
end

  (注:上面的评分规则是不正确的,只是用来抛砖引玉,正确的评分规则见下文“三、标准化”)

  但是有时候评分不是越大越好,而是越小越好,或者越接近某个值越好,越接近某个区间越好。那就要把这些指标转换成极大型。这个过程叫做正向化。

  但是不同指标的量纲是不一样的,为了消除量纲带来的影响,我们需要进行标准化。

  下面先介绍标准化,在介绍正向化。

三、标准化

  例如对于m个要评价的对象,n个评价指标的正向化矩阵:
X = ( x 11 x 12 ⋯ x 1 n x 21 x 22 ⋯ x 2 n ⋮ ⋮ ⋱ ⋮ x m 1 x m 2 ⋯ x m n ) X = \begin{pmatrix} x_{11} & x_{12} & \cdots & x_{1n}\\ x_{21} & x_{22} & \cdots & x_{2n}\\ \vdots & \vdots & \ddots & \vdots\\ x_{m1} & x_{m2} & \cdots & x_{mn} \end{pmatrix} X=x11x21xm1x12x22xm2x1nx2nxmn
  将标准化后的矩阵记作Z,则Z中的每一个元素满足:
z i j = x i j ∑ i = 1 m x i j 2 z_{ij} = \frac{x_{ij}}{\sqrt{\sum\limits^m_{i=1}x^2_{ij}}} zij=i=1mxij2 xij
  用代码描述为:

function Z = func(X)
	[m, ~] = size(X);
	Z = X ./ repmat(sum(X .^ 2) .^ 0.5, m, 1);
end

  接下来对标准化矩阵求解各指标得分:
Z = ( z 11 z 12 ⋯ z 1 n z 21 z 22 ⋯ z 2 n ⋮ ⋮ ⋱ ⋮ z m 1 z m 2 ⋯ z m n ) Z = \begin{pmatrix} z_{11} & z_{12} & \cdots & z_{1n}\\ z_{21} & z_{22} & \cdots & z_{2n}\\ \vdots & \vdots & \ddots & \vdots\\ z_{m1} & z_{m2} & \cdots & z_{mn} \end{pmatrix}\\ Z=z11z21zm1z12z22zm2z1nz2nzmn
令 Z j + = max ⁡ ( z 1 j , z 2 j , ⋯   , z m j ) Z j − = min ⁡ ( z 1 j , z 2 j , ⋯   . z m j ) 令Z^+_j = \max(z_{1j}, z_{2j}, \cdots, z_{mj})\\ Z^-_j = \min(z_{1j}, z_{2j}, \cdots. z_{mj})\\ Zj+=max(z1j,z2j,,zmj)Zj=min(z1j,z2j,.zmj)
D + = ( Z 1 + , Z 2 + , ⋯   , Z j + ) D − = ( Z 1 − , Z 2 − , ⋯   , Z j − ) D^+ = (Z^+_1, Z^+_2, \cdots, Z^+_j)\\ D^- = (Z^-_1, Z^-_2, \cdots, Z^-_j)\\ D+=(Z1+,Z2+,,Zj+)D=(Z1,Z2,,Zj)
D i + = ∑ j = 1 n ( Z j + − z i j ) 2 D^+_i = \sqrt{\sum\limits^n_{j = 1}(Z^+_j - z_{ij})^2}\\ Di+=j=1n(Zj+zij)2
D i − = ∑ j = 1 n ( Z j − − z i j ) 2 未 归 一 化 的 评 分 S i = D i − D i + + D i − D^-_i = \sqrt{\sum\limits^n_{j = 1}(Z^-_j - z_{ij})^2}\\ 未归一化的评分S_i = \frac{D^-_i}{D^+_i + D^-_i} Di=j=1n(Zjzij)2 Si=Di++DiDi
  代码描述为:

function S = func(Z)

	ZP = sum((repmat(max(Z), size(Z, 1), 1) - Z) .^ 2, 2) .^ 0.5;
	ZN = sum((repmat(min(Z), size(Z, 1), 1) - Z) .^ 2, 2) .^ 0.5;
	
	S = ZN / (ZP + ZN);
	S = S ./ sum(S);
	
end

  长度还能再凹一下:

function S = func(Z)
	S = 1 ./ (1 + sum((repmat(max(Z), size(Z, 1), 1) - Z) .^ 2, 2) .^ 0.5 ./ sum((repmat(min(Z), size(Z, 1), 1) - Z) .^ 2, 2) .^ 0.5);
	S = S ./ sum(S);
end

四、正向化

常见的四种指标

① 极小型

  非常简单: x i ~ = m a x { x } − x i \widetilde{x_i} = max\{x\} - x_i xi =max{x}xi

function res = func(x)
	res = max(x) - x;
end
② 中间型

  设最佳取值为 x b e s t x_{best} xbest,则正向化公式如下:
M = m a x { ∣ x − x b e s t ∣ } M = max\{|x - x_{best}|\}\\ M=max{xxbest}
x i ~ = 1 − ∣ x i − x b e s t ∣ M \widetilde{x_i} = 1 - \frac{|x_i - x_{best}|}{M} xi =1Mxixbest

function res = func(x, x_best)
	dis = abs(x - x_best);
	res = 1 - dis / max(dis);
end
④ 区间型

  设最佳区间为 [ a , b ] [a, b] [a,b],则正向化公式如下:
M = m a x { a − min ⁡ { x i } , max ⁡ { x i } − b } M = max\{a - \min\{x_i\}, \max\{x_i\} - b\} M=max{amin{xi},max{xi}b}
x i ~ = { 1 − a − x i M , x i < a 1 , a ≤ x i ≤ b 1 − x i − b M , x i > b \widetilde{x_i} = \left\{ \begin{aligned} 1 - \frac{a - x_i}{M}, x_i < a\\ 1, a ≤ x_i ≤ b\\ 1 - \frac{x_i - b}{M}, x_i > b \end{aligned} \right. xi =1Maxi,xi<a1,axib1Mxib,xi>b

function res = func(x, ab)
	
	l = x < ab(1);
	other = ab(1) <= x & x <= ab(2);
	g = ab(2) < x;
	
	M = max([ab(1) - min(x), max(x) - ab(2)]);
	
	res(l) = 1 - (ab(1) - x(l)) / M;
	res(other) = 1;
	res(g) = 1 - (x(g) - ab(2)) / M;
	
end
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九死九歌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值