Gurobi无界结果问题



我的问题可能与这个有关,但是我没有得到它的解决方案。所以我会尽量问一下我的具体问题。

我想知道一组二维的半平面是否有一个空的交点。因此,我有两个无界变量xy。在c#中我有

x = gModel.AddVar(-GRB.INFINITY, GRB.INFINITY, 0.0, GRB.CONTINUOUS, "x");
y = gModel.AddVar(-GRB.INFINITY, GRB.INFINITY, 0.0, GRB.CONTINUOUS, "y");

然后我添加约束,每个半平面一个约束:

gModel.AddConstr((-1.0 * x) + (0 * y) <= 100, "h10");
gModel.AddConstr((1.0 * x) + (0 * y) <= 100, "h09");
gModel.AddConstr((0 * x) + (-1.0 * y) <= 100, "h08");
gModel.AddConstr((0 * x) + (1.0 * y) <= 100, "h07");
gModel.AddConstr((1.0 * x) + (0 * y) <= -33.3333334, "h06");
gModel.AddConstr((-1.0 * x) + (0 * y) <= 77.7777778, "h05");
gModel.AddConstr((-1.0 * x) + (0 * y) <= 55.55555533333333, "h04");
gModel.AddConstr((-1.0 * x) + (0 * y) <= 48.148148155555553, "h03");
gModel.AddConstr((-1.0 * x) + (0 * y) <= 40.740740733333332, "h02");
gModel.AddConstr((-1.0 * x) + (0 * y) <= 70.370370377777789, "h01");
gModel.AddConstr((1.0 * x) + (0 * y) <= -62.962962955555561, "h00");

我用(0 * x + 0 * y, GRB.MINIMIZE)进行优化,得到是否存在可行解(即非空交集)或不存在(空交集)的结果状态。

问题是,在之前的设置中,我得到一个UNBOUNDED状态,而很明显h00h02相矛盾!如何呢?

我正在使用Gurobi 5.5。初始设置

 GurobiEnv.Set(GRB.IntParam.DualReductions, 0);

有什么建议吗?

补充:Rich创建了一个要点来重现这个问题。

我猜这又是一个数值问题,因为Gurobi试图从问题描述中消除系数为零的变量。一个完全为零的目标函数可能会导致意想不到的结果。

实际上,我想说使用Gurobi来解决这个问题是多余的。确定这些半平面是否有共同点的一个简单方法是计算边界线的所有交点(n条线约为n²),然后检查每条线是否位于所有半平面上。如果是,它就是可行点。

最新更新