星期五, 12月 18, 2009

用 OpenOffice.org Calc 替代 Excel 求解線性規劃問題

前面曾經提到過使用免費、自由的數學計算軟體 Maxima / wxMaxima 解線性規劃問題
用Maxima計算線性規劃Linear Programming問題
現在,我要用免費的辦公室軟體 OpenOffice.org 來求解線性劃,同前面的範例,我們有一組線性規劃模式:


我們打開 OpenOffice.org Calc 先輸入目標式:
openoffice_linear_Programming_01
線性規劃求解工具,它會自動編更 x,y (B2和C2兩儲存格)裡的值,為了方便,我們可以先在B2和C2兩儲存格裡各先填入數值1。
E3儲存格為目標函數你可以參考上圖裡我的寫法,也可以直接寫成:
=2400*B2+1800*C2
接下來輸入條件式就比較囉嗦一點可參考下面圖解:
openoffice_linear_Programming_02
再叮嚀一次,在這裡,我們的 x,y 已經被代換成 B2 和 C2 了,所以

條件式1的係數
B4儲存格=3*B2
C4儲存格=1.5*C2
條件式2的係數
B5儲存格=1*B2 或 =B2 (因為1乘上任意數還是等於原數值)
C5儲存格=2*C2
下面E4和E5這兩個儲存格,則分別填入完整的條件函式
E4儲存格=B4+C4
E5儲存格=B5+C5


快完成了,我們再來找出 OpenOffice.org Calc 求解線性規劃的工具
openoffice_linear_Programming_03

openoffice_linear_Programming_04
接著我們參照上圖,依序填入。
#這裡比較重要的是,除了「依變更儲存格」以外,我們都只能輸一個儲存格欄位。
完成後,我們按下「解決」。

openoffice_linear_Programming_05
從上圖,我們可以得知,當 x=2 , y=4 時,我們有最大值 12000

重點提示:
求解工具會嘗試組合「依變更儲存格」裡的數值(在這裡,我們是B2和C2儲存格),再因B2和C2儲存格數值的變動,連帶條件式一的 B4、C4、E4 和條件式二的 B5、C5、E5 連帶變動。

常見錯誤:
「目標儲存格」(範例中為E3)忘了填寫函數,使得與「依變更儲存格」沒有連動。
「儲存格參照」(範例中為E4和E5)填寫進去的也不是函數,使得與「依變更儲存格」沒有連動。

星期三, 12月 16, 2009

用Maxima計算線性規劃Linear Programming問題

最近管理數學在教比較像商科學生應該學的線性規劃了,我迫不及待拿開源的 wxMaxima 來計算課本裡的問題,但找了 gui 的介面老半天,卻找不到計算線性規劃的函數。後來在 http://maxima.sourceforge.net/docs/manual/en/maxima_70.html#SEC290 找到了詳細的說明手冊。
我們必需在指令中載入 simplex 這個模組,才能使用求目標函式最大值的 maximize_lp() 和求最小值的 minimize_lp() 這兩個函式。
範例如下:

Maxima 指令如下:
load("simplex")$
maximize_lp(2400*x+1800*y, [3*x+(3/2)*y<=12, x+2*y<=10]) , nonegative_lp=true;


其中第一行的 load("simplex")$ 是指載入 simplex 這個用來計算線性規劃問題的模組。
maximize_lp()是用來計算目標式為最大值的線性規劃問題,其使用的形式如下
maximize_lp(目標式[條件式1, 條件式2, 條件式3,....])
範例中的條件式只有兩個,所以我寫成
[3*x+(3/2)*y<=12, x+2*y<=10]
並以中括弧包起來。
按wxMaxima裡的Evaluate All Cell (執行的意思),應該就會算出下面的解答
[12000,[y=4,x=2]]
意思為,當 x=2,y=4 時,可以滿足目標式最大化的值為12000
創用 CC 授權條款
瑀的貓、田園與電腦點點滴滴何崧瑀製作,以創用CC 姓名標示-非商業性-禁止改作 3.0 台灣 授權條款釋出。