Pregunta

Estoy incluyendo a mi propia regla de ramificación en SCIP y estoy usando el SCIPincludeBranchruleMybranchingrule() función para inicializar algunos de ramificación de la regla de datos.Una de las cosas que voy a hacer es llamar a la SCIPgetNVars() la función.Cuando ejecuto el código, veo que la función es llamada muchas veces (no una vez, como yo creía, antes de la B&B algoritmo comienza) y me da el siguiente error provocado por la SCIPgetNVars() función:

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

Estoy confundido acerca de la utilización de SCIPincludeBranchruleMybranchingrule(), ya que la documentación indica que esta función se puede utilizar para inicializar la ramificación de la regla de datos.Me gustaría para inicializar algunos datos que pueden ser utilizados en todos los B&B nodo, tal vez la ramificación de la regla de datos no es la manera correcta de hacerlo.

Yo te agradezco la ayuda!

¿Fue útil?

Solución

Lo importante a destacar aquí es que no hay ningún problema para el que desea acceder a las variables.

La ramificación de las reglas de SCIP ofrecen varias devoluciones de llamada para la inicialización de datos.El include- devolución de llamada sólo se llama una vez cuando SCIP comienza, aka en el SCIP_STAGE_INIT etapa de SCIP.En esta etapa, usted desea que la regla de ramificación para informar a SCIP que existe, y, opcionalmente, introducir algunos parámetros de usuario que son problema independiente de la.

Hay dos más de devolución de llamada funciones que permiten almacenar datos que son más adecuados para lo que se pretende hacer; SCIPbranchruleInitsolMybranchingrule el que es llamado justo antes de la (presolved) el problema está a punto de ser resuelto a través de branch-and-bound, y SCIPbranchruleInitMybranchingrule, que es llamado después de que una nueva lectura de problema se transformó.

Desde la ejecución de una derivación de la regla se limita a dentro de la rama-and-bound-proceso, la devolución de llamada SCIPbranchruleInitSolMybranchingrule lo que usted debe poner en práctica por el movimiento de todos los problemas específicos de inicialización de datos allí.No olvides de aplicar SCIPbranchruleExitsolMybranchrule para liberar a los datos almacenados cada vez que el branch-and-bound de búsqueda se termina, ya sea si la búsqueda ha finalizado, o si un límite de tiempo fue golpeado, o SCIP decidido que quiere volver a reiniciar.

FYI:Los datos que se asigna durante la incluyen-devolución de llamada puede ser liberado con el SCIPbranchruleFreeMybranchingrule-devolución de llamada que se ejecuta una vez cuando SCIP está a punto de salir y libre de toda la izquierda el sistema de memoria.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top