工坊多买八小时工时,能多赚多少钱?一种产品每件利润更高,是不是就应该全部生产它?如果算出的最优安排需要半辆车,这个答案还算不算解决了问题?
这些问题都要从模型开始。你得说明哪些量可以决定、哪些资源不能超用,目标里的“更好”究竟指什么。我会把每一步计算放回它原来的情境里:矩阵的一行可能是一种材料的库存,算法报告的一个乘子可能是多给一小时工时能增加的利润。数字算对以后,还要检查它对应的方案是否做得到,以及这个结论能用到多大的范围。
向量、矩阵乘法和线性方程组会经常出现。读到线性规划时,你需要能把几条约束合写成矩阵形式,也要能从矩阵里重新认出每种资源的消耗。还不熟悉的话,可以回看《线性代数 I》相应部分,用两种产品、两种资源的小例子练习。
后半段会用偏导数、梯度、Hessian 和二阶近似,建议已经读过《多变量微积分 I》。这里会解释这些工具怎样决定迭代方向和步长,不从头重讲求导规则。遇到一个矩阵表达式读不下去时,把它暂时改成一元或二维的计算,往往更容易看出每一项在做什么。
这门课采用本科中高阶的入门范围。你不需要预先会用大型求解器;小问题会展开到可以手算、画图和逐步核对的程度。
开头的建模与凸性,解决的是“哪些安排可以比较”以及“局部判断什么时候可靠”。线性规划接着把几何角点写成代数里的基,解释单纯形法怎样决定下一步、什么时候该停,以及不可行与无界有什么区别。
对偶提供另一种看答案的方式。一个生产安排给出可以实现的利润,一套满足条件的资源价格给出利润上界;两者相遇,就有了可以独立检查的最优性证书。我们还会改变资源量,看原来的价格在哪个范围内有效,为什么拐点处不能继续套用同一个斜率。
车辆、班次和开关这类决定要单独处理。整数优化会保留已经找到的可行方案,同时用松弛问题估计尚未搜索区域的最好可能性。网络章节则沿着有向边追踪最短路径和流量,特别解释残量网络的反向边:它允许撤回之前的一部分安排,给新的路线腾出空间。
连续优化部分从梯度更新走到 Newton 方法、约束最优性与步长选择。一个方向局部向下,不表示任何步长都安全;梯度很小,也需要结合凸性、约束和误差界来解释。最后的综合建模会把这些检查放在一起,讨论如何报告可行性、最优性、资源变化和多目标折中。
对偶实验里,可以同时改变生产量和资源价格。试着找出一种情况:生产安排可行,但报价没能覆盖某种产品的利润。此时即使两个总数很接近,也不能当作最优证书。回到纸上写出失效的那条不等式,交互里的颜色和数字才有了明确含义。
研究算法时也一样。把步长调大以后,留意轨迹和误差怎样变化;做整数问题时,把取整后的方案代回每条约束;看最大流时,沿着一条反向残量边说明原来的哪部分流被取消。操作后的解释比多点几次按钮更有价值。
比值检验的符号、对偶不等式的方向、分支定界的上下界、KKT 中乘子的作用,都容易在记公式时混过去。正文会交代这些条件在哪一步用到。练习改变了约束或变量的含义以后,要重新判断,不能只把新数字填进旧算式。
完成一个模型时,可以试着写一份简短记录:变量与单位是什么,哪些假设决定了约束,最后的安排为什么可行,用什么证据支持它,以及数据变化后哪些结论需要重新计算。能把这些话讲清楚,优化方法才真正能帮助你作出可解释的决定。