Frage

Ich füge meine eigene Verzweigungsregel in SCIP ein und verwende die SCIPincludeBranchruleMybranchingrule() funktion zum Initialisieren einiger Verzweigungsregeldaten.Eines der Dinge, die ich tue, ist, das zu nennen SCIPgetNVars() Funktion.Wenn ich den Code ausführe, sehe ich, dass die Funktion viele Male aufgerufen wird (nicht einmal, wie ich dachte, bevor der B & B-Algorithmus startet) und ich bekomme den folgenden Fehler ausgelöst durch die SCIPgetNVars() Funktion:

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

Ich bin verwirrt über die Verwendung von SCIPincludeBranchruleMybranchingrule(), da in der Dokumentation angegeben ist, dass diese Funktion zum Initialisieren von Verzweigungsregeldaten verwendet werden kann.Ich möchte einige Daten initialisieren, die an jedem B & B-Knoten verwendet werden können.Möglicherweise sind die Verzweigungsregeldaten nicht der richtige Weg, dies zu tun.

Ich werde jede Hilfe zu schätzen wissen!

War es hilfreich?

Lösung

Wichtig hierbei ist, dass noch kein Problem verfügbar ist, für das Sie auf die Variablen zugreifen möchten.

Verzweigungsregeln von SCIP bieten mehrere Rückrufe für die Dateninitialisierung.Der include- callback wird nur einmal aufgerufen, wenn SCIP startet, auch bekannt als in der SCIP_STAGE_INIT stadium von SCIP.In diesem Stadium möchten Sie, dass die Verzweigungsregel SCIP darüber informiert, dass sie vorhanden ist, und optional einige Benutzerparameter einführt, die problemunabhängig.

Es gibt zwei weitere Callback-Funktionen, die das Speichern von Daten ermöglichen, die besser für das geeignet sind, was Sie vorhaben; SCIPbranchruleInitsolMybranchingrule welches kurz vor dem (aufgelösten) aufgerufen wird das Problem wird über Branch-and-bound gelöst und SCIPbranchruleInitMybranchingrule, das aufgerufen wird, nachdem ein neu gelesenes Problem transformiert wurde.

Da die Ausführung einer Verzweigungsregel auf den Verzweigungs- und gebundenen Prozess beschränkt ist, lautet Ihr Rückruf SCIPbranchruleInitSolMybranchingrule was Sie implementieren sollten, indem Sie alle problemspezifischen Dateninitialisierungen dorthin verschieben.Vergessen Sie nicht, auch zu implementieren SCIPbranchruleExitsolMybranchrule um die gespeicherten Daten jedes Mal freizugeben, wenn die Verzweigungs- und gebundene Suche beendet wird, entweder wenn die Suche beendet wurde oder wenn ein Zeitlimit erreicht wurde oder SCIP entschieden hat, dass es einen weiteren Neustart wünscht.

ZU IHRER INFORMATION:Daten, die während des Include-Callbacks zugewiesen werden, können mit dem freigegeben werden SCIPbranchruleFreeMybranchingrule-callback, der einmal ausgeführt wird, wenn SCIP beendet wird und den gesamten verbleibenden Systemspeicher freigibt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top