要说数学建模竞赛里出场率最高的模型类别,优化类模型称第二,没人敢称第一。国赛、美赛、研赛,几乎每年都会有一道甚至两三道题能落到优化头上,要么是生产排产,要么是路径规划,要么是资源分配,换个马甲而已。这篇综述就是给还没完全建立框架的同学画一张地图,帮你在拿到题目时能快速判断“这题该用哪类优化模型”,同时把从建模到求解再到论文写作的完整链路捋一遍。文中会涉及线性规划、整数规划、动态规划、图论优化和启发式算法,配有可直接复用的代码片段和几道典型真题的建模思路复盘,不管是刚入门还是正在备赛,这篇都值得你花二十分钟读完,然后存到收藏夹里当工具页用。
优化模型的核心思想,本质上就是我们生活中天天在做的事:在有限资源下,找到最好的方案。只不过竞赛把这件事用数学语言严格化了,要求你回答三个问题——决策变量是什么、目标函数怎么定、约束条件有哪些。这三个问题一旦想清楚,模型就立住了一半;剩下的一半,是选择合适的算法把它解出来,再用图表把结果讲明白。
1. 为什么优化模型在竞赛里“无处不在”:先从题型识别说起
1.1 竞赛中最常见的三类优化考法
我翻了近十年的国赛和美赛题目,发现优化类考题基本跳出这三个套路。
第一类是资源分配。给你一堆有限资源(原材料、资金、设备、人力),要你决定怎么分配才能使收益最大或成本最小。比如国赛里经常出现的生产计划问题,几种产品抢同一条生产线,每种产品耗时耗料不同、利润也不同,问你排产方案。这类题目的核心是“把有限的资源切成几块,每块拿去换不同的回报”。
第二类是路径规划。在一个网络里走,从起点到终点,或者从一个仓库出发把所有需求点都跑一遍,问你走哪条路最省。快递配送、巡检路线、无人机巡航,都是这种考法。它的数学抽象通常是图论模型,但决策变量的设计方式很灵活,难度跨度也大,从简单的最短路到复杂的带时间窗车辆路径问题都有可能出现。
第三类是调度与排程。几个任务、几台机器、几班工人,任务有先后顺序和工期要求,问你怎么安排能准时完工又最省成本。这类题在美赛里出现频率很高,因为背景好编,随便安一个“机场调度”“手术室排期”“工厂流水线”的外壳就能出一道题。
这三类并不是互斥的,很多题是组合拳:比如先做资源分配,再做路径规划,最后还要考虑时间窗约束。但不管怎么组合,识别出“这是优化问题”是第一关。
1.2 只用一句话判断题目是不是优化题
拿到题目后,先别急着读数据,扫一眼题目里有没有这些词:“最小”“最大”“最优”“最短”“最省”“不超过”“至少”“在……条件下”。只要出现了两个以上,基本就是优化题。
再往下判断一层:这道题有没有需要你拍板的决策?比如“生产多少件产品”“选哪条路线”“给哪个客户先送货”“仓库建在哪个位置”——如果有,说明存在决策变量。同时,决策受不受限制?原材料够不够、时间够不够、容量够不够——如果有限制,说明存在约束条件。
决策变量、目标函数、约束条件三样都齐了,这就是一道标准的优化题。哪怕它披着“数据分析”的外衣,本质还是优化。
有一种迷惑性比较强的情况:题目先让你预测某个量,再基于预测结果做决策。比如“预测未来一周各区域的需求量,再制定配送计划”。这时预测是前置任务,优化是主任务。很多队伍把重心全放在预测上,用了一堆花哨的时间序列模型,结果配送计划的模型建得很敷衍,反而丢了大头分数。
1.3 一个容易被忽略的判断:问题规模有多大
识别出是优化题之后,下一步是快速估计规模。决策变量是几十个、几千个还是上万个?这个直接决定你后面选什么算法。
变量在几十个以内、约束几十条,那用精确算法(单纯形法、分支定界)毫无压力。变量上千、约束复杂,比如几百个点的配送问题,精确算法算到天荒地老也出不来,这时候就得考虑启发式算法。国赛里经常出现“先建立精确模型证明你很懂,再用启发式算法求解实际规模”的写法,这个套路很吃香,后面章节我会具体讲。
提示:判断问题规模时,不要只数题目里的“N”,要数决策变量展开后的实际数量。比如“有N个客户点要配送”,0-1变量是N×N个(任意两点间是否走),不是N个。这个差别很多新手会算错。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 优化模型的骨架:决策变量、目标函数与约束条件的博弈
2.1 决策变量定不好,后面全白干
建模的第一步是定义决策变量,这也是新手最容易翻车的一步。定义决策变量时,你必须想清楚它是在“决定什么”,以及它的取值范围怎么设定。
举个例子。一个最简单的生产问题:工厂生产A、B两种产品,各需要消耗原料1和原料2,利润不同,问生产多少利润最大。这时决策变量就是A和B的产量,设为x₁、x₂,非负整数。但如果你遇到的是“是否在某地建仓库”这种问题,决策变量就是0-1变量:建=1,不建=0。
还有一个容易踩坑的地方:同一个问题,决策变量的定义方式不止一种,选错了会让模型复杂好几倍。比如配送问题,你可以定义“车辆k是否走弧(i,j)”(三维0-1变量),也可以定义“客户i是否由车辆k服务”(二维0-1变量),前者天然能写出路径约束,后者写容量约束更方便。建模之前先想想要写哪些约束,反推一下决策变量怎么定义最顺,能省很多事。
决策变量还有一种常见分类:连续变量、整数变量、0-1变量、混合变量。连续变量意味着可以取任意实数,比如“水量”“金额”;整数变量比如“产品件数”“工人数量”;0-1变量表示取或不取、是否选择。很多问题天然是混合的,比如既有“投入多少资金
