diff --git a/CHANGELOG b/CHANGELOG index 4cf4f49f54..ac28e0549e 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -45,7 +45,7 @@ Build system Miscellaneous ------------- -- Event `BESTSOLFOUND` is thrown before scanning the current node list and removing nodes potentially throwing the `NODEDELETE` event +- reorder events: BESTSOLFOUND/NODE_FEASIBLE is now processed before the nodes are cut off and before NODE_DELETE events are processed @section RN912 SCIP 9.1.2 ************************* diff --git a/src/scip/solve.c b/src/scip/solve.c index 4c3085831d..a10059d788 100644 --- a/src/scip/solve.c +++ b/src/scip/solve.c @@ -5166,16 +5166,18 @@ SCIP_RETCODE SCIPsolveCIP( SCIP_CALL( addCurrentSolution(blkmem, set, messagehdlr, stat, origprob, transprob, primal, relaxation, tree, reopt, lp, eventqueue, eventfilter, FALSE) ); + /* issue NODEFEASIBLE event */ + SCIP_CALL( SCIPeventChgType(&event, SCIP_EVENTTYPE_NODEFEASIBLE) ); + SCIP_CALL( SCIPeventChgNode(&event, focusnode) ); + SCIP_CALL( SCIPeventProcess(&event, set, NULL, NULL, NULL, eventfilter) ); + + /* update the cutoff pointer if the new solution made the cutoff bound equal to the lower bound */ SCIP_CALL( applyBounding(blkmem, set, stat, transprob, origprob, primal, tree, reopt, lp, branchcand, eventqueue, conflict, cliquetable, &cutoff) ); /* increment number of feasible leaf nodes */ stat->nfeasleaves++; - /* issue NODEFEASIBLE event */ - SCIP_CALL( SCIPeventChgType(&event, SCIP_EVENTTYPE_NODEFEASIBLE) ); - SCIP_CALL( SCIPeventChgNode(&event, focusnode) ); - SCIP_CALL( SCIPeventProcess(&event, set, NULL, NULL, NULL, eventfilter) ); if( set->reopt_enable ) {