数学建模竞赛实战:需求预测与随机规划优化供应链决策

📅 2026/8/17 14:54:10
数学建模竞赛实战:需求预测与随机规划优化供应链决策
1. 赛题核心与破题思路2021年的全国大学生数学建模竞赛C题题目是“生产企业原材料的订购与运输”。这题一出来很多队伍都懵了感觉像是个供应链管理或者运筹学的题目但又和传统的模型不太一样。我当时带队的感受是这道题表面上考的是数学建模实际上是在考察我们如何将一个复杂的、信息不全的实际商业问题转化成一个可量化、可求解的数学模型的能力。它不像一些物理题或者微分方程题有明确的公式可以套更像是在模拟一个企业供应链部门经理每天要面对的真实决策场景手里有一堆历史数据未来充满不确定性你得制定一个既不让生产线断粮又尽量别把太多钱压在库存上的采购计划。这道题的核心矛盾非常清晰在需求不确定和供应商供应能力随机波动的双重约束下如何制定成本最优的原材料订购与运输方案。这里的成本是一个综合概念包括采购成本、库存持有成本以及潜在的缺货导致的停产损失虽然题目没明说但我们必须考虑。很多新手队伍容易犯的错误是一上来就试图建立一个超级复杂的、包含所有现实因素的模型结果要么无从下手要么求解不出来。我们的破题思路是“分而治之逐步迭代”。首先我们把整个问题拆解成三个环环相扣的子问题需求预测问题根据过去五年的订货量数据预测未来24周即两个半年每周的需求量。这是所有决策的基础预测准了后面就成功了一半。订购策略问题在预测需求的基础上考虑供应商的供应可靠性有历史数据决定每周向哪些供应商订购多少原材料。这里要权衡的是多找几家供应商可以分散风险但可能增加管理成本或无法享受单一供应商的量大优惠只盯着一两家万一它“掉链子”就麻烦了。运输策略问题确定了订购量还要决定怎么运。题目给了运输费的折扣表运得越多单价越便宜但一次性运太多又会导致库存积压增加仓储成本。这就需要在运输的规模经济效益和库存成本之间找平衡。我们的整体建模思路是建立一个多阶段决策优化模型。以周为单位每一周都是一个决策阶段。在每一周开始时我们根据当前的库存水平、对未来需求的预测、以及供应商的历史表现做出本周的订购决策向谁订、订多少和运输决策是否启动运输、运多少。然后本周的决策会影响下一周的初始库存状态如此滚动进行下去。这种思路在学术上接近“随机动态规划”或“基于模拟的优化”但对于数模竞赛我们需要将其简化成可求解的形式。2. 需求预测模型的构建与选择需求预测是整个项目的基石。题目附件提供了过去五年240周的订货量数据。第一眼看去数据有明显的季节性波动和趋势性。很多队伍会直接想到时间序列模型比如ARIMA自回归积分滑动平均模型或者它的季节性版本SARIMA。这确实是一个标准思路但直接套用存在风险。2.1 数据特性分析与预处理我们拿到数据的第一步不是急着跑模型而是先画图观察。用Python的Matplotlib或者Excel把240周的数据做成折线图规律一目了然长期趋势整体需求量呈现缓慢的上升趋势这说明市场可能处于成长期。季节性每年内约48周题目以周为单位一年按48周计有明显的波动周期通常在年中第20-30周左右和年末第40-48周左右会出现需求高峰。这很可能对应着行业的销售旺季或生产旺季。随机波动除了趋势和季节每周数据还有不规则的起伏这就是我们需要用模型去捕捉或平滑的随机因素。预处理的关键一步是检测并处理异常值。我们通过计算移动平均和标准差发现历史数据中有几周的订货量远高于或低于趋势线。对于这些点需要判断是真正的需求爆发如突发大订单还是数据记录错误。在竞赛中如果没有特别说明我们通常采用相对保守的方式用前后几周的均值进行平滑替换而不是直接删除以避免人为改变数据分布。2.2 预测模型选型与实战我们对比测试了三种模型经典分解法将时间序列分解为趋势Trend、季节性Seasonality和残差Residual三部分。这种方法非常直观可以通过移动平均法提取趋势和季节成分。预测时将未来时期的趋势项和季节项相加即可。它的优点是原理简单结果易于解释适合作为基线模型。Holt-Winters三指数平滑法这是处理趋势和季节性时间序列的经典方法。它包含水平、趋势和季节三个平滑方程。我们使用了加法模型因为季节性波动的幅度大致不随时间变化。通过优化算法如网格搜索来寻找最优的平滑参数α, β, γ。它的优势在于模型轻量预测速度快对于中短期预测效果通常不错。SARIMA模型这是更强大的统计模型。我们需要通过观察自相关图ACF和偏自相关图PACF来确定模型的参数p,d,q以及季节性参数P,D,Q,s。这个过程需要一定的经验。我们最终确定的模型是SARIMA(1,1,1)(1,1,0,48)表示经过了非季节性和季节性差分并包含了自回归和移动平均项。实操心得模型融合提升鲁棒性单一模型总有局限性。我们的策略是“组合预测”。分别用Holt-Winters和SARIMA模型对未来24周进行预测得到两个预测序列。然后我们给这两个序列分配权重例如根据它们在历史数据上最近一段时间的预测误差来动态调整权重误差小的权重大进行加权平均得到最终的预测需求。这样做的好处是可以平滑掉单个模型的极端预测值使最终结果更稳定。在实际编程中我们用statsmodels库实现SARIMA用statsmodels或自己编写实现Holt-Winters。2.3 预测结果的不确定性量化仅仅给出一个预测值是不够的因为预测必然有误差。对于优化模型来说了解预测的不确定性即可能的误差范围至关重要。我们为每周的预测需求生成了一个置信区间例如95%置信区间。在SARIMA模型中这可以通过模型自身的预测误差方差来计算。对于Holt-Winters则需要通过模拟或基于历史残差来估算。在后续的订购模型中我们不仅使用预测的中位数或均值还会考虑这个置信区间。例如在制定安全库存时我们会参考需求预测的上限而不是中点值以应对需求波动的风险。3. 供应商订购策略随机规划与鲁棒优化有了需求预测接下来就要解决“向谁买”的问题。附件提供了402家供应商过去240周的供货数据。这些数据揭示了一个关键现实供应商的供应是随机的、不可靠的。每周供应商实际能提供的原材料数量是一个围绕其“供货能力”波动的随机变量。3.1 供应商画像与分类我们不能对402家供应商一视同仁。第一步是给他们“画像”。我们计算了每个供应商的两个核心指标平均供货率历史周供货量的平均值。这代表了供应商的“产能规模”。供货稳定性变异系数用标准差除以平均值这个值越小说明供应商每周的供货量越稳定越可靠。根据这两个维度我们可以把供应商大致分为四类明星供应商高平均供货率、高稳定性。这是最优质的供应商应该是我们合作的核心。潜力供应商高平均供货率但稳定性一般。他们的产能大但表现时好时坏需要谨慎管理比如可以作为核心供应商的补充。稳定型小供应商低平均供货率但高稳定性。他们虽然量小但贵在准时适合用来填补一些固定的、小量的需求缺口。问题供应商低平均供货率、低稳定性。这类供应商风险最高通常应避免合作或仅作为最后的选择。这个分类为我们后续的供应商选择提供了直观的依据。3.2 订购策略模型建立我们的目标是制定未来24周每周向每家供应商的订购量。这是一个典型的随机规划问题。因为未来的需求是预测的有不确定性供应商的供货也是随机的我们的决策需要在不确定性中寻找成本最优解。我们建立了一个两阶段随机规划模型的思想框架第一阶段决策“here-and-now”在每周初我们必须决定向各供应商的订购量。这个决策必须在观察到当周供应商的实际供货量和当周的实际需求之前做出。第二阶段决策“wait-and-see”/ 补偿决策当本周结束后供应商的实际供货量和工厂的实际需求都已知了。此时可能会出现两种情况1) 到货总量加原有库存不足以满足本周生产需求产生缺货2) 到货太多库存积压。模型的目标函数就是要最小化总期望成本它包括采购成本与订购量有关库存持有成本与期末库存正相关缺货惩罚成本这是一个关键设定。题目没有明确缺货成本但我们必须自己定义。我们将其设定为一个远高于库存成本的单位惩罚比如设定为缺货量乘以一个大的惩罚系数以模拟生产线停工带来的巨大损失。由于直接求解完整的随机规划模型非常复杂我们采用了样本平均近似法。即我们不再考虑供应商供货和需求的全部可能分布而是基于历史数据用蒙特卡洛方法模拟生成N个可能的未来情景Scenario。例如每个情景就是一套未来24周每周各个供应商的具体供货量和工厂的具体需求量的实现值。这样随机规划就近似变成了一个大型的确定性线性规划问题最小化在所有模拟情景下的平均总成本。3.3 模型简化与启发式策略即便做了SAA近似决策变量402家供应商 × 24周依然巨大。我们进一步引入了启发式规则来简化供应商选择集中化基于之前的分类我们只选择“明星供应商”和部分“稳定型小供应商”作为主要合作对象将“问题供应商”剔除出考虑范围。这大大减少了决策变量。s, S库存策略对于主要供应商我们采用经典的库存策略。设定一个库存下限s和一个上限S。每周初检查库存水平如果低于s则发起订购将库存补充至S水平。这里的订购量分配给我们选定的核心供应商组合。我们需要优化s和S的值。安全库存动态调整安全库存水平s不是固定的。它会根据未来几周的需求预测置信区间上界和供应商的联合供应可靠性动态调整。例如如果预测到接下来是需求旺季或者某核心供应商近期稳定性下降我们就调高安全库存。最终我们的订购策略是一个混合策略用优化模型简化后的随机规划计算出大致的每周总订购量和核心供应商分配比例再用s, S策略和动态安全库存规则来生成每周具体的、可执行的订购指令。4. 运输策略规模经济与库存成本的权衡原材料订购后存放在供应商那里需要运输回企业仓库。题目给出的运输成本函数是典型的分段折扣函数运输量越大单位运费越便宜。这诱导我们倾向于“凑满”一个高折扣的运输量批次进行运输。4.1 运输成本模型化设每周的运输量为Q则当周运输成本C(Q)是一个分段线性递减函数。例如当 0 Q ≤ A时单价为 p1当 A Q ≤ B时单价为 p2 (p2 p1)当 Q B时单价为 p3 (p3 p2) 因此C(Q) p1Q (if Q≤A), p1A p2*(Q-A) (if AQ≤B), 以此类推。这个函数是凹函数体现了规模经济。4.2 联合优化模型运输决策不能孤立进行必须和库存决策联合优化。因为提前运输为了凑够一个大的、享受高折扣的运输量Q我们可能需要把未来几周供应商那里累积的原材料提前运回。但这会导致这批原材料提前入库从而提前开始计算库存持有成本。延迟运输反之为了降低当期库存我们可以选择暂时不运让原材料暂存于供应商处假设供应商处存储免费或成本极低。但这会延迟原材料的可用时间增加未来缺货风险并且可能错过本次凑整享受折扣的机会。因此我们建立了一个库存-运输联合优化模型。决策变量是每周的是否运输以及运输量。目标函数是在整个规划期24周内最小化“运输成本 库存持有成本 缺货惩罚成本”的总和。约束条件包括每周的运输量不能超过当周在供应商处的累计到货量库存平衡方程本期库存 上期库存 本期运输到货量 - 本期需求量。4.3 求解算法动态规划与启发式规则这是一个带有复杂成本函数分段线性的动态优化问题。理论上可以用动态规划求解但状态空间库存水平是连续的会导致“维数灾”。我们采用了以下方法离散化状态空间将可能的库存水平离散化为若干个等级例如0, 100, 200, ..., 最大仓容。这样动态规划就可以进行了。向前递归求解从第1周开始计算在每个离散库存水平下做出不同运输决策后所能达到的最小“剩余周期总成本”包括当期成本和后续最优成本。逐步递归到第24周再回溯得到最优运输策略。启发式规则——“阈值触发法”作为对复杂模型的补充我们设计了一条简单易行的规则设定两个库存阈值L和ULU。每周检查企业仓库的库存水平I。如果I L则立即启动运输运输量至少补充到U水平同时考虑供应商处的可用存量。如果I L则计算“如果不运输未来可能因凑不够折扣量而多花的运费”与“如果现在运输提前入库带来的额外库存成本”。如果前者大于后者则启动运输运输量尽量凑到最近的折扣区间临界点。在实际编程实现时我们先运行动态规划模型得到一个基准最优解然后发现其解的模式与“阈值触发法”非常相似。因此在最终论文中我们将“阈值触发法”及其阈值L, U的确定方法作为主要的可解释策略进行阐述而将动态规划作为验证该策略接近最优性的工具。5. 模型求解、灵敏度分析与论文呈现5.1 求解工具与集成我们使用Python作为主要工具。pandas和numpy用于数据处理statsmodels用于SARIMA建模scikit-learn可用于一些辅助的预测模型如线性回归拟合趋势核心的优化模型随机规划的SAA近似和运输动态规划使用PuLP或cvxpy这样的优化库来求解线性/整数规划问题或者用scipy.optimize进行函数优化如寻找最优的s, S, L, U参数。所有模块被集成在一个主控脚本中先运行预测模块输出未来24周的需求预测及区间然后基于预测和供应商数据运行供应商选择与订购策略模块输出每周的订购计划最后将订购计划转化为供应商处的预计到货量和需求预测输入库存-运输联合优化模块输出每周的运输决策。5.2 灵敏度分析与策略稳健性检验一个好的模型必须经过稳健性检验。我们设计了以下几种灵敏度分析需求波动测试将未来需求整体上调或下调10%观察我们的订购和运输策略如何变化总成本增加了多少。这检验了模型对预测误差的承受能力。供应商风险测试模拟一家核心供应商突然在某个时段供应能力下降50%我们的策略能否通过启动备用供应商来缓解冲击。成本参数测试改变库存持有成本率或缺货惩罚系数观察最优策略的敏感性。例如如果缺货惩罚变得极高模型会倾向于持有更多的安全库存。这些分析不仅能验证模型的鲁棒性更能产生丰富的管理启示成为论文的亮点。例如通过分析我们发现当需求不确定性增加时动态调整安全库存比固定策略能节省更多成本又比如维持2-3家核心供应商加上4-5家小型稳定供应商的组合抗风险能力最强成本也相对较低。5.3 论文写作与结果可视化数模竞赛论文是成果的最终载体。在写作上我们强调问题重述要精炼用自己的话概括问题点明核心矛盾和挑战。模型假设要合理且明确例如“假设供应商处的暂存成本为零”、“假设运输能力无限”、“假设缺货惩罚成本为单件库存成本的5倍”。合理的假设是简化模型的前提。模型建立部分要逻辑清晰按照“预测模型—订购模型—运输模型—联合模型”的顺序层层递进。每一个模型都要讲清楚输入、输出、目标函数、约束条件。求解过程要具体不能只说“我们用软件求解”要说明用了什么算法、什么工具、关键参数如何设置、遇到了什么计算困难及如何解决的。结果分析要深入不仅展示最终的总成本、采购计划表更要用图表进行可视化。用折线图展示未来24周的需求预测与置信区间。用柱状图展示筛选出的核心供应商及其采购份额。用甘特图或堆叠面积图展示每周的库存水平、在途物料、运输批次之间的关系。用灵敏度分析的图表展示关键参数变化对总成本的影响趋势。模型评价与推广客观评价自己模型的优点如贴近实际、鲁棒性强和缺点如未考虑供应商价格差异、运输时间固定等并提出几个可行的改进方向体现思维的全面性。这道C题是一个经典的运筹学与管理科学问题它没有唯一的标准答案。获奖的关键在于能否用清晰的逻辑将实际问题转化为数学模型用合理的算法进行求解并用严谨的分析和生动的呈现来展示你的解决方案的合理性与优越性。整个过程是对团队数据处理、建模、编程和写作能力的综合考验。