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=​x11​x21​⋮xm1​​x12​x22​⋮xm2​​⋯⋯⋱⋯​x1n​x2n​⋮xmn​​​

其中 xij​表示第 i个对象在第 j个指标上的原始取值。


步骤 2:数据标准化处理

由于不同指标可能具有不同的量纲(单位)、数量级,需要对原始数据进行​​标准化(归一化)处理​​,消除量纲影响,常用方法为:

(1)向量归一化(常用):
yij​=∑i=1m​xij2​​xij​​
或者(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=1n​wj​=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. 1.

    ​直观易懂​​:基于“距离理想解”的思想,逻辑清晰,易于理解与解释

  2. 2.

    ​适用性广​​:适用于多指标、多方案的综合评价与排序问题

  3. 3.

    ​综合正负两方面信息​​:同时考虑最优和最劣情况,评价更全面

  4. 4.

    ​结果明确​​:能给出清晰的方案优劣排序,便于决策

  5. 5.

    ​可结合权重​​:常与 AHP、熵权法等结合,使用主观或客观权重,提高科学性

❌ 缺点:

  1. 1.

    ​对数据标准化方法敏感​​:不同的标准化方式可能影响结果

  2. 2.

    ​依赖权重设置​​:权重的合理性直接影响排序结果

  3. 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文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/93853.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/93853.shtml
英文地址,请注明出处:http://en.pswp.cn/web/93853.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Go协程:从汇编视角揭秘实现奥秘

&#x1f680; Go协程&#xff1a;从汇编视角揭秘实现奥秘 #Go语言 #协程原理 #并发编程 #底层实现 引用&#xff1a; 关于 Go 协同程序&#xff08;Coroutines 协程&#xff09;、Go 汇编及一些注意事项。 &#x1f31f; 前言&#xff1a;重新定义并发编程范式 在当今高并发…

MySQL 事务(重点)

MySQL 这个东西注定是可能会被多个用户/客户端来同时访问的&#xff0c;这是肯定的&#xff0c;MySQL 中存放的都是数据&#xff0c;数据可能有一个上层线程在用&#xff0c;也有可能另一个线程也要用...数据是被所有人共享的&#xff0c;所以就注定了 MySQL 这样的服务在一个时…

uniapp:h5链接拉起支付宝支付

场景&#xff1a;APP内点击支付宝支付&#xff0c;后台返回类似链接https://qr.alipay.com/bax***********c3050 通常做法是&#xff0c;使用plus.runtime.openURL(deeplink);先打开浏览器&#xff0c;浏览器会提示打开支付宝&#xff0c;之后是支付流程。现在可以省略跳转h5的…

吴恩达 Machine Learning(Class 3)

Week 11.1 K-means Cluster centroidK-means 是无监督学习中聚类算法的一种&#xff0c;核心在于更新聚类质心&#xff1b;首先将每个点分配给几个聚类质心&#xff0c;取决于那些点离哪个质心更近&#xff1b;然后将几个聚类质心移动到分配给他的所有点的平均值&#xff0c;不…

MyBatis 动态查询语句详解:让 SQL 更灵活可控

MyBatis 动态查询语句详解&#xff1a;让 SQL 更灵活可控 在日常的数据库操作中&#xff0c;我们经常会遇到需要根据不同条件拼接 SQL 语句的场景。比如查询用户时&#xff0c;可能需要根据姓名、年龄、性别等多个条件进行筛选&#xff0c;而这些条件往往是动态变化的 —— 有时…

Java基础语法three

一、一维数组一维数组初始化数据类型[] 数组名new 数据类型[数组长度]//动态初始化数据类型[] 数组名new 数据类型[]{值}//静态初始化数据类型[] 数组名{值}数组长度一旦确定&#xff0c;就不可更改。数组是序排序&#xff1b;数组属于引用数据类型的变量&#xff0c;数组的元素…

【数据结构】排序算法全解析:概念与接口

1.排序的概念及其运用 1.1 排序的概念 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性&#xff1a;假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的…

在 CentOS 7 上使用 LAMP 架构部署 WordPress

CentOS 7 LAMP 架构部署 WordPress全步骤本文将详细介绍如何在 CentOS 7 系统上通过 LAMP&#xff08;Linux Apache MariaDB PHP&#xff09;架构部署 WordPress 博客平台。 在CentOS 7上基于LAMP架构部署WordPress 一、系统基础配置 1. 修改主机名&#xff08;本机IP&#…

Node.js导入MongoDB具体操作

在Node.js应用程序中&#xff0c;导入MongoDB是一项常见任务。本文将详细介绍如何在Node.js中连接和操作MongoDB数据库&#xff0c;包括安装必要的包、配置连接、执行基本的CRUD操作等步骤。1. 安装必要的包首先&#xff0c;确保你已经安装了Node.js和npm。然后&#xff0c;通过…

HTML--pre标签的作用

原文网址&#xff1a;HTML--pre标签的作用-CSDN博客 简介 本文介绍HTML里pre标签的作用。 <pre> 元素表示预定义格式文本。里边的文本会保留原格式&#xff0c;以等宽字体的形式展现出来&#xff0c;文本中的空白符&#xff08;比如空格和换行符&#xff09;都会显示出…

机器学习--数据预处理

目录 一、数据清洗&#xff1a;让数据纯净如新 1、缺失值处理&#xff1a; 2、异常值处理 3、重复值处理 二、数据变换&#xff1a;重塑数据的 “形状” 1、归一化 2、标准化 三、总结与展望 机器学习小白必看&#xff1a;数据预处理实战笔记 最近投身于机器学习的学习…

Python 数据可视化:Matplotlib 与 Seaborn 实战

Python 数据可视化&#xff1a;Matplotlib 与 Seaborn 实战​​​​在当今数据驱动的时代&#xff0c;数据可视化成为了理解和传达数据信息的关键手段。Python 作为一门强大的编程语言&#xff0c;拥有丰富的数据可视化库&#xff0c;其中 Matplotlib 和 Seaborn 尤为突出。本文…

计算机网络技术学习-day4《路由器配置》

目录 一、路由器基础认知 1. 路由器的核心功能 2. 路由器与交换机的区别 二、路由器配置基础操作 1. CLI&#xff08;命令行界面&#xff09;模式体系 2. 基础配置命令示例 &#xff08;1&#xff09;基础信息配置 &#xff08;2&#xff09;接口IP地址配置&#xff08;…

IDEA(十四) IntelliJ Idea 常用快捷键(Mac)

目录准备&#xff1a;Mac键盘符号和修饰键说明一、编辑类快捷键二、Search/Replace&#xff08;查询/替换&#xff09;三、编译、运行四、debug 调试五、Navigation&#xff08;导航&#xff09;六、Refactoring&#xff08;重构&#xff09;七、VCS/Local History八、Live Tem…

八月月报丨MaxKB在教育及教学科研领域的应用进展

在2025年5月的“MaxKB用户应用月度报告”中&#xff0c;我们对MaxKB开源智能体平台在教育行业的典型应用场景进行了总结。MaxKB在教育行业的应用主要集中在教学辅助、学术研究、校园服务、行政办公、财务管理、招生等场景。 目前&#xff0c;“DeepSeekMaxKB”的组合正在被包括…

一周学会Matplotlib3 Python 数据可视化-绘制自相关图

锋哥原创的Matplotlib3 Python数据可视化视频教程&#xff1a; 2026版 Matplotlib3 Python 数据可视化 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 课程介绍 本课程讲解利用python进行数据可视化 科研绘图-Matplotlib&#xff0c;学习Matplotlib图形参数基本设置&…

第三十三天(信号量)

非常非常非常.....的重要在共享内存的代码里面p1.c实质是有问题lt._flag 1;//这里先置1if(c Q)sprintf(lt._buf,"quit");elsesprintf(lt._buf,"大家好&#xff0c;%d 我系渣渣辉. %d 是兄弟就来砍我吧!!! %d",i,i1,i2);while(*((int *)shmptr));//如果别…

Scikit-learn通关秘籍:从鸢尾花分类到房价预测

点击 “AladdinEdu&#xff0c;同学们用得起的【H卡】算力平台”&#xff0c;H卡级别算力&#xff0c;按量计费&#xff0c;灵活弹性&#xff0c;顶级配置&#xff0c;学生专属优惠。 决策树/SVM/KNN算法对比 模型评估指标解析 读者收获&#xff1a;掌握经典机器学习全流程 …

rsync + inotify 数据实时同步

rsync inotify 数据实时同步 一、rsync简介 rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步&#xff0c; 支持本地复制&#xff0c;或者与其他SSH、rsync主机同步 二、rsync三种命令 Rsync的命令格式常用的有以下三种&#xff1a;&#…

Linux基础介绍-3——第一阶段

文章目录一、进程管理1.1 进程的基本概念1.2 常见管理命令1.3 进程优先级调整&#xff1a;nice 与 renice二、软件包管理三、防火墙管理四、shell脚本五、xshell链接kali一、进程管理 1.1 进程的基本概念 进程是程序的动态执行实例&#xff0c;每个进程都有唯一的 PID&#x…