本章要回答的三个问题:一句含糊的业务诉求如何变成可求解的数学模型?什么样的模型地形是"好走"的(凸),什么样的地形会让算法迷路?在动手求解之前,如何判断一个问题在计算上是否可行?本章是全册的翻译课与侦察课。
运筹学项目失败的最常见原因不是求解器太慢,而是模型建错了:把"尽量少加班"忘进约束里,把非线性的运费写成线性,把应该取整的机器台数当成连续变量。模型是沙盘,沙盘画歪了,推演再精确也是在错误的地图上行军。所以本章把"建模"单独拎出来练:先学四要素的规范翻译法,再学两门侦察术——凸性判读(地形好不好走)与复杂性估算(兵力够不够打)。
这两个侦察工具决定了全册后续的兵法选择:凸问题放心交给梯度类算法,非凸问题要考虑初始点与全局策略;多项式可解的问题追求精确解,NP 难的问题就名正言顺地转向启发式与近似算法。第 3 章开始的每一件兵器,适用边界都在本章划出。
| 节号 | 回答哪个问题 | 关键产出 |
|---|---|---|
| 2.1 建模四要素 | 翻译的规范动作是什么 | 食谱配比模型的完整推导与求解 |
| 2.2 凸性与复杂性 | 地形与兵力怎么侦察 | 凸函数判别代码 + 难度分级表 |
建模的黄金检验:把模型拿给提出问题的人看,若对方能指着变量说出它的业务含义,模型就成功了一半。
建模阶段的重灾区有四块,本章先点名。其一,变量定义含糊:同一个 x,在目标里按吨计价、在约束里按件计数——单位混乱是新手模型荒谬解的头号来源,2.1 节的检查清单专治此项。其二,把愿望写成约束:业务方说"希望成本尽量低、交付尽量快",两句愿望都被塞进约束栏,模型直接不可行。愿望中的"尽量"应当翻译成目标或罚函数,只有物理规律与硬性规章才配进约束。其三,凸性误判:看到目标里有平方项就断定是凸问题,却忘了检查二次矩阵是否半正定;2.2 节的中点采样代码是一条廉价的防线。其四,复杂性无感:在几千个二值变量的问题上期待秒级求解,没有为分支定界的时间上限与间隙阈值做任何预案。把这四块地雷记在心里再读两节,你会发现每个坑都有对应的排雷动作。
读懂 2.2 的复杂性部分不需要计算理论背景,只需要接受一个工程事实:问题的难度不是看规模数字,而是看耗时随规模的增长曲线。三十个城市的路线问题与三十个变量的配比问题,变量数一样,命运天差地别——前者是阶乘级组合,后者是多项式代数。本章把这个事实变成动笔前的例行侦察,后面各章的每件兵器都会先报自己的适用规模,你应当逐渐养成对这个问题多大的条件反射式敏感。
下一章正式开打:线性规划、整数规划、非线性规划、动态规划四件确定性兵器依次登场,每件的出场顺序都由本章的两门侦察术决定。