使用Excel求解非線性規劃問題--以化工為例

化學工程師在設計製程的時候會考慮非常多因素

其中一個就是如何妥善分配物質流動以讓操作成本降到最低
同時兼顧各個機器的性能
非線性規劃 (Nonlinear programming) 就是一個常出現在現實生活的問題
本篇以Syborg撰寫的Process Dynamics and Control當中的例題來講述如何使用Excel來解非線性規化的問題(當然線性規劃也是可以的)

石化工廠有個地方稱作boiler house
利用燃料推動渦輪產生電力
如果有一個boiler house裝置了兩種不同的渦輪發電機G1, G2 (其中G1的發電效能比G2好)
又有兩種燃料可以使用
分別是Fuel oilMedium Btu gas (MBG)
MBG來自工廠的其他單元產生的廢氣,可以當作是不用錢的
然而Fuel oil是要用錢來買的!
我們想要分配兩種燃料至兩個發電機
使總發電量可以維持50 MW之外
還可以讓fuel oil的消耗量最低
這樣就可以達到省錢的目的!


由實驗可以得到兩個發電機發電功率(P)對燃料流量(x)的關係:



我們可以接著把題目所給的條件一一寫出
因為發電功率對流量的關係是非線性方程式
所以本題是一個非線性規劃問題
注意雖然MBG不用錢
但MBG的量也是有限的
只有5 (fuel units/h)
而兩台發電機的供電也有一定的範圍

我們的目的是將fuel oil的總用量降到最低節省成本
所以:


把題目敘述轉化成數學式子後就可以開始利用excel來解這題啦!
為了方便我把題目截圖插入到excel裡面方便作對照
exce裡面有一個功能可能是大家比較不熟悉的
叫作規劃求解(Solver)
是用來解方程式規劃(programming)問題的簡單方法
我用的是Microsoft 365的版本
廠商預設裡不一定出現在主選單當中
可能需要另外從增益集(Add-in) 選擇規劃求解(Solver)並下載安裝

以下圖為例
將所有變數先預留空格(B2:B5),這裡的變數講的是你可以調整的變數,也是你想求解的未知數
把條件輸入到方格裡
方格B6與B7輸入發電功率P的公式
D6和D7內輸入等式限制式
D2:E3區塊輸入發電功率的上下限
最後在D11空格內輸入我們的目標函數f (objective function)


注意我把Formulas選單下的"Show Formulas"打開了,所以有打公式的地方會顯而易見

規劃求解(Solver)很好找,在Data選單下面

開啟規劃求解視窗後
設定目標式(Set Objective)欄位選取目標函數那一格
由於我們想讓其值越小越好
所以在下方選取最小(Min)

藉由變更變數儲存格(By Changing Variable Cells)則統一框選x1至x4 (B2:B5)
電腦會改變這幾格(自變數)的數值來讓f達到最小值

設定限制式(Subject to the Constraints)的欄位則按畫面右邊的新增
excel會讓你一一輸入不等式、等式等限制條件
(有一個麻煩是一個變數大於某數又小於某數需要分開輸入,不能很直覺地一次輸完)


點按求解(Solve)之後
若成功求解會跳出一個畫面問你是否保留結果
(注意若限制條件設定太嚴苛系統並不會有設定誤差範圍內的解,這時需要放寬限制條件)
按確定(OK)之後我們的答案就出來了!
x1~x4分別的值與f的最小值都顯現在螢幕上方了
可以再check看看這個答案有沒有符合當初給定的限制條件


希望有幫到想學習的人們啦!

Comments

Popular posts from this blog

大聖塔芭芭拉(Santa Barbara)地區私房景點推薦

[Upstream bioprocess development] Some notes about recent upstream process characterization approach

程序設計被忽略的一角:最大選擇率