36G1-改进critic-TOPSIS 可进行matlab和python仿真程序通用也可“改进”,

在多准则决策分析领域,critic - TOPSIS 是一种颇为有效的方法,今天咱们就来聊聊对它改进的那些事儿,并且看看在 Matlab 和 Python 中怎么实现仿真。

一、改进 critic - TOPSIS 算法简介

传统的 critic - TOPSIS 算法通过熵权法确定指标权重,再结合 TOPSIS 法计算各方案与理想解的贴近度来进行方案排序。然而,在一些复杂场景下,它可能会暴露出些许不足。比如说,传统方法对于指标相关性的考虑有时不够细致,导致权重确定不够精准。改进方向之一就是更加深入地挖掘指标间的相关性,利用更复杂的数学模型来修正权重。

二、Matlab 仿真实现

1. 数据准备

首先,假设我们有一个决策矩阵 X,包含 m 个方案和 n 个指标。

% 示例决策矩阵
X = [10 20 30; 15 25 35; 20 30 40];
[m, n] = size(X);

这里创建了一个简单的 3×3 的决策矩阵,实际应用中你需要根据具体问题替换这个矩阵。

2. 数据标准化

% 数据标准化
Z = zeros(m, n);
for j = 1:n
    Z(:, j) = (X(:, j) - min(X(:, j))) / (max(X(:, j)) - min(X(:, j)));
end

这段代码通过对每个指标进行归一化处理,将数据映射到 [0, 1] 区间,这样不同量级的指标就可以放在一起比较啦。

3. 改进的 critic 权重计算

改进的关键就在这里,假设我们通过某种新的相关性分析方法得到了指标间的相关系数矩阵 R

% 假设已经得到相关系数矩阵 R
R = corrcoef(Z);
% 计算冲突性指标
C = zeros(1, n);
for j = 1:n
    C(j) = sum(1 - R(j, :));
end
% 计算权重
W = C / sum(C);

这里简单模拟了根据相关系数计算冲突性指标,进而得到改进后的权重 W。实际改进中,相关系数矩阵的计算方式和冲突性指标的确定会更复杂。

4. TOPSIS 计算贴近度

% 正理想解和负理想解
Z_p = max(Z);
Z_n = min(Z);
% 计算距离
D_p = sqrt(sum((repmat(Z_p, m, 1) - Z).^2, 2));
D_n = sqrt(sum((repmat(Z_n, m, 1) - Z).^2, 2));
% 计算贴近度
CC = D_n./ (D_p + D_n);

这部分就是经典的 TOPSIS 计算贴近度的过程,通过计算各方案到正、负理想解的距离,得出贴近度,从而对方案进行排序。

三、Python 仿真实现

1. 数据准备

import numpy as np

# 示例决策矩阵
X = np.array([[10, 20, 30], [15, 25, 35], [20, 30, 40]])
m, n = X.shape

Python 中使用 numpy 库来处理矩阵数据,和 Matlab 类似,先定义决策矩阵。

2. 数据标准化

# 数据标准化
Z = np.zeros((m, n))
for j in range(n):
    Z[:, j] = (X[:, j] - np.min(X[:, j])) / (np.max(X[:, j]) - np.min(X[:, j]))

同样是对每个指标进行归一化,代码逻辑和 Matlab 差不多,只是 Python 的语法略有不同。

3. 改进的 critic 权重计算

import pandas as pd

# 假设已经得到相关系数矩阵 R
df = pd.DataFrame(Z)
R = df.corr().values
# 计算冲突性指标
C = np.zeros(n)
for j in range(n):
    C[j] = np.sum(1 - R[j, :])
# 计算权重
W = C / np.sum(C)

这里借助 pandas 库来计算相关系数矩阵,然后同样计算冲突性指标和权重。

4. TOPSIS 计算贴近度

# 正理想解和负理想解
Z_p = np.max(Z, axis = 0)
Z_n = np.min(Z, axis = 0)
# 计算距离
D_p = np.sqrt(np.sum((np.tile(Z_p, (m, 1)) - Z) ** 2, axis = 1))
D_n = np.sqrt(np.sum((np.tile(Z_n, (m, 1)) - Z) ** 2, axis = 1))
# 计算贴近度
CC = D_n / (D_p + D_n)

最后这部分 TOPSIS 计算贴近度的代码,和 Matlab 对应部分实现的功能一致,再次体现了两种语言在实现这类算法时的相似性。

36G1-改进critic-TOPSIS 可进行matlab和python仿真程序通用也可“改进”,

无论是 Matlab 还是 Python,对于改进的 critic - TOPSIS 算法仿真实现都有各自的优势。Matlab 语法简洁,在矩阵运算方面有很好的内置支持;Python 则胜在开源库丰富,生态活跃。希望这篇博文能给你在改进和实现 36G1 - 改进 critic - TOPSIS 算法上一些启发。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐