1

私の質問はこれに関連している可能性がありますが、その解決策は得られませんでした。だから私は私の問題を尋ねようとします。

2D の半平面のセットに空の交差があるかどうかを調べたいです。したがって、2 つの無制限変数xとがありyます。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");

次に、半平面ごとに 1 つの制約を追加します。

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) で最適化して、実行可能な解がある (つまり、空の交差点ではない) かどうか (空の交差点) を示す結果の状態を取得します。

問題は、以前のセットアップでは、 h00h02が矛盾していることは明らかなのに、UNBOUNDED 状態になることです。どのように?

Gurobi5.5を使用しています。初期設定で

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

何か提案はありますか?

補足: Rich は、問題を再現するための要点を作成しました。

4

1 に答える 1

0

Gurobi は問題の説明から係数がゼロの変数を排除しようとしているため、これも数値の問題だと思います。完全にゼロの目的関数は、望ましくない結果につながる可能性があります。

実際、この問題に Gurobi を使用するのはやり過ぎだと思います。これらの半平面に共通点があるかどうかを判断する簡単な方法は、境界線のすべての交点 (n 線に対して約 n²) を計算し、それぞれがすべての半平面にあるかどうかを確認することです。もしそうなら、それはあなたの実現可能なポイントです。そうでなければ、そのような点はありません。

于 2015-09-19T09:56:05.970 に答える