[討論]二元整數規劃建模問題

作者: ljuyentintho (小劉)   2016-02-25 14:17:39
各位大大好
我是用CPLEX內建的函式庫去寫
如果要處理的問題是二元整數規劃
% Maximize x1 + 2 x2 + 3 x3 + x4
% Subject to
% - x1 + x2 + x3 + 10 x4 <= 20
% x1 - 3 x2 + x3 <= 30
% x2 - 3.5x4 = 0
% Binary Integer
% x1 x2 x3 x4
那麼只要這樣打以下
f = [-1 -2 -3 -1]';
Aineq = [-1 1 1 10;
1 -3 1 0];
bineq = [20 30]';
Aeq = [0 1 0 -3.5];
beq = 0;
options = cplexoptimset;
options.Display = 'on';
[x, fval, exitflag, output] = cplexbilp (f, Aineq, bineq, Aeq, beq, ...
[ ], options);
fprintf ('\nSolution status = %s\n', output.cplexstatusstring);
fprintf ('Solution value = %d\n', fval);
disp ('Values = ');
disp (x');
這樣就能正確跑出最佳解了
問題來了
但是如果今天模型的限制式長這樣
http://imgur.com/Pz1X1VN
該怎麼處理變數前面包了兩個sigma呢?
另外ARJH可以自行給定
感謝好心的大大
作者: sunev (Veritas)   2016-02-25 14:22:00
ARJH要給定吧
作者: ljuyentintho (小劉)   2016-02-25 14:24:00
喔對了忘了說 ARJH可以自行給定
作者: sunev (Veritas)   2016-02-25 14:32:00
那就是單純的跑for-loop 把f Aineq Bineq Aeq Beq矩陣給建出來
作者: ljuyentintho (小劉)   2016-02-25 14:34:00
所以是包兩個for loop在前面這樣嗎?
作者: sunev (Veritas)   2016-02-25 15:24:00
應該是三四個不定,重點是要跑過所有可能不確定的話,自己先手算幾個小的case看看
作者: ljuyentintho (小劉)   2016-02-25 18:55:00
可以請您有空的話示範Aeq跟beq的方法嗎?一條限制式就好.感謝您
作者: sunev (Veritas)   2016-02-25 23:41:00
x2 - 3.5x4 = 0Aeq = [0 1 0 -3.5];beq = 0; ?
作者: ljuyentintho (小劉)   2016-02-26 02:04:00
s大我的意思是如何跑for-loop把Aeq Beq矩陣建出來
作者: sunev (Veritas)   2016-02-26 09:10:00
你有用過for-loop嗎?
作者: ljuyentintho (小劉)   2016-02-26 10:19:00
有 但是似乎不太正確 我是matlab新手
作者: sunev (Veritas)   2016-02-26 10:24:00
把你的想法寫出來,還有可嘗試先從小的case試起
作者: ljuyentintho (小劉)   2016-02-26 13:16:00
以限制式(2)來說 我是這樣for a =1:A,for r =1:R,Aeq = [x(raj)]; beq = 1;
作者: sunev (Veritas)   2016-02-26 13:42:00
你沒有寫出raj的定義,而且Aeq裡要放的是x_raj的係數,不是x_raj

Links booklink

Contact Us: admin [ a t ] ucptt.com