0

我有一个二进制整数编程问题,想用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显然不应该是解决方案。

4

1 回答 1

0

让我们举个例子:

您希望最小化f=x1+x2+x3+x4不等式x1+x3>1,x2+x3>1和(-A x1+x2+x3+x4>1, x3+x4>1-b 有效地更改<=>)。

Matlab 给出x1=x2=x4=0并且x3=1满足所有不等式并给出f=1.

您想要x1=x2=1x3=x4=0作为解决方案吗?好吧,这违反了最后一个不等式 ( x3+x4>1),只会给出f=2.

如果你想要这个解决方案,你必须提供不同的参数f, A, b

于 2015-02-12T12:51:42.310 回答