歡迎來到圖解線性規劃 (Graphical Linear Programming)!
你有沒有遇過需要在有限的時間、金錢或資源下,將效益最大化的情況?例如:決定每個科目該分配多少溫習時間以取得最佳成績,或者烘焙店該如何分配製作「紙杯蛋糕」與「布朗尼」的數量,才能賺取最多的利潤。
這正是線性規劃 (Linear Programming, LP) 的精髓所在!在本章中,我們將透過繪圖來找出這些現實難題的「最佳方案」。無論你是以奪取高分為目標,還是希望能順利過關,這些筆記都會一步步帶領你掌握技巧。
1. 建立問題模型 (Formulating the Problem)
在繪圖之前,我們必須先把文字問題轉化為數學語言,這稱為建立模型 (Formulation)。你可以把它想像成把中文翻譯成「數學式」。
線性規劃問題的三大要素:
- 決策變數 (Decision Variables): 這是你需要決定的對象,我們通常用 \(x\) 和 \(y\) 來表示。 範例:設 \(x\) 為普通蛋糕的數量,\(y\) 為豪華蛋糕的數量。
- 限制條件 (Constraints): 這就是所謂的「規則」或限制。例如:麵粉存量有限,或焗爐的使用時間有限。
快速溫習: 不等式通常使用符號 \( \leq \)(小於或等於)或 \( \geq \)(大於或等於)。 - 目標函數 (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)
當我們有了不等式後,就可以將它們畫在座標平面上。
步驟拆解:繪製可行域
- 繪製邊界線: 將每個不等式視為方程式(使用 \(=\)),繪製邊界線。 小貼士:要畫 \(2x + 3y = 12\),找出它與軸的交點即可。如果 \(x=0, y=4\);如果 \(y=0, x=6\)。將 (0,4) 和 (6,0) 連起來。
- 塗黑「不符合」的區域: OCR A Level 的規則通常要求你塗黑「不符合」不等式的區域。 常見錯誤: 千萬不要塗黑「符合」的部分!可行域 (Feasible Region) 應該是中間那一塊乾淨、沒有被塗黑的區域。
- 可行域: 這個沒被塗黑的區域,代表了所有滿足所有規則的 \(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)
不用擔心,這聽起來很複雜,但它只是一種「分而治之」的策略:
- 找出非整數的最優解(例如 \(x = 3.5\))。
- 分枝 (Branch) 成兩個新問題:一個設 \(x \leq 3\),另一個設 \(x \geq 4\)。
- 利用圖解法分別解決這些新區域。
- 持續分枝,直到找出最佳的整數點為止。
6. 靈敏度分析 (Sensitivity Analysis)
如果「普通蛋糕」的利潤從 5 英鎊變為 6 英鎊,會發生什麼事?
改變目標函數中的係數會改變目標線的斜率 (Gradient)。如果斜率變得夠陡,目標線可能會「翻過」某個頂點,從而使另一個頂點成為新的最優解。
快速溫習盒:
- 可行域 (Feasible Region): 沒被塗黑的「安全區」。
- 頂點 (Vertex): 兩條邊界線的交點。
- 整數 (Integer): 沒有小數部分的完整數字。
- 目標 (Objective): 你的目的(極大化/極小化)。
最終檢查清單
- 建立模型: 寫出變數、目標函數和約束條件。
- 作圖: 畫出邊界線並塗黑不符合的區域。
- 優化: 使用滑動目標線或測試各個頂點。
- 整數: 如有要求,使用分枝定界法檢查頂點附近的整數點。