1
查找經由​​整數規劃的最優二進制矩陣

我試圖實現在optimal binary matrix溶液用Matlab函數intlinprog到測試輸入作爲在下面的代碼在MATLAB

a=[450;400;250;200]; % test input 
b=[750;500]; % test input 
n = 4; % length of a 
m = 2; % length of b 
oness=ones(m,1); 
f = (kron(a,oness))'; % objective function 
cont1=kron(eye(n),oness'); 
cont2=-cont1; 
cont3=-kron(a',eye(m)); 
A=[cont1;cont2;cont3]; 
bb=[ones(n,1);-zeros(n,1);-b]; 
lb = zeros(m*n,1); 
ub = [ones(m*n,1)]; % enforces binary 
intcon= [1,2,3,4,5,6,7,8]; % all variable should be integers 
Aeq = []; 
beq = []; 
x = intlinprog(f,intcon,A,bb,Aeq,beq,lb,ub) 

然而,我收到消息

Intlinprog停止,因爲沒有整數點滿足約束條件。

該測試輸入的明顯最佳解決方案是x = [0;1;1;0;1;0;0;0]

但是,如果我通過intcon=[]刪除完整性約束,我會得到一個最佳解決方案。爲什麼函數不能找到積分約束的最小解?

+0

嘗試隨機生成的測試輸入。您可能選擇了相應的多面體不包含任何整數點的測試輸入。 –

+0

我在我現在已經修復的問題定義中有一個錯誤。該代碼現在可以正確輸出。我發佈新代碼作爲答案。非常感謝@RodrigodeAzevedo的真誠支持。 – Mustafa

回答

0

我在我現在修復的問題定義中有一個錯誤。該代碼現在可以正確輸出。下面是正確的代碼:

a=[450;400;250;200]; % test input 
b=[750;500]; % test input 
n = 4; 
m = 2; 
oness=ones(m,1); 
f = -(kron(a,oness))'; 
cont1=kron(eye(n),oness'); 
cont2=-cont1; 
cont3=kron(a',eye(m)); 
A=[cont1;cont2;cont3]; 
bb=[ones(n,1);-zeros(n,1);b]; 
lb = zeros(m*n,1); 
ub = [ones(m*n,1)]; % enforces binary 
intcon= 1:8; 
Aeq = []; 
beq = []; 
x = intlinprog(f,intcon,A,bb,Aeq,beq,lb,ub) 

答案:

x = [1;0;0;1;1;0;0;0]這給相同的最佳結果作爲

x = [0;1;1;0;1;0;0;0]