From 1406dd9b8d0182e66f07856def09dfd46c171cbe Mon Sep 17 00:00:00 2001 From: Alexander Hoen Date: Fri, 20 Sep 2024 13:37:52 +0200 Subject: [PATCH] issue node feasible event before applying bounding --- CHANGELOG | 2 +- src/scip/solve.c | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) 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 ) {