Re: [運算] 最佳"整數"解
※ 引述《lifeisshine (芋頭)》之銘言:
: -------------------------------------------------
: 實際應用題:
: 每個桌子:需木工 4時,漆工 2時,利潤 5
: 每個椅子:需木工 1時,漆工 2時,利潤 4
: 木工上限為 60 時,漆工上限為 48 時,
: 令 x1 為桌子的生產個數,令 x2 為椅子的生產個數
: -------------------------------------------------
: 數學模型:
: f = 5x1+ 4x2 ……(利潤最大化)
: s.t. 4x1 + 1x2 ≦ 60 …….(木工時數限制)
: 2x1 + 2x2 ≦ 48 …….(漆工時數限制)
: x1 ≧ 0, x2 ≧ 0
: -------------------------------------------------
我用 MATLAB Help 找到 MuPAD 解法
廣義上 MuPAD 也是 MATLAB 的工具......就看看
我貼出我的解法
在 MATLAB 裡
------------
mupad;
在 MuPAD 裡
-----------
c := {4*x1 + x2 <= 60, 2*x1 + 2*x2 <= 48}:
f := 5*x1 + 4*x2:
linopt::maximize([c, f, NonNegative, All])
Output
------
[OPTIMAL, {x1 = 12, x2 = 12}, 108]
參考資料:
http://www.mathworks.com/help/symbolic/mupad_ref/linopt-maximize.html
--
更新:
因為我對 MuPAD 還不是很熟
早上還不知道怎麼把 MuPAD 的計算結果導入至 MATLAB 的 Workspace 裡面
剛剛寫了一個比較完整的程式碼
可以在 MATLAB 直接呼叫 MuPAD 函式取得答案
PTT_1I9AEkxY.m
--------------
read(symengine, 'PTT_1I9AEkxY.mu');
solution = feval(symengine, 'solution');
solution1 = double(solve(solution(1)));
solution2 = double(solve(solution(2)));
PTT_1I9AEkxY.mu
---------------
solution := proc()
begin
c := {4*x1 + x2 <= 60, 2*x1 + 2*x2 <= 48}:
f := 5*x1 + 4*x2:
A := linopt::maximize([c, f, NonNegative, All]):
solution := [A[2][1], A[2][2]];
end_proc:
程式邏輯其實就是呼叫一個自己寫的 .mu 檔
.mu 檔就用 MuPAD 語法呼叫內建的 linopt::maximize 解出答案
然後回傳給 .m 檔
因為回傳的結果是 sym 型別的 x1 == 12 與 x2 == 12
所以我用 solve 再解出 12
以上應該沒有問題了。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.116.247.22
※ 編輯: H45 來自: 140.116.247.22 (09/03 14:33)
推
09/03 18:27, , 1F
09/03 18:27, 1F
→
09/03 19:36, , 2F
09/03 19:36, 2F
→
09/03 19:37, , 3F
09/03 19:37, 3F
開一個新檔
複製我的程式碼貼上
存成 .mu 就好了
※ 編輯: H45 來自: 140.116.247.22 (09/03 19:39)
推
09/03 19:52, , 4F
09/03 19:52, 4F
→
09/03 19:54, , 5F
09/03 19:54, 5F
→
09/03 19:56, , 6F
09/03 19:56, 6F
MuPAD 我也不太熟...再自己嘗試看看吧
※ 編輯: H45 來自: 140.116.247.22 (09/03 23:14)
討論串 (同標題文章)