0

現在のモデルがすべてのコンポーネントを含めて最適化されていない場合にのみ、モデルを再最適化したいと考えています。

次のコードで試しました:

if (masterProblem.getStatus() == IloCplex.Status.Optimal) {
  // do something
} else {
  // re-optimize
}

これは間違っているようです。

masterProblem.getStatus() == IloCplex.Status.Optimal

モデルに新しい列を追加した後、true が返されます。問題がすべての要素で最適化されている場合は、ステートメントが必要です。

4

2 に答える 2

0

ただし、マニュアルでは、多くの関数 (IloObjective::setLinearCoef、IloRange::setExpr など) の説明で次のように述べています。

...そして、文書化されていないクラスIloChangeの適切なインスタンスを作成して、モデル内の抽出可能なオブジェクトのこの変更についてアルゴリズムに通知します。

注: メンバー関数 ... は、この呼び出し元オブジェクトの変更について Concert Technology アルゴリズムに通知します。

IloChange は文書化されていないため (ヘッダーには手がかりがありません)、最後の最適化後にモデルが変更されたかどうかを示すブール変数を保持する以外に実行可能な方法はないようです (例: bool isThereAnyChangeOnModel = true;)。

于 2013-08-31T22:20:55.920 に答える