在MATLAB上使用位整数编程

时间:2014-03-03 13:34:55

标签: matlab linear-programming

我正在研究一个整数编程模型,我的约束条件是优化问题的解决方案数量可能大于1。 然而,MATLAB中的bintprog函数输出了一个可行的解决方案,而不是全部。

此观察的实例

f = [-9; -5; -6; -4]; 
A = [6 3 5 2; 0 0 1 1; -1 0 1 0; 0 -1 0 1];
b = [9; 1; 0; 0];
x = bintprog(f,A,b)

输出

[1 1 0 0]

如果我改变参数 f ,使得f = [0; 0; 0; 0],然后输出 = [0 0 0 0]。 但我们知道,除了这个输出,上面的输出也满足这些约束。因此, Bintprog 只输出一个可行的解决方案。

请你建议一种方法,我可以在MATLAB中使用位整数编程来获得所有可行的解决方案(在我的情况下将是有限的)。 非常感谢您提前提供任何帮助。

2 个答案:

答案 0 :(得分:0)

根据我对你的问题的理解,这就是你需要的 -

代码 -

f = [-9; -5; -6; -4]; 
A = [6 3 5 2; 0 0 1 1; -1 0 1 0; 0 -1 0 1];
b = [9; 1; 0; 0];
x = bintprog(f,A,b)'

new_f = [0;0;0;0];
f = [f;new_f]';
A = repmat(A,[1 2]);
x = bintprog(f,A,b)'

输出 -

x =
     1     1     0     0
x =
     1     1     0     0     0     0     0     0

告诉我们!

答案 1 :(得分:0)

bintprog()尝试使用分支定界算法找到最佳,可行的解决方案。该算法是确定性的。因此,给定一个目标函数和一组相等/不等式约束,无论运行多少次都应该产生相同的输出。因此,你的问题的答案是否定的。