news 2026/10/31 15:54:53

熵权法与TOPSIS法:代码实现与应用的奇妙结合

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
熵权法与TOPSIS法:代码实现与应用的奇妙结合

熵权法+topsis 代码 topsis 熵权法 一个代码可以四用,熵权法 topsis 基于熵权法修正的topsis 基于自己给定权重的topsis 都可以用! 代码有详细注释,有matlab即可运行 注释详细,一个按键运行即可

在多准则决策分析领域,熵权法和TOPSIS法是两种非常实用的方法。今天就来跟大家分享一段超厉害的代码,它能让你轻松实现四种不同的分析,包括熵权法、TOPSIS法、基于熵权法修正的TOPSIS法以及基于自己给定权重的TOPSIS法,而且只需要有Matlab就能一键运行,注释还超详细。

熵权法简介

熵权法是一种客观赋权法,它根据指标变异性的大小来确定客观权重。其核心思想是,某个指标的信息熵越小,说明该指标值的变异程度越大,提供的信息量越多,在综合评价中所起的作用越大,其权重也就越大。

TOPSIS法简介

TOPSIS法(Technique for Order Preference by Similarity to an Ideal Solution)即逼近理想解排序法,是一种常用的多属性决策方法。它通过构造决策问题的正理想解和负理想解,计算各方案到正、负理想解的距离,进而得到各方案与理想解的相对贴近度,以此作为评价方案优劣的依据。

Matlab代码实现

% 此代码可以实现熵权法、TOPSIS法、基于熵权法修正的TOPSIS法以及基于自己给定权重的TOPSIS法 % 作者:[你的名字] % 日期:[具体日期] % 假设我们有一个决策矩阵X,行为样本,列为指标 X = [1 2 3; 4 5 6; 7 8 9]; % 熵权法部分 [n, m] = size(X); % 获取矩阵的行数n(样本数)和列数m(指标数) P = X./repmat(sum(X, 1), n, 1); % 计算每个元素在所在列的比重 E = -sum(P.*log(P + eps), 1)./log(n); % 计算熵值,eps防止log(0)出现 W_entropy = (1 - E)./sum(1 - E); % 计算熵权 % TOPSIS法部分 Z = (X - repmat(min(X), n, 1))./(repmat(max(X), n, 1) - repmat(min(X), n, 1)); % 数据标准化 Z_weighted = Z.*repmat(W_entropy, n, 1); % 加权标准化矩阵 Z_max = max(Z_weighted); % 正理想解 Z_min = min(Z_weighted); % 负理想解 D_max = sqrt(sum((Z_weighted - repmat(Z_max, n, 1)).^2, 2)); % 到正理想解的距离 D_min = sqrt(sum((Z_weighted - repmat(Z_min, n, 1)).^2, 2)); % 到负理想解的距离 C = D_min./(D_max + D_min); % 相对贴近度,越大方案越好 % 基于自己给定权重的TOPSIS法 my_weight = [0.3 0.3 0.4]; % 自己设定的权重 Z_myweighted = Z.*repmat(my_weight, n, 1); % 加权标准化矩阵 Z_my_max = max(Z_myweighted); % 正理想解 Z_my_min = min(Z_myweighted); % 负理想解 D_my_max = sqrt(sum((Z_myweighted - repmat(Z_my_max, n, 1)).^2, 2)); % 到正理想解的距离 D_my_min = sqrt(sum((Z_myweighted - repmat(Z_my_min, n, 1)).^2, 2)); % 到负理想解的距离 C_my = D_my_min./(D_my_max + D_my_min); % 相对贴近度,越大方案越好 % 基于熵权法修正的TOPSIS法,其实就是上面熵权法和TOPSIS法结合的过程 % 不再重复代码,结果已经在之前的C变量中 disp('熵权法得到的权重:'); disp(W_entropy); disp('基于熵权法修正的TOPSIS法得到的相对贴近度:'); disp(C); disp('基于自己给定权重的TOPSIS法得到的相对贴近度:'); disp(C_my);

代码分析

  1. 数据准备:首先定义了决策矩阵X,这里简单假设了一个3×3的矩阵,实际应用中你需要替换为真实的数据。
  2. 熵权法计算:
    -P = X./repmat(sum(X, 1), n, 1);这一步计算了每个元素在所在列的比重,repmat(sum(X, 1), n, 1)是将每列的和扩展成与X同样大小的矩阵,以便进行逐元素相除。
    -E = -sum(P.*log(P + eps), 1)./log(n);计算熵值,eps是为了避免log(0)的情况。
    -W_entropy = (1 - E)./sum(1 - E);最终得出熵权。
  3. TOPSIS法计算:
    -Z = (X - repmat(min(X), n, 1))./(repmat(max(X), n, 1) - repmat(min(X), n, 1));对数据进行标准化处理,使不同量纲的数据可以比较。
    -Zweighted = Z.*repmat(Wentropy, n, 1);将标准化后的数据与熵权相乘,得到加权标准化矩阵。
    - 后续通过计算到正、负理想解的距离以及相对贴近度来完成TOPSIS法的计算。
  4. 基于自己给定权重的TOPSIS法:与上述TOPSIS法类似,只是权重使用了自定义的my_weight。

通过这段代码,我们可以轻松根据实际需求选择不同的方法进行多准则决策分析,是不是超方便呢?希望大家在实际项目中能灵活运用熵权法和TOPSIS法,让决策更加科学合理。

熵权法+topsis 代码 topsis 熵权法 一个代码可以四用,熵权法 topsis 基于熵权法修正的topsis 基于自己给定权重的topsis 都可以用! 代码有详细注释,有matlab即可运行 注释详细,一个按键运行即可

以上就是今天跟大家分享的全部内容啦,欢迎大家在评论区交流讨论。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/22 12:42:42

全球价值链韧性与地位指数

2025年最新数据,1995-2022年(有代码) OECD 81国家/50行业 1、全球价值链地位(3种测度方法) 2、全球价值链参与度(前向与后向) 3、全球价值链长度(前向与后向) 4、全球价值…

作者头像 李华
网站建设 2026/10/22 11:58:17

2026年3月建筑AI实测白皮书:10款工具,EVAI第一

2026年3月建筑AI实测白皮书:10款工具,EVAI第一2026年,建筑设计行业进入“方案交付按小时计价”的新阶段。根据公开行业研究口径与本次调研汇总,国内与建筑设计直接相关的AI软件与服务市场规模已接近380亿元,近三年复合…

作者头像 李华
网站建设 2026/10/28 10:55:15

长沙看心理医生指南:真实案例分享与医院推荐

行业痛点分析当前长沙心理服务领域面临多重技术与资源挑战。数据显示,长沙市18岁以上人群心理健康问题检出率达22.3%(测试显示),其中焦虑障碍与抑郁障碍占比超过50%。然而,专业心理诊疗资源供给不足问题突出&#xff0…

作者头像 李华
网站建设 2026/10/24 18:40:26

论文“瘦身”新革命:书匠策AI如何破解查重与AIGC双重困局?

在学术江湖里,论文查重和AIGC(人工智能生成内容)检测就像两把“达摩克利斯之剑”,悬在每个学者的头顶。查重率超标,轻则被导师“打回重造”,重则影响毕业或职称评定;AIGC痕迹过重,则…

作者头像 李华