0

すべての整数変数をバイナリとして使用して、CPLEX の混合整数問題に対する多くの解決策を作成しようとしています。この問題には、約 1000 の連続変数と 1000 のバイナリ変数があり、インジケーターとして機能し、約 2500 の線形制約があります。

私の目的関数は指標変数の最小化であり、バイナリ変数に選択された値に関して互いに異なる、最適に近い多くのソリューションを生成したいと考えています。私の現在のコードは次のように要約できます-

IloCplex cplexModel = new IloCplex(); 
---build the problem, set objective---
cplexModel.setParam(IloCplex.IntParam.SolnPoolCapacity, N);
cplexModel.setParam(IloCplex.IntParam.PopulateLim, K*N);
cplexModel.setParam(IloCplex.IntParam.SolnPoolReplace, 2);
cplexModel.setParam(IloCplex.DoubleParam.SolnPoolGap, D);
cplexModel.setParam(IloCplex.IntParam.MIPEmphasis, 0);
cplexModel.populate();

ここで、N、K、および D は、目的の解の数の短縮名であり、解を求めているときに生成される解の数をスケーリングする係数と、最適な最小化から許容できる相対的なギャップです。また、問題に関連していないように思われる他のいくつかの CPLEX パラメーターも使用します。

私の問題は、ソリューションの多様性が連続変数を含むすべての変数で測定されることですが、バイナリ変数値が異なるソリューションにのみ関心があります。つまり、取得している結果のほとんどは、バイナリ変数に対して同じ値を共有し、私には区別がつかないことを意味します (バイナリ値にのみ関心があるため)。私の現在の回避策は、設定することです-

cplexModel.setParam(IloCplex.IntParam.SolnPoolCapacity, T*N);
cplexModel.setParam(IloCplex.IntParam.PopulateLim, T*K*N);

T は通常 50 であり、次に (うまくいけば) N を選択すると、バイナリ変数の値が互いに異なるソリューション プールから結果が得られます。

多様性計算をバイナリ変数に制限する方法として多様性フィルターをチェックしましたが、各ソリューションと参照ソリューションの間ではなく、ソリューション間の多様性を強制するために使用する方法がわかりません。それ以外に、私は他に何ができるかについて無知です。

助けていただければ幸いです。また、これは私の最初の質問なので、フォーマットが間違っていたら申し訳ありません。

4

2 に答える 2

1

申し訳ありませんが、私のバックグラウンドはこれを古い方法で行っており、通常は C# または C++ で作業していました。私はこの新しい「移入」機能を使用しようとしたことはありません...しかし、おそらく使用する必要があります! でも、今までやってきたことの一部が役に立つかもしれません。

これを「手動で」行う方法は、問題をループで繰り返し解決し、毎回制約を追加して、バイナリ変数の一部を異なるものにすることです。これは、単一の変数を強制的に異なるものにする制約を追加するのと同じくらい簡単です (解で 1 の場合は、強制的に 0 にする制約を追加してみてください (逆も同様))。または、もう少し賢く、少なくとも m 個の変数のうち n 個が異なる必要があるという制約を追加します。このアプローチの良いところは、ソリューションの何をどれだけ異なる必要があるかを直接制御できることです。

現在、cplex コールバックの 1 つを介して制約を追加することにより、「populate」アプローチ内で同様のことを達成できる可能性があります。手元に最近のドキュメントがないので、記憶から推測しています...

お役に立てれば

于 2013-03-11T17:42:52.037 に答える
0

IBM のフォーラムに必要な回答があります -リンク

ソリューション プール多様性置換戦略、SolnPoolReplace=2 は、ソリューションの多様性に関するバイナリ変数のみをカウントします。

したがって、バイナリ変数に関して、さまざまな理由から、私のソリューションは多様ではないように思われますが、それでもこの戦略は正しいアプローチです。

于 2013-04-19T20:17:41.170 に答える