要说数学建模竞赛里出场率最高的模型类别,优化类模型称第二,没人敢称第一。国赛、美赛、研赛,几乎每年都会有一道甚至两三道题能落到优化头上,要么是生产排产,要么是路径规划,要么是资源分配,换个马甲而已。这篇综述就是给还没完全建立框架的同学画一张地图,帮你在拿到题目时能快速判断“这题该用哪类优化模型”,同时把从建模到求解再到论文写作的完整链路捋一遍。文中会涉及线性规划、整数规划、动态规划、图论优化和启发式算法,配有可直接复用的代码片段和几道典型真题的建模思路复盘,不管是刚入门还是正在备赛,这篇都值得你花二十分钟读完,然后存到收藏夹里当工具页用。
优化模型的核心思想,本质上就是我们生活中天天在做的事:在有限资源下,找到最好的方案。只不过竞赛把这件事用数学语言严格化了,要求你回答三个问题——决策变量是什么、目标函数怎么定、约束条件有哪些。这三个问题一旦想清楚,模型就立住了一半;剩下的一半,是选择合适的算法把它解出来,再用图表把结果讲明白。
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变量表示取或不取、是否选择。很多问题天然是混合的,比如既有“投入多少资金”的连续决策,又有“是否建设某条线路”的0-1决策。
2.2 目标函数:单目标与多目标如何取舍
目标函数是优化的方向。单目标问题写起来爽,但竞赛里很多题天然是多个目标,比如“物流成本最低”和“配送时间最短”是两个互相冲突的目标——要时间短就得用飞快的运输方式,成本自然就上去了。
多目标处理有几种常见策略,我推荐按以下顺序尝试:
- 加权求和法:给每个目标一个权重,合并成一个目标。重点在于权重怎么定,如果题目给了优先级,按优先级定权重;没给的话,可以做灵敏度分析,画一个权重从0到1变化时最优解怎么变,证明你的权重选择是有依据的。
- ε-约束法:把最重要的一个目标作为优化目标,其他目标转成约束。比如求成本最低时,要求“配送时间不超过4小时”。这个方法的好处是不用定权重,坏处是ε取值需要多次尝试,看结果的敏感性。
- 帕累托前沿:把一组非支配解求出来,让决策者挑。这个方法写论文时非常加分,但求解代价大,一般只在决策变量不多时用。
我个人的建议是:竞赛中优先用ε-约束法,因为它在论文里好解释,评委一眼就能看懂“这个目标是硬约束,那个目标是软的”。加权法虽然实现简单,但权重的“拍脑袋感”比较强,容易被评委挑战。当然,如果能补充帕累托图,两个方法一结合,那就很稳了。
2.3 约束条件:哪些必须写,哪些可以放宽
约束条件定义了可行域。约束越多,可行域越小,解越难找。所以写约束的度量要拿捏好:题目明确给的限制必须写,题目隐含的性质也得写,但为了简化模型而做的假设要主动交代清楚。
常见约束类型包括:
- 资源约束:总消耗不超过可用量
- 需求约束:满足所有需求或客户覆盖
- 逻辑约束:选了B就不能选A,这类用0-1变量配合大M法表达
- 平衡约束:流入=流出
- 整数约束:决策变量取整数
有一个很重要的经验:先建一个宽松的模型,确保有解,再加约束逐步收紧。我见过很多队伍一上来把所有能想到的约束全写进模型,结果可行域是空的,根本求不出解,然后开始怀疑人生。空解有两种可能:一是约束写矛盾了,二是数据本身做不到。这时候要先删掉一部分软约束(比如“要求所有客户都准时送达”可以改成“晚到惩罚”),求一个基准可行解出来,再逐步加约束看目标值怎么变。这种“从松到紧”的过程在论文里也好看,能体现你对约束条件的理解。
3. 从线性规划到智能算法:模型分类与适用场景速查
这可能是你读这篇综述最想看的部分。优化模型家族很大,逐个深入能写好几本书,但竞赛里常考的其实就是下面这几类。我把它们的特点、适用场景、常用求解方法整理成一个表格,建议收藏。
| 模型类型 | 核心特征 | 典型应用场景 | 求解方法 |
|---|---|---|---|
| 线性规划 | 目标与约束均为线性 | 资源分配、生产计划、运输问题 | 单纯形法、内点法 |
| 整数规划 | 部分或全部变量取整 | 选址、装载、排班、0-1决策 | 分支定界、割平面 |
| 非线性规划 | 目标或约束含非线性项 | 材料配比、投资组合、定价 | 梯度法、罚函数法 |
| 动态规划 | 决策分阶段、有状态转移 | 最短路、背包、库存控制 | 递推、记忆化搜索 |
| 图论优化 | 基于节点和边 | 路径规划、网络流、最小生成树 | Dijkstra、Floyd、最大流算法 |
| 启发式算法 | 求解大规模组合优化 | 大规模TSP、VRP、调度 | 遗传、模拟退火、蚁群、粒子群 |
3.1 线性规划与整数规划:基础但绝不能丢分
线性规划是优化模型的地基。它的标准形式是“线性目标函数 + 线性约束”,求解非常成熟,几万变量几十万约束都能秒出结果。竞赛里凡是涉及分配、运输、排产的题,第一反应该试试线性规划。
整数规划比线性规划多了一个“整数限制”,难度却跳跃式上升,因为可行域变成离散点了。最典型的是0-1整数规划,比如“是否在某位置建仓库”“是否从某供应商采购”。分支定界法是求解整数规划的标准方法,它把连续松弛后的解作为上界/下界,不断分割可行域逼近整数解。
为什么说“基础但绝不能丢分”?因为我改过一些论文,发现很多队伍遇到排产问题直接上遗传算法,但连简单的整数规划模型都没建对。这是本末倒置。国赛阅卷时,评委看到你用一个“线性规划+分支定界”的精确解法解出了中等规模问题,会比对一个大而空的遗传算法印象好得多。精确解法有严格的理论保证,启发式只能说“找到比较好的解”。所以原则是:能用精确方法解决的问题,优先用精确方法。
3.2 非线性规划与动态规划:问题本身决定用哪种
非线性规划一般出现在目标函数或约束条件带有乘积、指数、对数项时。比如投资组合里风险与收益的权衡就是典型的二次规划(目标函数带xᵀQx项)。非线性规划的难点在于求全局最优很困难,很多算法只能找到局部最优解。竞赛里处理这个问题的手法一般是:换多个初始值多跑几遍,看结果是否一致,并在论文里说明“多次随机初始化结果稳定”。
动态规划解决的是“决策分阶段”的问题,核心思想是贝尔曼最优性原理:把大问题拆成若干阶段,每个阶段做一个决策,状态会转移,整个过程的收益是各阶段收益之和。背包问题是最经典的例子:前i件物品、背包容量为j时的最大价值,可以由前i-1件物品的决策递推而来。
动态规划的难点不在理论,而在状态设计。状态定义得好,转移方程写出来就三行;定义得差,要么状态空间爆炸,要么漏掉关键信息。我常用的技巧是先想清楚“记到哪个参数才能让下一步决策不依赖更早的历史”,这就是马尔可夫性的思想。竞赛中如果发现题目描述里有“阶段”“周期”“逐步”这些词,可以优先考虑动态规划或在此基础上做拓展。
3.3 图论优化:最短路径、最小生成树与网络流
图论优化是路径规划题的地基。当一个系统可以抽象成“节点+边”的网络时,图论模型就是最自然的语言。
- 最短路径问题:Dijkstra算法(无负权)或Floyd算法(全源)解决“从A到B的最短路线”,比如快递公司求两点间最省时间的配送路线。
- 最小生成树:把所有节点连起来且总边权最小,比如铺光纤、架电网,要让所有站点连通且造价最低。
- 最大流/最小费用最大流:在容量限制下求最大运输量,或找到流量最大时费用最小的方案,比如路网的车流量调度、物资调运。
图论模型的优势是可视化好、解释性强。画一张网络图放在论文里,评委一眼就知道你的模型长什么样。用Python的NetworkX库可以非常方便地建图、调用算法、画图,后面工具章节会详细讲。
注意:图论优化经常被包装成“看起来不像图”的场景。比如一个任务分配问题,把人、任务看成二分图的两边,求最优匹配,本质就是匈牙利算法的范畴。多画图、找隐藏的图结构,是解决这类题的关键能力。
3.4 启发式/智能优化:什么时候才真正需要
启发式算法的名声很大,遗传算法、模拟退火、蚁群算法在论文里出现频率很高。但我想先泼一盆冷水:很多竞赛题(尤其国赛)的规模并没有大到必须用启发式算法。用启发式算法的时机,应该是“精确算法在可接受时间内跑不出来”时,而不是“想显得模型高大上”时。
什么情况下精确算法跑不动?典型是NP难问题的大规模实例,比如几百个城市的TSP、带时间窗的车辆路径问题。这些问题的解空间随规模指数爆炸,分支定界也扛不住。这时候启发式算法才真正上场:它能较快找到一个不错的可行解,虽然不能保证全局最优,但配合“邻域搜索”“扰动机制”等策略,解质量通常足够好。
实战中我推荐一条实用路线:先建立精确的整数规划模型(用于小规模验证和算法对拍),再针对大规模实例设计启发式算法。这样论文里既有理论严谨的模型,又有应对实际规模的手段,两方面都能拿分。我见过太多队伍一上来就写遗传算法,但连“解怎么编码”“适应度函数怎么定”都没讲清楚,这样的写法评委会直接质疑模型的可复现性。
4. 求解实操:用 Python 和 MATLAB 把模型变成答案
模型建得再漂亮,解不出来也是白搭。这一节分享我实际用的工具链和重点函数。
4.1 线性规划:scipy.optimize.linprog 一行出解
Python环境下,最轻量的线性规划求解器是SciPy的linprog。它的标准形式默认是求最小值,约束写成不等式A_ub @ x <= b_ub,等式约束A_eq @ x == b_eq。求最大值时把目标函数取负。
举个具体例子。假设一个工厂生产两种产品,产品1单位利润6元,产品2单位利润8元;生产一件产品1消耗原料A 2单位、原料B 1单位,生产一件产品2消耗原料A 1单位、原料B 3单位;两种原料库存分别只有90和60。问产量多少利润最大。
python复制import numpy as np
from scipy.optimize import linprog
# 目标函数系数(注意linprog求最小值,所以利润取负)
c = [-6, -8]
# 不等式约束 A_ub @ x <= b_ub
A_ub = [[2, 1],
[1, 3]]
b_ub = [90, 60]
# 决策变量下界
bounds = [(0, None), (0, None)]
res = linprog(c, A_ub=A_ub, b_ub=b_ub, bounds=bounds, method='highs')
print(res)
method='highs'是SciPy近几个版本推出的高性能求解器,速度和稳定性都很好,推荐直接用。res.x就是最优产量,res.fun取负就是最大利润。
4.2 整数规划:scipy.optimize.milp 和 PuLP
SciPy 1.9之后加入了milp函数,可以直接求解混合整数线性规划。不过更通用、写起来更舒服的用法是PuLP这个建模库,它用运算符重载把数学模型几乎原样映射成代码,可读性非常高。
拿上一节的生产问题改成整数版本,同时加入“是否购买新设备”的0-1决策:
python复制import pulp
prob = pulp.LpProblem("Production_Plan", pulp.LpMaximize)
# 决策变量
x1 = pulp.LpVariable("x1", lowBound=0, cat="Integer") # 产品1产量
x2 = pulp.LpVariable("x2", lowBound=0, cat="Integer") # 产品2产量
y = pulp.LpVariable("y", cat="Binary") # 是否购买设备
# 目标函数
prob += 6 * x1 + 8 * x2 - 10 * y
# 约束条件
prob += 2 * x1 + x2 <= 90
prob += x1 + 3 * x2 <= 60
# 购买设备后才允许x1超过某个上限(大M法)
M = 100
prob += x1 <= M * y
prob.solve()
print(pulp.value(x1), pulp.value(x2), pulp.value(y))
这段代码里prob += x1 <= M * y是典型的大M法逻辑约束:如果y=0则x1必须为0,y=1时该约束自动松弛。M的取值只要大于x1可能出现最大值即可,取太大会引发数值问题。PuLP的.solve()默认调用CBC求解器,对竞赛规模的问题完全够用。
4.3 自写一个模拟退火框架,专啃路径规划
当问题规模大到整数规划也吃力时,就是你展示启发式算法能力的时候。这里我给你一个通用性很强的模拟退火模板,特别适合TSP或VRP类问题。
python复制import random
import math
def simulated_annealing(init_solution, eval_func, neighbor_func,
T0=1000, T_end=1e-3, alpha=0.995, max_iter=2000):
current = init_solution
current_score = eval_func(current)
best = current[:]
best_score = current_score
T = T0
while T > T_end:
for _ in range(max_iter):
new = neighbor_func(current) # 产生邻域解
new_score = eval_func(new) # 计算新解得分
delta = new_score - current_score
if delta < 0 or random.random() < math.exp(-delta / T):
current = new
current_score = new_score
if current_score < best_score:
best = current[:]
best_score = current_score
T *= alpha
return best, best_score
用的时候只需要实现两个函数:neighbor_func(比如交换路径中两个点的顺序)和eval_func(计算路径总长度)。模拟退火的调参经验:初温T0决定初始接受概率,太高会乱跳、太低会过早收敛;降温系数alpha越接近1,搜索越充分但耗时越长。我通常的做法是先在较小规模上调T0和alpha,观察收敛曲线,再应用到大规模实例上。
4.4 MATLAB 的优化工具箱与 Lingo
虽然我把Python作为主力,但MATLAB在数学建模竞赛里仍然有不可替代的地位。linprog对应线性规划,intlinprog对应混合整数规划,fmincon对应非线性规划带约束问题。如果你的队伍里有MATLAB熟手,用它来做敏感性分析图非常方便。
Lingo这个软件在竞赛圈也有一席之地,它的优势是建模语言极接近数学模型,几乎不需要“翻译”,很适合快速验证模型的正确性。但Lingo在大规模数值计算上不如MATLAB和Python灵活,近年用的人也在减少。我的建议是:工具贵精不贵多,队伍里有一套Python全流程链路就够了,其他工具按需补充。
5. 三道经典题型复盘:从读题到建模再到求解的完整链路
5.1 题型一:生产排产,线性规划/整数规划的教科书场景
这类题的价值在于练基本功。题目描述通常是:工厂有n种产品、m种原料,每种产品的利润系数、原料消耗系数、原料库存都给你,问如何组织生产。
建模型的时候,先做这几步:
- 定义决策变量:xᵢ为第i种产品的产量(连续或整数)
- 写出目标函数:max Σ pᵢxᵢ
- 写出资源约束:Σ aᵢⱼxᵢ ≤ bⱼ,对每种原料j
- 考虑非负约束和整数约束
求解后别急着写论文,先做灵敏度分析:如果原材料价格涨了10%,最优解怎么变?如果某产品利润降低,产量会下降到什么程度?用参数扫描画一张目标值随参数变化的折线图,论文的说服力立刻上来。
5.2 题型二:应急物资调度,多目标与网络流的组合拳
这类题在应用题里很有分量。背景通常是:若干仓库、若干需求点,车辆运力有限、道路容量有限,要求运输时间最短且总费用最低。它的难点在于多目标和非线性约束的叠加。
我的建模思路是分三步:
- 第一步,把交通网络抽象成图:节点是仓库、中转站、需求点;边是道路,边权是运输时间或费用。
- 第二步,定义流量变量:fᵤᵥ表示从u到v的物资量。容量约束是fᵤᵥ ≤ cᵤᵥ,需求约束是流入量-流出量=需求。
- 第三步,目标函数采用ε-约束法:min总费用,约束总时间不超过T。
求解上用小规模用线性规划或网络流算法,大规模则考虑把时间约束放到目标函数里再做迭代。论文里我会画两幅图:一是网络拓扑图和最优流量分配图,二是时间-费用的帕累托前沿图。这两幅图一放,模型的层次感马上出来。
5.3 题型三:TSP及其变种,组合优化的经典大坑
TSP(旅行商问题)是组合优化里最经典的NP难问题之一,出题概率极高。它的核心模型非常简单:min ΣΣ cᵢⱼxᵢⱼ,约束每个城市的入度和出度都为1。但直接解小规模可以,几十个城市以上就得靠启发式算法。
这类题的完整打法,我建议分四板斧:
- 精确模型打底:用小规模随机数据验证线性规划模型和约束的正确性。
- 启发式求解:对大规模实例用模拟退火或遗传算法求一个较好的解。
- 解的可视化:画出最优路径图,标注城市编号和路线顺序。
- 质量评估:用小规模实例的精确最优解和启发式解对比,计算gap(差距百分比),证明算法在可接受时间内达到了足够好的效果。
提醒一个常见的坑:TSP模型的子回路约束很多人会漏写或写错。只写“每个城市入度出度为1”是不够的,会产生若干个互不相连的小环。正确做法是用Miller-Tucker-Zemlin(MTZ)约束或加入割平面逐一排除子回路。漏掉这个约束,你的“最优解”就是错的,而且错误很隐蔽。
6. 实战防坑清单:那些年我们在优化题上踩过的雷
6.1 模型“过拟合”题目:把简单问题复杂化
竞赛评审有个很微妙的倾向:模型不是越复杂越好,和问题匹配的模型才是好模型。见过不少队伍把简单的线性规划问题硬套深度学习或复杂元启发式,结果解释不清楚参数含义,也被评委质疑“为什么不用更简单的模型?”
我的原则是:精确的简单模型优先于模糊的复杂模型。先用线性规划或整数规划建简洁模型,如果题目规模确实需要启发式算法再往上加。如果两个模型的解差距不大,简洁模型反而给人信心。
6.2 量纲与数值稳定性
这是个很乌龙但常犯的问题:目标函数里有的项量级是10⁶,有的项量级是10⁻³,直接用线性规划求解会导致数值误差,迭代发散或收敛到错误解。解决办法是先归一化:把成本、时间、距离统一到一个量级,或者给不同目标函数项设置合理的权重。
我一般会在建模前先做数据预处理:检查哪些变量范围跨度大,用简单的主成分思想看看哪些维度是主导的。这个操作在论文里写成一节“数据预处理”,能体现你的严谨性。
6.3 启发式算法的随机性与可复现性
模拟退火、遗传算法这类启发式算法本质上带随机性,不同随机种子跑出来结果不一样。如果你在论文里不写清楚参数设置,评委会怀疑你的结果是不是“碰巧跑出来的”。
我推荐的做法是:
- 固定一个随机种子
- 记录初始解、每轮迭代的最优值变化,画出收敛曲线
- 用多个种子跑5-10次,报告均值、方差、最坏情况
这样做既能证明算法稳定性,也让论文更可信。我把收敛曲线看作是论文里“性价比最高”的图之一。
6.4 结果验证:把解带回原问题检查一遍
这是我个人最在意、但很多人忽略的一步。求出一个“最优解”后,不要急着写进论文,先把解带回原始约束条件里一一验证:资源有没有超?需求量有没有满足?变量有没有越界?尤其是你自己写代码实现启发式算法时,由于邻域搜索操作不当,很容易生成不可行解,但代码没报错你就没察觉。
我曾经有一次跑遗传算法,收敛曲线很漂亮,结果后来发现编码解码过程写反了,实际解对应的目标函数值完全不符合题目要求。从这以后,“解验证”就成了我流程里的固定环节,没有这一步之前,任何解都不算数。
建议在论文里专门写一小段“解的可行性验证”:列出关键约束条件、它们各自的实际消耗值和最大允许值,用一个对比表格说明全部约束均满足。这个表格虽然不起眼,但对评委来说非常直观,加分效果极好。
6.5 写论文时,模型假设和变量说明一个都不能少
优化模型论文最忌讳的是变量符号满天飞,但没有任何地方集中定义。写论文时我建议所有变量用三线表或列表在模型建立后立即集中定义,包括符号、含义、单位、类型(连续/整数/0-1),并说明下标范围。
模型假设也不要省略,它决定了模型适用边界的合法性。很多队伍的假设写得太空,像“假设所有数据是准确的”这种废话,不仅不加分,反而让评委觉得你没抓到重点。好的假设应该服务于建模,比如“假设道路运输时间不随时间变化,因此模型是静态模型”。这样的假设直接交代了模型的局限,也为后续“动态拓展”留下了讨论空间。
最后再分享一个小技巧:优化类论文的图形化表达非常重要。一个复杂的模型,如果只放一堆公式,评委很难快速抓住结构。我通常用一张框架图把“输入数据 → 决策变量 → 约束条件 → 目标函数 → 求解算法 → 结果输出”全链路画出来,放在模型建立之前,让评委三秒内理解你的建模思想。这种图不算技术难点,但真的能提升论文档次。
这篇综述把优化模型的识别、建模、求解、验证四步写了一遍,每个环节都有对应的实战经验和代码参考。模型地图已经给你了,剩下的路需要你自己选一段题目,打开编辑器,从定义第一个决策变量开始。建过一个完整的优化模型之后,你会突然发现,竞赛里那些看似五花八门的题,背后其实都是同一套底层逻辑。
