1-AI带你认识TOPSIS
📘 一、TOPSIS 方法简介
1. 基本定义:
TOPSIS(Technique for Order Preference by Similarity to an Ideal Solution),中文通常称为:
- •
优劣解距离法
- •
逼近理想解排序法
- •
理想点法
它是一种经典的多指标综合评价方法,由 C.L. Hwang 和 K. Yoon 于 1981 年提出,主要用于解决多方案、多指标的综合排序与优选问题。
2. 核心思想:
TOPSIS 的核心思想是:通过计算每个评价对象与“理想解”(最优方案)和“负理想解”(最劣方案)之间的距离,来对各个方案进行优劣排序;距离“理想解”越近、距离“负理想解”越远的方案,其综合评价结果越好。
简单来说就是:
- •
先找出所有对象中每个指标的最好值(正理想解) 和 最差值(负理想解)
- •
然后计算每个方案到这两个理想点的距离
- •
最后根据接近最优、远离最劣的程度进行排序,距离最优最近、最劣最远的方案最优
🧩 二、TOPSIS 方法的基本步骤
下面是 TOPSIS 方法的标准操作流程(非常规范、清晰,适合建模与论文使用):
步骤 1:构建原始决策矩阵
假设有 m 个评价对象(如方案、城市、企业等),n 个评价指标,构建初始数据矩阵:
X=x11x21⋮xm1x12x22⋮xm2⋯⋯⋱⋯x1nx2n⋮xmn其中 xij表示第 i个对象在第 j个指标上的原始取值。
步骤 2:数据标准化处理
由于不同指标可能具有不同的量纲(单位)、数量级,需要对原始数据进行标准化(归一化)处理,消除量纲影响,常用方法为:
(1)向量归一化(常用):
yij=∑i=1mxij2xij或者(2)极差标准化(区分正向/负向指标):
- •
正向指标(越大越好):
yij=max(xj)−min(xj)xij−min(xj)
- •
负向指标(越小越好):
yij=max(xj)−min(xj)max(xj)−xij标准化后得到矩阵 Y=(yij)m×n,其中各元素 yij∈[0,1]
步骤 3:确定加权标准化矩阵(可选)
如果各指标的重要性不同,可以引入权重 wj(如通过 AHP、熵权法等方法获得),构造加权标准化决策矩阵:
V=(vij)m×n,vij=wj⋅yij其中 wj是第 j 个指标的权重,且满足 ∑j=1nwj=1
✅ 在实际应用中,TOPSIS 往往会结合主观或客观权重方法使用,使评价更加科学合理。
步骤 4:确定正理想解和负理想解
- •
正理想解(最优解) V+:每个指标取最优值
- •
对于 正向指标:取最大值
- •
对于 负向指标:取最小值
- •
负理想解(最劣解) V−:每个指标取最劣值
- •
对于 正向指标:取最小值
- •
对于 负向指标:取最大值
具体为:
vj+=max(v1j,v2j,...,vmj)或min(v1j,...,vmj)(根据指标类型)vj−=min(v1j,v2j,...,vmj)或max(v1j,...,vmj)(根据指标类型)
步骤 5:计算各方案到正、负理想解的距离
- •
到正理想解的距离(欧氏距离):
Di+=j=1∑n(vij−vj+)2
- •
到负理想解的距离(欧氏距离):
Di−=j=1∑n(vij−vj−)2其中 Di+越小越好,Di−越大越好。
步骤 6:计算相对贴近度(综合得分)
Ci=Di++Di−Di−,0≤Ci≤1
- •
Ci越接近 1,说明该方案越接近最优解、远离最劣解,评价结果越好
- •
Ci越接近 0,说明该方案越差
步骤 7:排序与决策
- •
按照 Ci值从大到小排序
- •
Ci最大的方案即为最优方案
✅ 三、TOPSIS 方法的优点与缺点
✅ 优点:
- 1.
直观易懂:基于“距离理想解”的思想,逻辑清晰,易于理解与解释
- 2.
适用性广:适用于多指标、多方案的综合评价与排序问题
- 3.
综合正负两方面信息:同时考虑最优和最劣情况,评价更全面
- 4.
结果明确:能给出清晰的方案优劣排序,便于决策
- 5.
可结合权重:常与 AHP、熵权法等结合,使用主观或客观权重,提高科学性
❌ 缺点:
- 1.
对数据标准化方法敏感:不同的标准化方式可能影响结果
- 2.
依赖权重设置:权重的合理性直接影响排序结果
- 3.
仅基于距离度量:未考虑指标之间的相关性等更复杂信息
📚 四、TOPSIS 的应用场景举例
- •
方案优选类问题:如选择最优投资方案、供应商、旅游地、城市规划方案等
- •
绩效评价类问题:如企业绩效、政府绩效、学校排名、医院服务评价等
- •
综合评价类问题:如城市竞争力、环境质量、能源效率、技术创新能力等
- •
多指标决策问题:几乎所有涉及多个指标、多个对象优选排序的问题
🧠 五、总结一句话:
TOPSIS(优劣解距离法)是一种基于“距离理想解”思想的多指标综合评价方法,通过计算各评价对象与最优解和最劣解的距离,得到相对贴近度,从而进行排序与优选,是一种直观、科学、应用广泛的决策分析工具。
2-理论知识
介绍
答案:不是
定义
步骤
1)正向化
极小型转极大型
中间型转极大型
区间型转极大型
2)标准化
3)优劣解打分
优秀论文
课后习题
3-基于matlab实现优劣解距离法
源代码(包含详细注释)
%% 初始化数据
disp('--------------------------初始化数据--------------------------');
X = [99 0.010;100 0.012;98 0.040;97 0.033]
[n,m] = size(X);
disp(['有' num2str(n) '个评价对象,' num2str(m) '个评价指标']);%% 正向化
disp('--------------------------进行正向化--------------------------');
vec = input('请输入要正向化的向量组,如[1 2 3]表示1、2、3列需要正向化,如果都不需要输入0:\n')
if (vec~=0)% 遍历需要正向化的列for i = 1:size(vec)option = input(['第' num2str(vec(i)) '列是哪类数据?(【1】极小型【2】中间型【3】区间型),请输入序号:\n']);% 极小型if (option == 1)X(:,vec(i)) = Min2Max(X(:,vec(i)))% 中间型elseif (option == 2)best = input('请输入中间型的最佳值,如180:\n');X(:,vec(i)) = Mid2Max(X(:,vec(i)),best)% 区间型elseif (option == 3)bound = input('请输入最佳区间,按照"[a b]"的格式,如[80 90]:\n');X(:,vec(i)) = Int2Max(X(:,vec(i)),bound(1),bound(2))elsedisp('输入的序号错误,不存在这类数据\n');endend
end%% 标准化
disp('--------------------------进行标准化--------------------------');
% 行数代表评判对象个数--n
% 列数代表评判指标个数--m
[n,m] = size(X)
exist = 0;
% 遍历矩阵确认是否存在负数
for i = 1 :nfor j = 1:mif (X(i,j)<0)exist = 1;break;endend
end% 如果不存在负数
if (exist == 0)% 每个元素都先平方square_X = X.*X% 先按列求和,再开方sum_X = sum(square_X,1) .^ 0.5Z = X ./ repmat(sum_X,n,1)
% 如果存在负数
else% 求出每一列的最大值max_X = max(X,[],1)% 求出每一列的最小值min_X = min(X,[],1)Z = (X - repmat(min_X,n,1)) ./ (repmat(max_X,n,1) - repmat(min_X,n,1))
end%% 方法一:距离法打分
disp('--------------------------距离法打分--------------------------');
% 按照列得到最值元素
x_max = max(Z,[],1)
x_min = min(Z,[],1)
% 距离法打分
Disntance_Score = (Z - repmat(x_min,n,1)) ./ (x_max - x_min)%% 方法二:优劣解打分
disp('--------------------------优劣解打分--------------------------');
% 生成默认值为1的m维权值列向量
w = ones(m,1)
is_need_weight = input('是否需要权重,若需要,请输入1,否则输入0:');
if (is_need_weight==1)w = [];for i = 1 : mw_j = input(['请输入第' num2str(i) '个指标的权重:']);w = [w;w_j];end
end
% 得到每列最值元素,复制n行变成成n×m型矩阵
Z_plus=repmat(max(Z,[],1),n,1)
Z_sub=repmat(min(Z,[],1),n,1)
D_plus=sum(((Z - Z_plus) .^ 2 ) * w , 2) .^ 0.5
D_sub=sum(((Z - Z_sub) .^ 2 ) * w , 2) .^ 0.5
S = D_sub ./ (D_plus+D_sub)
TOPSIS_Score = S ./ sum(S)%% 保存数据到excel表格
xlswrite('TOPSIS.xlsx',TOPSIS_Score);%% 以下是局部函数
% 极小型转为极大型,传入参数X为极小型数据,输出参数res极大型数据
function [res] = Min2Max(X)res = max(X)-X;
end% 中间型转为极大型,传入参数X为中间型数据,best为最佳值,输出参数res为极大型数据
function [res] = Mid2Max(X,best)M = max(abs(X-best));res = 1-abs(X-best)/M;
end% 区间型转为极大型
% 传入参数x为区间型数据,a,b分别为区间最佳最小值和最佳最大值
% 输入参数res为及大型数据
function [res] = Int2Max(X,a,b)M = max(a - min(X),max(X)-b);for i = 1:size(X)if (X(i)<a)X(i) = 1 - (a - X(i))/M;elseif (X(i) >= a && X(i) <= b)X(i) = 1;elseif (X(i) > b)X(i) = 1 - (X(i) - b)/M;endendres = X;
end
运行结果
在同目录下产生了一个excel文件