当前位置: 首页 > news >正文

熵权法实战:结合TOPSIS模型解决供应商评价问题(附2021国赛C题Python代码)

熵权法与TOPSIS模型在供应商评价中的实战应用

1. 多指标评价问题的挑战与解决方案

在商业决策和工程管理中,我们经常面临需要从多个候选对象中做出选择的场景。以供应商评价为例,企业需要综合考虑供货量、交货准时率、产品质量、价格等多个维度的指标。这类多准则决策问题(MCDM)的核心难点在于:

  • 指标量纲不一致:比如价格单位是元,而质量评分是0-100分
  • 指标方向冲突:有些指标越大越好(如供货量),有些越小越好(如次品率)
  • 权重分配主观性:传统方法如层次分析法依赖专家打分,容易引入人为偏差

熵权法(Entropy Weight Method)正是为解决这些问题而生的客观赋权方法。它基于信息熵理论,通过数据本身的离散程度自动确定各指标权重——变异程度越大的指标,包含的信息量越多,赋予的权重也越高

# 示例:熵权法核心公式Python实现 import numpy as np def entropy_weight(X): # 标准化 X = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0)) # 计算比重 P = X / X.sum(axis=0) # 计算熵值 E = -np.sum(P * np.log(P + 1e-10), axis=0) / np.log(len(X)) # 计算权重 W = (1 - E) / (1 - E).sum() return W

2. 熵权法完整实现流程

2.1 数据预处理:指标正向化

不同类型的指标需要统一转化为极大型指标(越大越好):

指标类型转换公式示例
极小型x' = max(x) - x次品率→合格率
中间型x' = 1 - |x - x_best|/MPH值接近7为最佳
区间型分段线性转换温度在[20,25]最佳
def min_to_max(x): return x.max() - x def mid_to_max(x, best): M = np.abs(x - best).max() return 1 - np.abs(x - best)/M def interval_to_max(x, a, b): M = max(a - x.min(), x.max() - b) y = np.zeros_like(x) y[x < a] = 1 - (a - x[x < a])/M y[(x >= a) & (x <= b)] = 1 y[x > b] = 1 - (x[x > b] - b)/M return y

2.2 标准化处理消除量纲

采用Min-Max标准化: $$ z_{ij} = \frac{x_{ij} - \min(x_j)}{\max(x_j) - \min(x_j)} $$

注意:当数据存在负数时,建议使用Z-score标准化

2.3 熵权计算核心步骤

  1. 计算概率矩阵: $$ p_{ij} = \frac{z_{ij}}{\sum_{i=1}^n z_{ij}} $$

  2. 计算信息熵: $$ e_j = -\frac{1}{\ln n}\sum_{i=1}^n p_{ij}\ln p_{ij} $$

  3. 确定权重: $$ w_j = \frac{1 - e_j}{\sum_{j=1}^m (1 - e_j)} $$

# 完整熵权法实现 def entropy_weight_method(X): # 标准化 X = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0)) # 计算概率矩阵 P = X / X.sum(axis=0) # 处理log(0)情况 P_log = np.where(P > 0, np.log(P), 0) # 计算熵值 E = -np.sum(P * P_log, axis=0) / np.log(len(X)) # 计算权重 W = (1 - E) / (1 - E).sum() return W

3. TOPSIS模型集成应用

熵权法确定权重后,结合TOPSIS(优劣解距离法)进行综合评价:

  1. 构建加权标准化矩阵: $$ V = Z \times diag(W) $$

  2. 确定正负理想解: $$ V^+ = [\max V_{i1}, \max V_{i2}, ..., \max V_{im}] $$ $$ V^- = [\min V_{i1}, \min V_{i2}, ..., \min V_{im}] $$

  3. 计算距离与得分: $$ D_i^+ = \sqrt{\sum_{j=1}^m (V_{ij} - V_j^+)^2} $$ $$ D_i^- = \sqrt{\sum_{j=1}^m (V_{ij} - V_j^-)^2} $$ $$ S_i = \frac{D_i^-}{D_i^+ + D_i^-} $$

def topsis(X, W): # 加权标准化 V = X * W # 确定理想解 V_pos = V.max(axis=0) V_neg = V.min(axis=0) # 计算距离 D_pos = np.sqrt(((V - V_pos)**2).sum(axis=1)) D_neg = np.sqrt(((V - V_neg)**2).sum(axis=1)) # 计算得分 S = D_neg / (D_pos + D_neg) return S

4. 2021国赛C题实战解析

4.1 问题背景与数据特征

某企业需要从402家原材料供应商中筛选出最重要的50家。给定数据包括:

  • 240周的订货量(m³)
  • 对应周期的供货量(m³)
  • 供应商材料分类(A/B/C三类)

构建4个评价指标:

指标名称计算方式指标类型
平均供货强度240周供货量均值极大型
平均完成率供货量/订货量的均值区间型[0.8,1.2]
订单率供货量≥10m³的周数占比极大型
风险供货量的标准差极小型

4.2 Python完整实现

import pandas as pd import numpy as np # 数据读取与预处理 df_order = pd.read_excel('data.xlsx', sheet_name='订货量') df_supply = pd.read_excel('data.xlsx', sheet_name='供货量') # 计算指标 df_supply['avg_supply'] = df_supply.iloc[:, 2:].mean(axis=1) # 平均供货强度 df_supply['completion_rate'] = (df_supply.iloc[:, 2:] / df_order.iloc[:, 2:]).mean(axis=1) # 完成率 df_supply['order_rate'] = (df_supply.iloc[:, 2:] >= 10).sum(axis=1) / 240 # 订单率 df_supply['risk'] = df_supply.iloc[:, 2:].std(axis=1) # 风险 # 指标正向化 df_supply['risk'] = df_supply['risk'].max() - df_supply['risk'] # 极小型→极大型 df_supply['completion_rate'] = interval_to_max( df_supply['completion_rate'].values, 0.8, 1.2) # 区间型→极大型 # 熵权TOPSIS评价 X = df_supply[['avg_supply', 'completion_rate', 'order_rate', 'risk']].values W = entropy_weight_method(X) scores = topsis(X, W) # 结果输出 df_result = df_supply[['供应商ID', '材料分类']].copy() df_result['score'] = scores top_50 = df_result.sort_values('score', ascending=False).head(50)

4.3 结果分析与业务解读

通过熵权法计算得到的权重分布:

指标权重
平均供货强度0.42
完成率0.18
订单率0.28
风险0.12

关键发现

  1. 供货强度权重最高,反映企业最关注供应商的产能规模
  2. 订单率权重次之,体现对供货稳定性的要求
  3. 风险权重较低,可能因为多数供应商波动较小

前50家供应商的材料分类分布:

材料类型数量占比
A类2856%
B类1530%
C类714%

5. 模型优化与注意事项

5.1 熵权法的局限性

  • 极端值敏感:单个异常值可能显著改变权重分配
  • 业务逻辑冲突:数据驱动的权重可能与实际业务重要性不符
  • 样本依赖性:不同数据集计算的权重不可直接比较

5.2 改进方案

  1. 组合赋权法

    • 熵权法(客观) + AHP(主观)综合权重
    • 公式:$W = \alpha W_{objective} + (1-\alpha)W_{subjective}$
  2. 数据预处理优化

    # 改进的标准化方法(处理负值) def standardize(X): mean = X.mean(axis=0) std = X.std(axis=0) return (X - mean) / std
  3. 结果验证

    • 通过敏感性分析检验权重稳定性
    • 与历史决策对比验证模型合理性

5.3 工程实践建议

  1. 数据质量检查

    • 处理缺失值(均值填充/删除)
    • 消除量纲影响(必须标准化)
  2. 可视化分析

    import matplotlib.pyplot as plt plt.figure(figsize=(10,6)) plt.barh(range(len(W)), W, tick_label=['供货强度','完成率','订单率','风险']) plt.title('指标权重分布') plt.show()
  3. 动态评价机制

    • 定期更新数据重新计算
    • 设置时间衰减因子,更重视近期表现

在实际数学建模竞赛中,这种组合方法既能展现理论深度,又具备实操性。记得在论文中详细说明每个步骤的数学依据和实现细节,同时结合业务场景解释结果的实际意义。

http://www.gsyq.cn/news/1643338.html

相关文章:

  • TRE、FRE、FLE 辨析:医学图像配准 3 大误差指标详解与选用指南
  • 刷脸取盘机技术解析与应用实践
  • RAG不是加个数据库:四种工业级架构选型指南
  • MySQL 8.0 INFORMATION_SCHEMA 实战:4种表结构查询SQL的完整对比与性能分析
  • 用C#编写语音自动朗读机器人
  • 2024主流AI大模型架构深度解析:从Transformer到MoE,应用选型与工程部署指南
  • 2024年AI视频生成与多模态数据集技术解析
  • YOLOv5结合注意力机制提升小目标检测精度
  • Kali Linux下利用Docker Compose快速搭建Joomla 3.7.0 SQL注入漏洞靶场
  • 深度估计新范式:像素级扩散模型与语义引导优化
  • 无感FOC控制原理与Python仿真实践
  • OpenCV 4.x DNN 模块调用 YOLOv3:CPU 推理 3 步核心代码解析与性能瓶颈分析
  • FDSM模块提升YOLO26目标检测性能的技术解析
  • OpenCV 4.8 同态滤波详解:1个算法解决光照不均与细节增强
  • Gamba:单视图3D重建的革命性突破
  • 原生分割ViT:动态Patch划分与注意力优化实践
  • OpenCV实现银行卡号识别的关键技术解析
  • STM32矩阵键盘设计:用74HC32实现4GPIO控制16功能
  • GTAC:基于Transformer的近似电路设计方法解析
  • 卷积神经网络(CNN)核心计算公式与工程实践详解
  • 智能制造中的计算机视觉质检技术解析与应用
  • YOLO26集成EfficientViM:轻量级视觉Mamba提升目标检测性能
  • 视频号直播智能弹窗报时工具解析与应用
  • FinalBurn Neo深度解析:打造完美街机模拟体验的完整指南
  • 彻底解决Windows 10安装Wireshark时KB2999226补丁错误
  • 空间智能体:计算机视觉从2D感知到3D理解的突破
  • Rust 所有权调试:先看值还归谁,再看怎么借
  • AI大模型实战手册:从Transformer到RAG,核心概念与工程实践详解
  • RuoYi-Vue-fast前端安全加固实战:CSRF与XSS防御体系构建
  • 对称与非对称加密:原理、算法与应用场景全解析