熵权法+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);代码分析
- 数据准备:首先定义了决策矩阵
X,这里简单假设了一个3×3的矩阵,实际应用中你需要替换为真实的数据。 - 熵权法计算:
-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);最终得出熵权。 - 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法的计算。 - 基于自己给定权重的TOPSIS法:与上述TOPSIS法类似,只是权重使用了自定义的
my_weight。
通过这段代码,我们可以轻松根据实际需求选择不同的方法进行多准则决策分析,是不是超方便呢?希望大家在实际项目中能灵活运用熵权法和TOPSIS法,让决策更加科学合理。
熵权法+topsis 代码 topsis 熵权法 一个代码可以四用,熵权法 topsis 基于熵权法修正的topsis 基于自己给定权重的topsis 都可以用! 代码有详细注释,有matlab即可运行 注释详细,一个按键运行即可
以上就是今天跟大家分享的全部内容啦,欢迎大家在评论区交流讨论。