2017-01-02 11 views
0

ループを使用して250種類の価格シナリオのモデルを最適化しようとしています。最初はXPRESSが1分以内に5つのシナリオを処理できますが、メモリが増加し始め、実行が遅くなり、50シナリオ後にXPRESSは5分間で1つのシナリオを解決し始めます。どのように各繰り返しの終わりにメモリをきれいにすることができますか?Mosel Iterations - Clean Memory

は、私はこれは古い記事ですけど、あなたがシナリオを手順やループ内で最適化をラップすることができ

アフ

+0

を使用することができますか? – Baykal

答えて

0

、どうもありがとうございましたか!少し日付docsから

2.9.3ローカル宣言

いくつかの宣言ブロックは、サブルーチンで使用することができる、すべての 識別子が宣言されたが、このサブルーチンに対してローカルです。 これは、これらのシンボルのすべてが(つまり宣言とエンドプロシージャまたは エンドfunction文の間) サブルーチンのスコープ内にのみ存在し、サブルーチンがを終了したら、彼らが使用するリソースの全てが 解放されることを意味し(例えば、グローバルに定義された のセットのメンバ)ルーチンの外部で参照されていない限り、実行されます。その結果、アクティブな制約( だけ線形表現ではありませんlinctr)は、サブルーチン内で宣言し、(彼らは現在の問題の一部であるため)、彼らが採用 変数は サブルーチンの終了後も有効であり、たとえ 関連オブジェクトに名前を付けるために使用されるシンボルは、これ以上定義されません。 また、ローカル宣言によってグローバルシンボルが非表示になる場合があることにも注意してください。

0

「dellcell」コマンドを使用すると、mpvarsの動的配列を削除できます。

dellcell(myVarに)

また、あなたはすべてのコードサンプルmpproblem変数

declarations 
    MyProblem: mpprob 
end-declarations 


forall(p in Prices) do 
    with MyProblem do 
     ! create mpvar 
     ! create constraints 
     ! solve problem 
     reset(MyProblem) 
     delcell(MyVar1) 
     delcell(MyVar2) 
     ! etc 
    end-do 
end-do