Estoy tratando de coger un cambio en el límite dual con un manejador de eventos. No hay evento en type_event.h para atrapar esto, así que quiero usar el evento SCIP_EVENTTYPE_NODEFEASIBLE .

Estoy un poco confundido por la relación entre los eventos que SCIP_EVENTTYPE_NODESOLVED se compone de (SCIP_EVENTTYPE_NODEFEASIBLE, SCIP_EVENTTYPE_NODEINFEASIBLE, y SCIP_EVENTTYPE_NODEBRANCHED). ¿Están estos eventos disyuntos? ¿Qué significan específicamente? IMHO, la documentación no es muy clara sobre esto.

Mi conjetura es lo siguiente (suponiendo que los tres eventos son disyuntos):

  • SCIP_EVENTTYPE_NODEFEASIBLE: El LP en este nodo es integral.
  • SCIP_EVENTTYPE_NODEINFEASIBLE: el nodo es inviable o fue podado por unido.
  • SCIP_EVENTTYPE_NODEBRANCHED: La solución LP en este nodo es fraccionada y se realizó la ramificación.

¡Gracias de antemano!

0
rocarvaj 27 jun. 2019 a las 19:16

1 respuesta

La mejor respuesta

Tu conjetura es casi correcta. Se lanza un SCIP_EVENTTYPE_NODEINFEASIBLE si el nodo de enfoque actual se detecta para ser inviable, ya sea por propagación o después de resolver el lp de nodo.

Sin embargo, la eliminación de los nodos abiertos en el árbol por poda solo se produce después de que se haya encontrado una nueva solución titular. Esta es una acción de árbol interna que es no capturada por ningún evento .

Afortunadamente, no tiene que preocuparse por eso, porque el límite dual no se ve afectado por la poda. Simplemente consulta el límite dual en cada SCIP_EVENTTYPE_NODESOLVED.

3
Gregor 27 jun. 2019 a las 16:36