我有二进制整数编程问题,想要用bintprog
来解决它。
A = [1 0 1 0; 0 1 1 0; 1 1 1 1; 0 0 1 1];
f=[1 1 1 1];
b=[1 1 1 1];
[x,xfval,exitflag,output]=bintprog(f,-A,-b);
解决方案bintprog
给了我x={3}
,但我希望解决方案为x={1,2}
,如果选择1和2(连接到3),则表示4可以到达。我能做些什么才能得到我想要的结果?
编辑: 节点3的作用类似于交换机,只有在连接到它的至少2个节点处于活动状态时才能启用。发生这种情况时,可以到达最后一个节点。例如,如果1,2是活动的,则可以达到4。如果1,4是活跃的,则可以说同样,也可以达到2。 3显然不应该是解决方案。
答案 0 :(得分:0)
让我们举个例子:
您希望根据不等式f=x1+x2+x3+x4
,x1+x3>1
,x2+x3>1
和x1+x2+x3+x4>1
(-A,-b有效地更改{{1}来最小化x3+x4>1
转到<=
)。
Matlab提供>
和x1=x2=x4=0
,它填满了所有不等式,并提供了x3=1
。
您想要f=1
和x1=x2=1
作为解决方案吗?好吧,这违反了最后的不平等(x3=x4=0
),只会给x3+x4>1
。
如果您需要此解决方案,则必须提供不同的参数f=2
。