數學建模學習工坊 / 05
資源分配:最優解背後的假設
有限工時與材料應如何分配?
學習目標與先備條件
線性不等式、矩陣乘法與最佳化基礎。
- 把資源用量轉成附單位的限制。
- 用頂點及整數枚舉比較求解器結果。
- 解讀局部影子價格,避免視作全域定律。
01 / 08 · 10 分鐘
觀察情境
一個合成工場製作兩產品:x 每件用兩工時及一材料單位,y 每件用一工時及兩材料單位。可用資源為 40 工時與 50 材料單位,單件利潤為 30 與 20 點,全部是自訂規劃數據。
解釋為何只做單件利潤較高的產品,不一定令總利潤最高。
02 / 08 · 10 分鐘
提出問題
先決定產品是否可分割。連續模型可以代表批量,但完整件數需要整數決策。求解器的最優解只回答所寫目標與限制,不能證明利潤就是正確的社會或組織目標。
寫出決策變數、單位,以及目標使誰受益。
03 / 08 · 15 分鐘
假設與變數
假設每件資源用量及利潤固定、資源總量已知、需求沒有上限,因此得到線性可行域。擁擠、開機成本或不確定需求可能需要換模型,而非更準確的 LP 求解器。
選兩個假設,各配一項合理壓力測試。
04 / 08 · 20 分鐘
建立模型
第一資源列為 2x+y≤L,第二列為 x+2y≤M,並加入非負限制。目標為 px*x+py*y。SciPy 做最小化,因此傳入負利潤向量;查看最佳化結果前先畫邊界交點。
計算預設兩條邊界交點,並與兩條坐標軸截點的利潤比較。
05 / 08 · 15 分鐘
設計算法
獨立核證:枚舉可行頂點並計算目標,再為這個小問題枚舉可行整數對。對偶邊際值代表局部敏感度;當有效限制改變,影子價格未必能預測有限幅度資源增加。
預測增加一工時的效果,區分局部導數與增加 20% 的情境變動。
06 / 08 · 25 分鐘
Python 實驗
完成目標函式。求解器與幾何參照獨立於你的實作,因此兩者一致也不會掩蓋你的錯誤目標。比較工時 32、40、48,再改 profit_y 觀察首選組合。
記錄連續及整數最優解、資源鬆弛量與擾動結果。
07 / 08 · 25 分鐘
驗證與修訂
框架檢查兩個刻意失效模型:非負生產卻要求 x+y≤−1,會不可行;正利潤而無資源上限,會無界。這些狀態是有用診斷,不能當成零利潤最優解。
解釋兩種失敗的結構原因,並提出修正模型。
08 / 08 · 15 分鐘
撰寫結論
報告配置、假設、目標值及敏感範圍,加入一個決策改變的情境。如需完整件數,應報告整數結果,不可把分數解直接四捨五入。
寫一份決策備忘,列出何種變化會觸發重新配置。
需要一點提示?
1. 概念提示
每種產品的数量乘單件利潤,再相加。
2. 數學/算法提示
x 是兩元素陣列:x[0] 代表產品 x,x[1] 代表產品 y。
3. 參考實作導引
在每個可行頂點比較參照目標與你的運算式。
先比較推理,再選擇是否套用。套用前會另存你目前的程式。
實驗協定:比較、失效與延伸
指定比較
固定材料,比較工時預算的 80%、100% 與 120%。
失效實驗
區分不可行、無界與有限最優問題;不可未核對限制便把分數方案取整。
研究延伸
加入需求上限或開機成本,比較修訂決策與原 LP。
PYTHON WORKBENCH
先預測,再執行。
實驗參數與種子
可直接修改以上程式,或開啟語法標示編輯器。起始碼的待完成部分會令相關檢查失敗;請依推導修正 student_model。
按啟動才下載運算環境;每次實驗使用獨立命名空間,最多 30 秒。
無法載入?仍可下載獨立 notebook,在安裝 NumPy、SciPy、Matplotlib 的 Python 環境執行。 參考 notebook
把這一課連回你的書架。
課文與寫作 Notes
書籍章節(PDF 頁與印刷頁分列)
- Fox & Burks — Advanced Mathematical Modeling with Technology
6: Linear, integer and mixed integer programming
PDF 262–263 · 印刷頁 245–246