优化建模:从实际约束到最值
「用料最省」「利润最大」「用时最短」这类问题落到数学上都是同一件事:写出一个一元函数,求它在某个区间上的最值。难点不在求导,在于把实际的约束翻译成函数与定义域——翻译得对不对,只能拿结论回到实际中去检验。
1 · 从实际问题到目标函数
建模的次序是固定的,跳步会在后面付出代价。
- 设变量。选一个自变量,其余的量都用它表示。选谁不影响答案,但影响表达式的繁简:圆柱罐用底面半径比用高好写,因为体积约束能把高直接解出来。
- 写目标函数,即待优化的那个量关于自变量的表达式。所有约束条件在这一步用掉,把多元问题压成一元。
- 定定义域。几何量为正、销量不为负、比例不超过一,这些限制决定了后面在哪个区间上比较。
- 求导,解 ,把驻点与定义域中可取的端点一并比较,定出最值。
- 回到实际意义验算。答案的量纲对不对,数量级合不合理,与已知的实物是否吻合。
第五步最容易被略过,而它恰恰是发现建模出错的唯一机会。下一节的罐子就卡在这一步上。
2 · 等体积罐子的用料
容积固定为 的圆柱形罐子,底面半径 、高 满足 。表面积
求导得 ,令其为零解出 。代回体积约束,:用料最省的罐子,高恰好等于直径。定义域是开区间,两个端点都取不到(半径为零装不下东西,半径趋于无穷时用料也趋于无穷),驻点唯一,它就是最小值点。
取 立方厘米,算得 厘米、 厘米,表面积 平方厘米。
拿这个结论去比对实物就出了问题。常见的 330 毫升两片式铝罐外径约 毫米、总高约 毫米,高与直径之比接近 ,而不是理论给出的 。真实的罐子比「最省」的方案高而瘦,且偏离得相当明显。
结论与实物不符时,该重新审视的是模型。上面那个目标函数把罐子当成了一张厚度均匀的纸:侧壁、底、盖每平方厘米的代价相同,卷封的翻边不耗材,罐子在货架上和手里也不占地方。这几条都不成立。把底与盖的厚度记作侧壁的 倍,目标函数变成 ,驻点条件给出 ,代回后
高与直径之比恰好就是厚度倍数 ,且与容积 无关。反过来由实物的 反推,相当于底盖的等效厚度约为侧壁的 倍——两片式铝罐的罐身经过减薄拉伸而底与盖需要承压,这个量级是说得通的。再把卷封翻边的耗材算进去,罐子还会被进一步拉高:取 、翻边宽 厘米时最优半径从 降到 厘米,比值从 升到 。
注 · 真实尺寸能离理论最优这么远,还有一个数值上的原因:目标函数在最优点附近极平坦。一阶导数在最优点为零,目标值的变化是二阶的:偏离翻一倍代价翻四倍,而基数极小。实测 的理想模型:半径偏离最优 只多用 的材料,偏离 多用 ,偏离 也才多用 。把半径从最优的 厘米直接改成实物的 厘米(偏离 ),用料只多 。省下的这一点材料,抵不过握持手感、货架高度与产线模具带来的约束,厂商也就没有理由去凑那个「最优」。
驻点有闭式解,用不着数值求根;core/optimize.ts 里仍留了一份牛顿法,用来对照。以
为方程,初值分别取
、、、,迭代
、、、
步后都停下,四个结果与解析解
至多差一个 ulp(其中初值
那一次差
,其余三次逐位相同)。初值
的第一步跳到了
,几乎冲出定义域左端——牛顿法的二次收敛只在最后几步兑现,前几步全看初值的运气。
3 · 定价与定义域的端点
某商品单位成本 元,售价定为 元时日销量为 件。日利润
定义域的两端各有来历:低于成本价不做生意,高于 元时销量降到零。,驻点 , 元,大于两端的 ,最优定价是 元。
例 3.1 上一段加一条限价:售价不得超过 元。定义域缩成 ,驻点 落在区间之外,候选只剩两个端点,、,最优定价是 元。 在 上一路递增,最优被限价「顶」在了右端点上。
警示 · 端点是否属于定义域,由实际问题决定,不能凭数学上的方便挑。限价这类政策约束是可以取到的上界,端点必须进候选;而罐子的半径取不到零,那个端点进了候选反而会给出一个取不到的「最优」。core/optimize.ts 的模型因此各自声明 closed: [boolean, boolean],solve
只把可取的端点放进候选清单。
4 · 折射与 Snell 定律
光从一种介质进入另一种时会拐一下。费马原理(Fermat's principle)说,光走的是用时最短的那条路径。用时最短与路程最短是两件事,两者只在同一种介质里才重合。
设光源在界面上方高 处,目标点在界面下方深 处,两者水平相距 ;光在上下两种介质中的速率分别为 、。设入射点距光源正下方 ,则
定理 4.1(Snell 定律) 使 取最小值的入射点满足 其中 、 分别是入射线与折射线跟界面法线的夹角。
证明 对 求导: 两个分式各自的分子是水平位移、分母是斜边长与速率之积,故 、,于是 在 上严格递增(第一项随 增大,第二项随 减小),零点唯一,且 ,该零点即最小值点。令 即得定理的等式。∎
求导的中间结果自己变成了正弦,并非巧合: 本来就是「路径长度关于入射点位移的变化率」, 的两项各是一段路的用时对同一个位移的响应。
取 、、,水与空气的折射率之比 。数值解出的最优入射点是 ,此处 、,正弦之比算得 ,与 只差 。这个偏差是最后一位的舍入,两条路线(对目标函数求导,与直接引用 Snell 定律)在双精度下完全对上。
顺带可以量出「拐这一下」值多少。同一组参数下,直线路径的入射点由相似三角形定为 ,用时 ;最优路径的用时 ,快了 。折射角在图上看着相当明显,换算成用时却只有不到百分之一的差别,这与上一节罐子那条同源:最优点附近目标函数是平的,入射点偏离最优 时用时只多 ,偏离 时只多 。
5 · 参考文献
- Mathematical optimization. Wikipedia. 优化问题的一般形式与可行域的概念。https://en.wikipedia.org/wiki/Mathematical_optimization
- Fermat's principle. Wikipedia. 费马原理的表述、历史与由它导出的反射与折射定律。https://en.wikipedia.org/wiki/Fermat%27s_principle
- Snell's law. Wikipedia. 折射定律的多种推导路径,含费马原理与惠更斯原理两条。https://en.wikipedia.org/wiki/Snell%27s_law
- Newton's method. Wikipedia. 牛顿法的收敛阶与对初值的依赖。https://en.wikipedia.org/wiki/Newton%27s_method
- Drink can. Wikipedia. 两片式铝罐的成型工艺、壁厚分布与常见公称尺寸。https://en.wikipedia.org/wiki/Drink_can