一句话定义:线性规划(Linear Programming, LP)就是在一组“线性不等式”圈定的可选范围里,找出一组数,让另一个线性表达式取到最大值或最小值。
把三个词拆开看。要决定的量叫决策变量,比如今天做多少份盖饭、多少碗面;想最大化的东西叫目标函数,比如总利润,写成“每份利润 × 份数”再相加;限制条件叫约束,比如米饭只有 50 斤、灶台只开 8 小时、人手就 3 个人,每一条都能写成一个线性不等式。三个部分都是“一次方、只加减、不乘除、不带平方”,这就是“线性”的全部含义。
生活化的比方:小餐馆老板每天开工前都要在心里解一道 LP——资源有限(约束),单品利润固定(线性目标),怎么排产最赚(最优解)。几何上,约束围出的可行域是一个多边形或多面体,最优解一定落在某个顶点上;单纯形法(simplex method)就是沿着棱从一个顶点走到更赚的顶点,内点法(interior-point method)则从内部穿过去。只要建模正确,LP 理论上能给出全局最优解,这比神经网络那种“调到差不多就行”的优化体验要好得多。
和相邻概念的区别:
| 概念 | 变量取值 | 目标与约束 | 典型场景 |
|---|---|---|---|
| 线性规划 | 连续实数 | 全为线性 | 预算、产能、配额分配 |
| 整数规划(Integer Programming) | 必须取整 | 线性但解空间离散 | 排班、装箱、选址 |
| 非线性规划 | 连续 | 含曲线、乘积项 | 能耗、轨迹优化 |
| 约束满足(Constraint Satisfaction) | 任意 | 只求“可行”不求“最优” | 配置校验、规则检查 |
一句话:整数规划是“加了取整的 LP”,非线性规划是“弯了的 LP”,约束满足是“只求解得出、不求最好”。
对从业者的意义。AI 系统里到处是“有限资源怎么分”的问题:一批训练任务抢有限的 GPU 时长、一次广告投放怎么在预算内分配、推荐位怎么在曝光约束下最大化点击。这些问题只要目标能写成加权求和、约束能写成“不超过/不低于”,就可以直接建成 LP,交给成熟求解器,不必自己写启发式规则去试。
对齐与安全约束也常这样建模:把“某类输出比例不超过某个阈值”“各类别配额落在区间内”写成线性不等式,剩下的目标仍然线性。RLHF 里常见的“别偏离参考模型太远”,严格说是概率分布间的约束,通常近似处理,不要把它当成标准 LP 来理解。
还有一层隐性价值:整数规划求解器在分支定界(branch and bound)过程中,会反复解“先不管取整”的 LP 松弛,用它的最优值当界,判断哪些分支可以剪掉。LP 因此是许多运筹优化的底层子程序。
对普通人的意义:你看到的排班表、外卖骑手的路线分配、公司年度预算切分,背后很可能就有一道 LP 在跑。它的好处是可解释:每条约束都能指出来,每个结果都能追问“是哪个限制卡住了”。动手时记住两点:建模比算法重要,约束写错一行,答案全错;以及现成求解器的接口、许可和性能说明以官方页面为准。
