2017-05-15 21 views
0

CPLEX-C#でMILPの問題を解決したい。私の問題のサイズは大きく、CPU時間を改善するために、私は初期のソリューションを使いたいと思っています。このソリューションをcplexに追加して、この初期ソリューションで問題を解決したいと思います。 Iは、多次元配列決定変数X[i][j](バイナリ決定変数)を有しており、値がstart[i][j]に等しいこのコードでCPLEXをC#(コンサート技術)で与えられた初期解で起動する

 try 
     { 
      startvar = new INumVar[numberOfAllNode * numberOfAllNode]; 
      startval = new double[numberOfAllNode * numberOfAllNode]; 

      for (int i = 0, idx = 0; i < numberOfAllNode; i++) 
       for (int j = 0; j < numberOfAllNode; j++) 
       { 
        startvar[idx] = X[i][j]; 
        startval[idx] = start[i][j]; 
        idx++; 
       } 

      startvar = null; 
      startval = null; 

      cplex.AddMIPStart(startvar, startval,Cplex.MIPStartEffort.SolveMIP); 

     } 
    catch (ILOG.Concert.Exception) 
     { 
      throw; 
     } 

:私は、次のコードを使用します。 start[i][j]の値は、パラメータとしてdouble [] arrayとして格納されます。私は、コードを実行すると、以下のエラーが登場している:私はこのコードを配置する必要がモデルの一部が 1):

Warning: No solution found from 1 MIP starts. 

Root node processing (before b&c): 
    Real time    = 5.07 sec. (2238.50 ticks) 
Parallel b&c, 4 threads: 
    Real time    = 0.00 sec. (0.00 ticks) 
    Sync time (average) = 0.00 sec. 
    Wait time (average) = 0.00 sec. 
          ------------ 
Total (root+branch&cut) = 5.07 sec. (2238.50 ticks) 
Couldn't Solve The Problem! 

は、I 2つの質問がありますか? (私はすべての制約の後を意味し、目標値を追加し、addMinまたはaddMaxを呼び出すか、それらの前に?)

2)私はstartvar = null; startval = null;を称賛すると、私はエラー、次のしている:

An unhandled exception of type 'ILOG.CPLEX.Cplex.UnknownObjectException' occurred in CPLEX.exe 

Additional information: CPLEX Error: object is unknown to IloCplex 

をあなたができれば、私は感謝この問題に対処するために助けてください。

答えて

0

Error in using addMIPStart() in CPLEX C++と非常によく似ていますが、C#では非常に似ています。

私は通常、モデルビルディングの最後、solve()の直前でAddMIPStart()を呼び出します。それは(私のために)電話をかけるための「自然な」場所です。

CPLEXがコンサート式などから内部モデルを抽出するときに、制約や目的に言及されていない変数がモデルにある場合、内部モデルにそれらを含めません。次に、これらの変数の値を設定しようとすると、CPLEXは変数を認識しません。私はあなたのミップスタートのすべての変数が実際にあなたの制約や目的のどこかに含まれていることを確認するでしょう。

+0

ご返信ありがとうございます。私の問題は3つの決定変数(2つのバイナリと1つ続けている)を持っています。私はそれらのうちの1つ(X [i] [j])だけの値を与えます。残りの2つの変数の初期値を設定する必要がありますか? –

+0

すべての変数に値を指定する必要はないと思います。報告したエラーは、モデルに含まれていない変数のmipstart値を指定しようとした場合のエラーです。また、2つのバイナリと1つの連続変数のみを持つこともできます。コード内の変数の数は、numberOfAllNode * numberOfAllNodeの2乗でなければなりません。 numberOfAllNodeの大きさはどれくらいですか? – TimChippingtonDerrick

関連する問題