欢迎来到图解线性规划 (Graphical Linear Programming)!

你有没有遇过需要在有限的时间、金钱或资源下,将效益最大化的情况?例如:决定每个科目该分配多少复习时间以取得最佳成绩,或者烘焙店该如何分配制作“纸杯蛋糕”与“布朗尼”的数量,才能赚取最多的利润。

这正是线性规划 (Linear Programming, LP) 的精髓所在!在本章中,我们将透过绘图来找出这些现实难题的“最佳方案”。无论你是以夺取高分为目标,还是希望能顺利过关,这些笔记都会一步步带领你掌握技巧。

1. 建立问题模型 (Formulating the Problem)

在绘图之前,我们必须先把文字问题转化为数学语言,这称为建立模型 (Formulation)。你可以把它想象成把中文翻译成“数学式”。

线性规划问题的三大要素:

  1. 决策变量 (Decision Variables): 这是你需要决定的对象,我们通常用 \(x\) 和 \(y\) 来表示。 范例:设 \(x\) 为普通蛋糕的数量,\(y\) 为豪华蛋糕的数量。
  2. 限制条件 (Constraints): 这就是所谓的“规则”或限制。例如:面粉存量有限,或烤箱的使用时间有限。
    快速复习: 不等式通常使用符号 \( \leq \)(小于或等于)或 \( \geq \)(大于或等于)。
  3. 目标函数 (Objective Function): 这是你的最终目标。你是要极大化 (Maximise) 利润,还是极小化 (Minimise) 成本? 范例:极大化 \(P = 5x + 8y\)(其中 5 英镑和 8 英镑分别是两种蛋糕的利润)。

特殊情况:比例限制 (Ratio Constraints)

有时候题目会说:“制作的普通蛋糕数量至少要达到豪华蛋糕的两倍。”
别惊慌!直接照字面意思写出来: \(x \geq 2y\)。然后,移项让变量都落在同一侧: \(x - 2y \geq 0\)。

平凡限制 (Trivial Constraints)

在现实世界中,你不可能制作 -5 个蛋糕。因此,我们几乎总是会加上平凡限制: \(x \geq 0\) 且 \(y \geq 0\)。这些条件能确保我们的图形只出现在第一象限。

重点提示: 在写下不等式之前,请务必清楚定义你的变量及其单位(例如:“蛋糕的数量”)!

2. 图解法 (The Graphical Solution)

当我们有了不等式后,就可以将它们画在坐标平面上。

步骤拆解:绘制可行域

  1. 绘制边界线: 将每个不等式视为方程式(使用 \(=\)),绘制边界线。 小贴士:要画 \(2x + 3y = 12\),找出它与轴的交点即可。如果 \(x=0, y=4\);如果 \(y=0, x=6\)。将 (0,4) 和 (6,0) 连起来。
  2. 涂黑“不符合”的区域: OCR A Level 的规则通常要求你涂黑“不符合”不等式的区域常见错误: 千万不要涂黑“符合”的部分!可行域 (Feasible Region) 应该是中间那一块干净、没有被涂黑的区域。
  3. 可行域: 这个没被涂黑的区域,代表了所有满足所有规则的 \(x\) 和 \(y\) 的组合。

你知道吗? 可行域一定是一个凸多边形 (Convex polygon)。这意味着它的边是直的,且没有任何“凹进去”的角。

3. 寻找最优点 (Finding the Optimal Point)

现在我们已经有了清晰的“可行域”,那哪一点才是最好的呢?“完美”答案几乎总是落在可行域的顶点 (Vertices)(即边界交点)上。

方法 A:目标线法(“滑动直尺”技巧)

1. 为目标函数选一个随机数值(例如:若目标是 \(5x + 8y\),试着设 \(5x + 8y = 40\))。
2. 在图上画出这条线(通常画成虚线)。
3. 用直尺将这条线在可行域内平行移动。
4. 对于极大化问题,直尺在离开可行域前触碰到的最后一点就是胜出者。对于极小化问题,则是直尺触碰到的第一个点。

方法 B:顶点测试法

直接找出没被涂黑区域的所有顶点坐标,并将它们代入目标函数中。计算结果最大(或最小)的那一点就是答案!

重点提示: 最优解通常出现在顶点。如果目标线与某条边界线平行,那么该边界线上的每一点都可能是最优解!

4. 松弛变量 (Slack Variables)(阶段 2 学习者)

有时候我们想把不等式转化为方程式,这时就需要加入一个松弛变量

想象你有 10 小时的工时 (\(x + y \leq 10\))。如果你只用了 8 小时,就剩下 2 小时的“松弛”时间。
我们写成: \(x + y + s_1 = 10\),其中 \(s_1 \geq 0\)。
记忆法: 松弛就是“剩余的”空间。将它加在 \(\leq\) 符号的“较小”那一侧,就能使其相等。

5. 整数规划 (Integer Programming)

如果 \(x\) 和 \(y\) 必须是整数怎么办?(你总不能卖出 2.37 辆车吧!)。

如果你的最优顶点不是整数(例如 \(2.4, 5.8\)),你不能直接四舍五入!因为四舍五入后的点可能会落在可行域之外。

分枝定界法 (Branch-and-Bound Method)

不用担心,这听起来很复杂,但它只是一种“分而治之”的策略:

  1. 找出非整数的最优解(例如 \(x = 3.5\))。
  2. 分枝 (Branch) 成两个新问题:一个设 \(x \leq 3\),另一个设 \(x \geq 4\)。
  3. 利用图解法分别解决这些新区域。
  4. 持续分枝,直到找出最佳的整数点为止。

6. 灵敏度分析 (Sensitivity Analysis)

如果“普通蛋糕”的利润从 5 英镑变为 6 英镑,会发生什么事?

改变目标函数中的系数会改变目标线的斜率 (Gradient)。如果斜率变得够陡,目标线可能会“翻过”某个顶点,从而使另一个顶点成为新的最优解。

快速复习盒:
- 可行域 (Feasible Region): 没被涂黑的“安全区”。
- 顶点 (Vertex): 两条边界线的交点。
- 整数 (Integer): 没有小数部分的完整数字。
- 目标 (Objective): 你的目的(极大化/极小化)。

最终检查清单

  1. 建立模型: 写出变量、目标函数和约束条件。
  2. 作图: 画出边界线并涂黑不符合的区域
  3. 优化: 使用滑动目标线或测试各个顶点。
  4. 整数: 如有要求,使用分枝定界法检查顶点附近的整数点。