数学建模-TOPSIS法

来自清风老师数学建模的教程

TOPSIS法(Technique for Order Preference by Similarity to Ideal Solution)可翻译为逼近理想解排序法,国内常简称为优劣解距离法。

TOPSIS 法是一种常用的综合评价方法,其能充分利用原始数据的信息,其结果能精确地反映各评价方案之间的差距。

层次分析法具有一定的局限性:

下面将以宿舍四名同学的为例:

最简单的想法就是直接按成绩的高低进行排名(成绩最高的为第一名,成绩最低的为最后一名)

这种评分方式有不合理之处,只要保证四位同学的排名不发生变化,只改变对应同学的成绩并不会影响四位同学的评分,这种评分方式只与排名相关,并不会实际的反映分数上的差距。

通过TOPSIS法,选取出这组数据的最大值和最小值,以最大值和最小值的距离为分,以各个值到最小值的距离为分母对以上同学进行评分,这就是TOPSIS法(优劣解距离法)。

 现对问题进行扩展,要对四名同学进行综合评估,增加一个与他人争吵次数的指标。

 成绩是越高越好,与他人争吵次数是越少越好,两个评价指标的方向不同,现需要统一两个评价指标的方向,便于对对应同学进行综合评估。

 为了消去不同指标量纲的影响,还需要对已经正向化的矩阵进行标准化处理。标准化处理的计算公式:

topsis法(优劣解距离法)的直观解释:

 

 类比于一个指标下的topsis法,多指标的topsis法评分方法一致:

现对以上两个指标(高数成绩,与他人争吵的次数)采用topsis法进行评分:

 计算得分:

topsis法的实现步骤:

 第一步:将所有指标进行正向化。所谓的将原始矩阵正向化,就是要将所有的指标类型统一转化为极大型指标。(转换的函数形式可以不唯一哦~ )

 不同类型的指标转化的方式:极小型转化为极大型指标方法

 中间型指标转化为极大型指标:

 区间型指标转化为极大型指标:

 第二步:将正向化矩阵标准化(目的是消除不同指标的不同量纲的影响)。

标准化的方法有很多种,其主要目的就是去除量纲的影响。计算得分并归一化。

 

  • 19
    点赞
  • 99
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
TOPSIS是一种多属性决策分析方,可以用来评价多个决策方案的相对优劣。Matlab中可以使用以下代码实现: 假设有4个决策方案,每个方案有3个评价指标,存储在一个4行3列的矩阵X中。 ```matlab X = [3 2 6; 5 4 8; 7 5 9; 4 6 7]; ``` 首先需要将所有指标标准化,使得它们的取值范围相同。可以使用以下代码实现: ```matlab [n,m] = size(X); % n为方案数,m为指标数 X1 = X./sqrt(sum(X.^2)); % 指标标准化 ``` 接下来,需要确定每个指标的权重。可以使用主观赋权或客观赋权来确定权重。这里假设已经确定了指标权重,存储在一个1行3列的矩阵W中。 ```matlab W = [0.3 0.4 0.3]; % 指标权重 ``` 然后计算加权规范化矩阵,即将指标标准化后乘以指标权重,得到每个方案的加权规范化得分。 ```matlab X2 = X1.*W; % 加权规范化矩阵 ``` 接下来需要确定正负理想解。正理想解是指在每个指标上取值最大的方案,负理想解是指在每个指标上取值最小的方案。可以使用以下代码实现: ```matlab Z = [max(X2); min(X2)]; % 正负理想解 ``` 然后计算每个方案到正负理想解的距离,可以使用欧氏距离或曼哈顿距离。这里使用欧氏距离。 ```matlab D = sqrt(sum((X2-Z(:,1)').^2,2)) ./ (sqrt(sum((X2-Z(:,1)').^2,2)) + sqrt(sum((X2-Z(:,2)').^2,2))); % 距离值 ``` 最后按照距离值的大小排序,得到每个方案的相对优劣程度。 ```matlab [~,rank] = sort(D,'descend'); % 相对优劣程度排序 ``` rank中的第一个元素即为最优方案的编号。 完整的代码如下: ```matlab X = [3 2 6; 5 4 8; 7 5 9; 4 6 7]; [n,m] = size(X); X1 = X./sqrt(sum(X.^2)); % 指标标准化 W = [0.3 0.4 0.3]; % 指标权重 X2 = X1.*W; % 加权规范化矩阵 Z = [max(X2); min(X2)]; % 正负理想解 D = sqrt(sum((X2-Z(:,1)').^2,2)) ./ (sqrt(sum((X2-Z(:,1)').^2,2)) + sqrt(sum((X2-Z(:,2)').^2,2))); % 距离值 [~,rank] = sort(D,'descend'); % 相对优劣程度排序 ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值