四个月,十六个格子。捷运公司要在第1、2、3、4个月初签下租期为1、2、3、4个月的仓库,每个格子代表一种组合。算出来的最优解是:x11=3,x31=8,x14=12,其他变量取值均为零。总费用118400元。十六个格子里,只有三个有数。剩下的十三格,干干净净,全是零。
这不是算错了。这是线性规划最诚实的地方:最优解常常落在可行域的顶点上,也就是几个约束边界交汇的角落。它不追求面面俱到,它只在对的地方使力,其余地方松手。
一家捷运公司要租四个月的仓库,模型给出十六个变量,最优解里只有三个不是零。这本书不讲玄学,它把“怎么在约束里找到最好的那一步”拆成三件事:决策变量、约束条件、目标函数。看懂这三件事,你手里那团乱麻就有了坐标。
《数学建模算法与应用(第3版)》不是一本教你“数学有多美”的书。它是一本操作手册,司守奎和孙玺菁把多年竞赛辅导里磨出来的案例摆在你面前:仓库租借、投资组合、运输调度、乳腺癌诊断、图像水印。每一个案例都从“设变量”开始,到“写出目标函数”结束。中间没有抒情。
但恰恰是这种不抒情,让它的解释力变得很硬。你跟着它把捷运公司的租借表翻译成十六个变量,把“每月仓库面积不少于需求”翻译成四行不等式,把“总费用最小”翻译成一个求和式。翻译完,问题就不再是一团乱麻,而是一个有边界的可行域。最优解不在别处,就在某个角上。
把乱麻写成三行
书里第1章讲线性规划,开篇就给了一个三步框架:分析问题,找出决策变量;根据条件,找出约束条件;根据目标,构造目标函数。三个要素齐了,模型就立起来了。
这三步可以随身带。你手头任何一件烦事——选专业、换工作、安排一个项目的排期——都可以先写成三行:
- 我能动的变量是什么?
- 我不能越过的约束是什么?
- 我到底要最大化或最小化什么?
写不出来,说明问题还没想清楚。写得出来,哪怕你不会Matlab,也已经完成了一半建模。剩下的才是算法。
书里所有例题都配了Matlab或Lingo源程序,程序设计简单精炼,注释详尽。节选里那个仓库问题,Matlab代码只有几行:定义优化问题、设变量下界、写目标函数、写约束、调用solve。但代码之前那三行,才是真正的门槛。
所有系数都是估计值
书里有一句话,放在第1章,很容易被跳过:“对于数学规划模型,一定要做灵敏度分析。”
为什么一定要做?因为模型里的a_ij、b_i、c_j,在纸上都是常数,在现实里都是估计值或预测值。市场条件一变,c_j就变;生产工艺一改,b_i就变;a_ij也会由于种种原因产生改变。你算出来的那个“最优解”,是建立在一组假设上的。假设一动,最优解还成立吗?
书里给了两个问题:参数中一个或几个变了,现行最优方案会有什么变化?把这些参数的变化限制在什么范围内,原最优解仍是最优?这两个问题,比“最优解是多少”更接近现实。现实里没有一劳永逸的最优,只有带保质期的最优。
书里另一个例子更贴近钱包。它先列假设,再建模型:
模型假设:(1)可供投资的资金数额M相当大。(2)投资越分散,总的风险越小,总体风险可用所投资的S_i中最大的一个风险来度量。(3)可供选择的n+1种资产(含银行存款)之间是相互独立的。(4)每种资产可购买的数量为任意值。(5)在当前投资周期内,r_i,q_i,p_i,u_i(i=0,1,⋯,n)固定不变。(6)不考虑在资产交易过程中产生的其他费用,如股票交易印花税等。模型建立:(1)总体风险用所投资的S_i中最大的一个风险来衡量,即max{q_i x_i | i=1,2,⋯,n}。
这六条假设里,最危险的是第(5)条:“固定不变”。现实里没有什么是固定不变的。书里接着就给了笨办法:给定参变量一个步长,重复求解线性规划问题,观察最优解的变化。特别是用计算机求解时,这不失为一种可用的数值方法。笨,但诚实。
最优解里那一片零,像一盘全白的录像带。站内那篇《墙上时钟是15:20,他们的录像带全白了》,标题本身就像一个模型:时间停了,记录没了,剩下的全是空白。仓库问题里那十三个零,不是没发生的事,是被模型判定为“不必发生”的事。灵敏度分析要问的,就是哪个零本来可能不是零。
今晚,只写四行
不用打开软件,不用装Matlab。今晚拿一张纸,把你手头最烦的那件事写成四行:
- 我能决定的变量:______
- 我不能越过的约束:______
- 我要最大化的目标:______
- 哪个数变多少,这个方案就废了:______
前三行来自书里的三要素,第四行来自灵敏度分析。写完这四行,你再决定要不要翻书里的算法。书很厚,目录从差分方程、支持向量机、偏最小二乘回归,一路排到模拟退火、遗传算法、数字图像处理、PageRank。但你不需要一次吃完。你只需要先把手头这一件事,翻译成模型。
目录翻过去,第9章的支持向量机落在乳腺癌诊断上,第13章的数字图像处理讲水印防伪和图像加密,第14章的综合评价方法里藏着PageRank算法和招聘公务员问题。这些案例的底层逻辑是同一个:先把现实写成变量,再在约束里找那个角。
如果你想把“预测”再往前推一步,可以看看《因果推断方法及其应用》;如果你好奇今天那些更大的模型怎么运转,《图解大模型》是一张不错的地图。它们和《数学建模算法与应用(第3版)》放在一起,像三个接力站:一个教你把现实写成约束,一个教你在约束里找最优,一个问你在相关之外还能不能找到原因。
如果这五分钟让你对自己手头那团乱麻多看了一眼,哪怕只是想把“决策变量”四个字写在纸上,导游的工作就完成了。去吧,放下这篇文章,去读属于你的原著。









