Domanda

Sono inclusa la mia regola di ramificazione su Scip e sto usando la funzione SCIPincludeBranchruleMybranchingrule() per inizializzare alcuni dati di regole di ramificazione.Una delle cose che faccio è chiamare la funzione SCIPgetNVars().Quando eseguo il codice, vedo che la funzione è chiamata molte volte (non una volta, come pensavo, prima che inizi l'algoritmo B & B) e ottengo il seguente errore attivato dalla funzione SCIPgetNVars():

.

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

Sono confuso sull'uso del SCIPincludeBranchruleMybranchingrule(), poiché la documentazione afferma che questa funzione può essere utilizzata per inizializzare i dati delle regole di ramificazione.Vorrei inizializzare alcuni dati che possono essere utilizzati in ogni nodo B & B, forse i dati di regole di ramificazione non sono il modo giusto di farlo.

apprezzerò qualsiasi aiuto!

È stato utile?

Soluzione

La cosa importante da notare qui è che non ci sono problemi disponibili per i quali si desidera accedere alle variabili.

Le regole di ramificazione della SCIP forniscono diverse callback per l'inizializzazione dei dati. Il include- La callback viene chiamata solo una volta quando inizia a Scip, AKA nella fase SCIP_STAGE_INIT di Scip. In questa fase, vuoi che la regola di ramificazione informi lo scip che esiste, e facoltativamente introdurre alcuni parametri utente indipendenti dal problema .

Ci sono altre due funzioni di callback che consentono di memorizzare i dati che sono più adatti per ciò che intendi fare; SCIPbranchruleInitsolMybranchingrule che è chiamato poco prima del (presunto) Il problema sta per essere risolto tramite ramo e rilegato, e SCIPbranchruleInitMybranchingrule, che viene chiamato dopo che un nuovo problema di lettura è stato trasformato.

Poiché l'esecuzione di una regola di ramificazione è limitata all'interno del processo di branch-and-bound, il callback è SCIPbranchruleInitSolMybranchingrule che è necessario implementare spostando tutti i problemi specifici per l'inizializzazione dei dati. Non dimenticare di implementare anche SCIPbranchruleExitsolMybranchrule per liberare i dati memorizzati ogni volta che la ricerca branch-and-legato viene terminata, o se la ricerca è stata terminata, o se un termine è stato colpito, o Scip deciso che vuole un altro riavvio. .

FYI: i dati assegnati durante la richiamata includono possono essere liberati con la callback SCIPbranchruleFreeMybranchingrule-richiamata, che viene eseguita una volta quando Scip sta per uscire e liberare tutta la memoria di sistema sinistra.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top