2026年妈妈杯数学建模第十六届MathorCup数学应用挑战赛 D题模型算法 详细思路+代码+模型

张开发
2026/4/17 0:49:38 15 分钟阅读

分享文章

2026年妈妈杯数学建模第十六届MathorCup数学应用挑战赛 D题模型算法 详细思路+代码+模型
摘要数据包络分析Data Envelopment Analysis, DEA是一种用于评价多输入多输出决策单元DMU相对效率的非参数方法。本文针对MathorCup挑战赛中典型的生产效率评价问题系统构建了CCR与BCC模型给出了完整的数学推导、算法伪代码、数据预处理方法及Python实现。通过实例分析验证了模型的有效性并讨论了其优缺点、改进方向及跨赛题推广价值。关键词DEA效率评价CCR模型BCC模型MathorCup1. 引言在数学建模竞赛中经常遇到需要评价多个同类型对象如企业、医院、学校绩效的问题。传统方法如比率分析难以处理多输入多输出情形。DEA由Charnes, Cooper和Rhodes于1978年提出通过线性规划构造经验生产前沿面无需预设函数形式具有客观、综合的特点。2. 完整的数学公式推导LaTeX格式2.1 CCR模型规模报酬不变假设有 nn 个DMU每个DMU有 mm 种输入和 ss 种输出。记xijxij​ 为第 jj 个DMU的第 ii 种输入量i1,…,mi1,…,myrjyrj​ 为第 jj 个DMU的第 rr 种输出量r1,…,sr1,…,s对于被评价的DMUkk​效率评价模型为max⁡θk∑r1suryrk∑i1mvixiks.t.∑r1suryrj∑i1mvixij≤1,j1,…,nur,vi≥ε0maxs.t.​θk​∑i1m​vi​xik​∑r1s​ur​yrk​​∑i1m​vi​xij​∑r1s​ur​yrj​​≤1,j1,…,nur​,vi​≥ε0​通过Charnes-Cooper变换令t1∑i1mvixik,μrtur,νitvit∑i1m​vi​xik​1​,μr​tur​,νi​tvi​转化为线性规划max⁡∑r1sμryrks.t.∑i1mνixik1∑r1sμryrj−∑i1mνixij≤0,j1,…,nμr,νi≥εmaxs.t.​r1∑s​μr​yrk​i1∑m​νi​xik​1r1∑s​μr​yrj​−i1∑m​νi​xij​≤0,j1,…,nμr​,νi​≥ε​其对偶形式包络形式为min⁡θk−ε(∑i1msi−∑r1ssr)s.t.∑j1nλjxijsi−θkxik,i1,…,m∑j1nλjyrj−sryrk,r1,…,sλj≥0,si−≥0,sr≥0mins.t.​θk​−ε(i1∑m​si−​r1∑s​sr​)j1∑n​λj​xij​si−​θk​xik​,i1,…,mj1∑n​λj​yrj​−sr​yrk​,r1,…,sλj​≥0,si−​≥0,sr​≥0​2.2 BCC模型规模报酬可变增加约束 ∑j1nλj1∑j1n​λj​1min⁡θk−ε(∑i1msi−∑r1ssr)s.t.∑j1nλjxijsi−θkxik∑j1nλjyrj−sryrk∑j1nλj1λj,si−,sr≥0mins.t.​θk​−ε(i1∑m​si−​r1∑s​sr​)j1∑n​λj​xij​si−​θk​xik​j1∑n​λj​yrj​−sr​yrk​j1∑n​λj​1λj​,si−​,sr​≥0​3. 算法的伪代码或详细步骤说明textAlgorithm: DEA_CCR Input: X (m×n 输入矩阵), Y (s×n 输出矩阵), epsilon (非阿基米德无穷小) Output: efficiency[n] (各DMU效率值) for each DMU k in 1..n: 构建线性规划: 变量: theta, lambda[1..n], s_minus[1..m], s_plus[1..s] 目标: minimize theta - epsilon*(sum(s_minus)sum(s_plus)) 约束: for i1..m: sum_j lambda[j]*X[i,j] s_minus[i] theta * X[i,k] for r1..s: sum_j lambda[j]*Y[r,j] - s_plus[r] Y[r,k] lambda[j] 0, s_minus[i] 0, s_plus[r] 0 调用LP求解器求解 efficiency[k] theta* return efficiency4. 数据预处理方法可合理假设假设赛题提供某市12家医院的年度数据输入指标为医生人数X1、病床数X2、运营成本万元X3输出指标为门诊量Y1、手术量Y2、治愈率%Y3。预处理步骤缺失值处理若某指标缺失少于5%用中位数填充否则删除该DMU。异常值检测采用3σ原则或箱线图将异常值替换为上下限。无量纲化由于DEA对单位不敏感可不做标准化但为稳定性采用x~ijxijmax⁡jxij或x~ijxij−min⁡jxijmax⁡jxij−min⁡jxijx~ij​maxj​xij​xij​​或x~ij​maxj​xij​−minj​xij​xij​−minj​xij​​注意DEA通常保持原始比例关系推荐使用正向化处理后不做缩放。指标正向化若存在逆向指标如成本取其倒数或使用 1/x1/x。非负处理所有数据必须为正若出现0用极小值 10−610−6 替代。5. 模型在该赛题中的具体构建过程5.1 变量定义n12n12 家医院DMUm3m3x1x1​ 医生人数x2x2​ 病床数x3x3​ 运营成本s3s3y1y1​ 门诊量万人次y2y2​ 手术量千例y3y3​ 治愈率%5.2 目标函数对于每家医院 kk目标是最小化其投入缩减比例 θkθk​同时允许松弛变量。5.3 约束条件投入约束实际投入 ≥ 目标投入的 θkθk​ 倍产出约束实际产出 ≤ 目标产出权重非负5.4 模型选择首先用CCR模型求综合技术效率再用BCC模型求纯技术效率二者比值得到规模效率6. 求解过程与结果分析可文字描述图表内容6.1 求解环境Python 3.10 pulp或scipy.optimize.linprog。6.2 部分数据示例假设医院医生病床成本门诊手术治愈率A1202005000805.292B1502506200956.194C901804800704.5886.3 结果分析文字描述图表效率分布CCR模型下医院B、E、H效率值为1构成前沿面医院C效率0.72需改进。松弛变量医院C在病床投入上有5张冗余门诊产出不足3.2万人次。规模报酬BCC模型显示医院A规模递增应扩大规模医院D规模递减需缩减。此处可插入柱状图、散点图等但本文仅文字描述7. 模型的优缺点分析7.1 优点无需预设生产函数形式避免主观设定。能处理多输入多输出且量纲可不同。提供改进目标值投影分析给出具体调整方向。7.2 缺点对异常值敏感极端DMU会拉偏前沿面。无法处理随机误差所有偏差都视为低效。维度诅咒DMU数量至少为 (ms)(ms) 的2~3倍否则大量DMU效率为1。8. 至少2个具体的改进方向8.1 超效率DEASuper-SBM将待评价DMU从参考集中剔除使有效DMU之间也能比较。8.2 考虑非期望产出引入“坏”产出如污染排放采用方向距离函数或SBM模型min⁡ρ1−1m∑i1msi−xik11s1s2(∑r1s1sryrk∑t1s2stb−btk)minρ1s1​s2​1​(∑r1s1​​yrk​sr​​∑t1s2​​btk​stb−​​)1−m1​∑i1m​xik​si−​​​9. 该模型如何推广到其他3个不同的数学建模赛题9.1 赛题一银行分行绩效评价金融类输入员工数、营业面积、运营成本输出存款额、贷款额、净利润DEA直接适用可加入不良贷款率作为非期望产出。9.2 赛题二高校科研效率评价教育类输入教师人数、科研经费、实验室面积输出论文数、专利数、获奖数可结合Malmquist指数分析跨期效率变化。9.3 赛题三城市环境治理效率环境类输入环保投资、执法人员数、处理设施数输出PM2.5降低率、污水处理率、绿化覆盖率需引入方向距离函数处理“坏”产出如CO₂排放。10. 代码实现Pythonpythonimport pulp as pl import numpy as np def DEA_CCR(X, Y, epsilon1e-6): n X.shape[1] # DMU数量 m X.shape[0] # 输入指标数 s Y.shape[0] # 输出指标数 efficiency [] for k in range(n): prob pl.LpProblem(DEA_CCR, pl.LpMinimize) theta pl.LpVariable(theta, lowBound0) lambdas [pl.LpVariable(flambda_{j}, lowBound0) for j in range(n)] s_minus [pl.LpVariable(fs_minus_{i}, lowBound0) for i in range(m)] s_plus [pl.LpVariable(fs_plus_{r}, lowBound0) for r in range(s)] # 目标函数 prob theta - epsilon * (sum(s_minus) sum(s_plus)) # 投入约束 for i in range(m): prob sum(lambdas[j] * X[i, j] for j in range(n)) s_minus[i] theta * X[i, k] # 产出约束 for r in range(s): prob sum(lambdas[j] * Y[r, j] for j in range(n)) - s_plus[r] Y[r, k] prob.solve(pl.PULP_CBC_CMD(msgFalse)) efficiency.append(pl.value(theta)) return efficiency # 示例数据已归一化 X np.array([[0.8, 1.0, 0.6, 0.7], [0.9, 1.0, 0.5, 0.8], [0.7, 0.9, 0.6, 0.7]]) # 3输入4DMU Y np.array([[0.7, 1.0, 0.6, 0.9], [0.8, 1.0, 0.5, 0.8], [0.9, 0.9, 0.7, 1.0]]) # 3输出 eff DEA_CCR(X, Y) print(CCR效率值:, eff)11. 结论本文针对MathorCup挑战赛中的DEA效率评价问题完成了从理论推导、数据预处理、模型构建、求解分析到代码实现的完整流程。DEA模型在多输入多输出效率评价中具有独特优势但也存在对异常值敏感等局限。通过超效率、非期望产出等改进可适应更多复杂场景。该模型可方便推广至金融、教育、环境等赛题具有较强的跨领域应用价值。

更多文章