(都市傳說:喺標題加隱世、秘境、紫薯、拉絲、邪惡就會多人睇)
Excel 包羅萬有(早年甚至有神秘賽車小遊戲),今日講吓較少人留意但又功能強勁的 Solver Add-in,還記得中學數學的 Linear Programming (線性規劃) 嗎? 唔記得唔緊要,反正唔記得都照用得 Solver Add-in,不過首先要 enable 佢先。小弟仲用緊 Excel 2010,不過後續版本好似都係差唔多,如果 Data 嗰個 Tab 無 Solver (或者線性規劃) ,咁就要做以下動作:
講左咁耐,究竟 Solver 有乜用?簡而言之,就係喺符合不同限制的前提下找出最優/局部最優/較優解 (OK,你講晒),唔駛自己逐個逐個 scenario 咁試,慳水慳力。仲係一頭霧水,咁我又用例子答你。
例子
小明有 $50 零用錢,咁當然買零食啦,但買返屋企又實俾屋企人鬧,咁只好珍而重之買完放喺班房個 Locker (60 個單位咁大,此單位不同彼單位),零食價錢唔同,體積唔同,有些又無咁好食,咁點買去謀求最大利益先好呢?
首先要決定個目標係乜,最大體積?(枕頭咩?) 最高滿足度?或者綜合指標?小明懶科學咁整左個指數,0.5 * 總滿足度 + 0.2 * 剩低的零用錢,咁呢個就係 Objective Function (目標函數),而呢個數喺呢個場景當然越大越好啦。你想摧毀價值令佢變細都好簡單,全副身家掃晒東京薯片,個分數仲細過乜都唔買,咁就真係喊三聲。
之後就要喺 Data 個 Tab 撳個 Solver Add-in 出嚟,Set Objective: 就揀返評分嗰格 C13,To: 就揀 Max (最大化),By Changing Variable Cells: 就揀件數嗰幾格 F3:F7。之後就係望落有少少複雜的 Constraints,撳 “Add”,然後打返條限制條件, C11 (總價錢) 唔可以超過 50,F3:F7 為非負整數 (總唔能夠買 -1 包或者 0.5 筒吧),C12 (總體積) 唔可以大過 Locker 容量 (60 單位)。
最後撳個 Solve 掣,不消一會就彈出答案,4 包寒潮薯片,3 包借宿一燒,盛惠 $49 大元,淨返一蚊雞,評分為 20.2。但要注意,呢個又未必係唯一一個可行答案 (而 Solver 係唔會自動同你計晒所有答案出嚟),例如 5 包寒潮薯片,1 包 John 牌薯圈同樣盛惠 $49 大元,評分同樣係 20.2,總體積甚至仲細過一開頭個答案,不過目標函數無特別考慮體積,故對評分無影響。(以上例子為大名鼎鼎的背包問題(Knapsack Problem) 的小小變種,讀過 Algorithm 的話應該唔會對佢陌生)
其實 Solver Add-in 有三個 Solving Methods,由於例子簡單,最簡單的 Simplex LP 就足夠,另外兩個叫 GRG Nonlinear 同埋 Evolutionary,各自針對不同類型問題。依家 Excel 會自動幫你睇埋目標函數同限制條件係咪符合用 Simplex LP 的條件 (大概就係是否 aX1+bX2+….,有其他古靈精怪好似N次方、三角函數、If、 VLookup 一概唔受,所以其實呢個又唔係咁易用得到),至於其他兩款幾時用 (smooth nonlinear 同 non-smooth nonlinear,係咪外星文嚟?),可以研究吓個官網,但都係一理通百理明,最緊要識定義目標函數以及限制條件,不過要注意後兩個給出來的解未必一定是最優解,同埋會慢好多,但應該好過你亂撞,有機會再講 (下期應該講返 R 先)。
Solver Add-in 可應用喺眾多問題,例如教科書常見的工廠生產/物流問題,甚或是設計投資組合,通通可以用到佢,大家不妨今日返 Office 望吓有無乜可以試用吓佢。