我正在研究一个整数编程模型,我的约束条件是优化问题的解决方案数量可能大于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中使用位整数编程来获得所有可行的解决方案(在我的情况下将是有限的)。 非常感谢您提前提供任何帮助。
答案 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()尝试使用分支定界算法找到最佳,可行的解决方案。该算法是确定性的。因此,给定一个目标函数和一组相等/不等式约束,无论运行多少次都应该产生相同的输出。因此,你的问题的答案是否定的。