0

Visual Studio で最適化問題を解決するために cplex を呼び出します。私の問題は次のように単純です。

IloNumVarArray a(env,N,0,IloInfinity);
IloNumVarArray d(env,N,0,IloInfinity);

IloModel Model(env);    
//objective function
IloExpr obj(env);
for(IloInt n=0; n<N;n++)
  obj+=a[n]*c1[n]-d[n]*c2[n];
Model.add(IloMinimize(env,obj));
obj.end();

for(IloInt n=0;n<N;n++){
    Model.add(a[n]==0);
    Model.add(d[n]==0);
}
IloCplex cplex_p(Model);
cplex_p.setParam(IloCplex::EpGap,0.0001);
cplex_p.solve(); 
cplex_p.end();
Model.end();

しかし、毎回このエラーメッセージが表示されます:

Unhandled exception at 0x74eeb9bc in For-Calling-Cplex.exe: Microsoft C++ exception: IloWrongUsage at memory location 0x0027fbe4..

私は何を間違えましたか?

4

2 に答える 2

1

end 関数の使用は時期尚早です。

obj.end();

目的関数としてモデルに追加したためです。モデルを繰り返し作成していてメモリが不足している場合を除き、実際には .end() 関数を呼び出すべきではありません。

msvc を使用している場合は、デバッグ モードでコンパイルし、例外が実際にスローされたときにデバッガーが停止するようにブレークポイントを設定する必要があります。次に、常に高レベルで IloException をキャッチする必要があります。関数呼び出しを try/catch ブロックに記述します

try {
   buildModel():
} catch (const IloException& e)
{
   cerr << e;
   throw; // if you like
}
于 2012-09-06T21:18:28.213 に答える