SCIPincludeBranchruleMybranchingrule() が何度も呼び出されました

StackOverflow https://stackoverflow.com//questions/25018191

  •  21-12-2019
  •  | 
  •  

質問

SCIP に独自の分岐ルールを含めており、 SCIPincludeBranchruleMybranchingrule() いくつかの分岐ルール データを初期化する関数。私がしていることの 1 つは、 SCIPgetNVars() 関数。コードを実行すると、関数が何度も呼び出されていることがわかります (B&B アルゴリズムが開始される前に一度も呼び出されませんでした)。 SCIPgetNVars() 関数:

[src/scip/scip.c:10048] ERROR: invalid SCIP stage <0>

の使い方に迷っています SCIPincludeBranchruleMybranchingrule(), ドキュメントには、この関数を分岐ルール データの初期化に使用できると記載されているためです。すべての B&B ノードで使用できるいくつかのデータを初期化したいのですが、分岐ルール データが正しい方法ではない可能性があります。

助けていただければ幸いです。

役に立ちましたか?

解決

ここで注意すべき重要な点は、変数にアクセスするために使用できる問題がまだないということです。

SCIP の分岐ルールは、データ初期化のためのいくつかのコールバックを提供します。の include- コールバックは、SCIPが開始されたときに1回のみ呼び出されます。 SCIP_STAGE_INIT SCIPの段階。この段階では、分岐ルールが存在することを SCIP に通知し、オプションでいくつかのユーザー パラメータを導入する必要があります。 問題に依存しない.

目的に適したデータを保存できるコールバック関数がさらに 2 つあります。 SCIPbranchruleInitsolMybranchingrule これは、(前処理された)問題が枝とバウンドを介して解決されようとしている直前に呼ばれ、 SCIPbranchruleInitMybranchingrule, 、新しく読み取られた問題が変換された後に呼び出されます。

分岐ルールの実行は分岐限定プロセス内に制限されているため、コールバックは次のようになります。 SCIPbranchruleInitSolMybranchingrule これは、問題固有のデータの初期化をすべてそこに移動して実装する必要があります。も忘れずに実装してください SCIPbranchruleExitsolMybranchrule 検索が終了した場合、時間制限に達した場合、または SCIP が再度再起動する必要があると判断した場合に、分岐限定検索が終了するたびに保存されたデータを解放します。

ご参考までに:include-callback 中に割り当てられたデータは、次のコマンドを使用して解放できます。 SCIPbranchruleFreeMybranchingrule-callback。SCIP が終了して残りのシステム メモリがすべて解放されるときに 1 回実行されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top