问题
I'm trying to catch a change in the dual bound using an event handler. There is no event in type_event.h for catching this, so I want to use the SCIP_EVENTTYPE_NODEFEASIBLE
event.
I'm a bit confused by the relationship between the events that SCIP_EVENTTYPE_NODESOLVED
is comprised of (SCIP_EVENTTYPE_NODEFEASIBLE
, SCIP_EVENTTYPE_NODEINFEASIBLE
, and SCIP_EVENTTYPE_NODEBRANCHED
). Are these events disjoint? What do they mean specifically? IMHO, the documentation is not very clear about this.
My guess is the following (assuming that the three events are disjoint):
SCIP_EVENTTYPE_NODEFEASIBLE
: the LP in this node is integral.SCIP_EVENTTYPE_NODEINFEASIBLE
: the node is infeasible or it was pruned by bound.SCIP_EVENTTYPE_NODEBRANCHED
: the LP solution at this node is fractional and branching was done.
Thanks in advance!
回答1:
Your guess is almost right. A SCIP_EVENTTYPE_NODEINFEASIBLE
is thrown if the current focus node is detected to be infeasible, either by propagation or after solving the node LP.
However, the removal of open nodes in the tree by pruning only occurs after a new incumbent solution has been found. This is an internal tree action that is not captured by any event.
Luckily, you do not have to worry about that, because the dual bound is unaffected by pruning. Just query the dual bound at every SCIP_EVENTTYPE_NODESOLVED
.
来源:https://stackoverflow.com/questions/56795112/what-do-the-events-that-scip-eventtype-nodesolved-comprises-mean