39 #define EVENTHDLR_NAME "bestsol"
40 #define EVENTHDLR_DESC "event handler to record the best primal bound for each heuristic"
50 SCIP_Real* bestprimalbd;
61 SCIP_EVENTHDLRDATA* eventhdlrdata;
64 assert(eventhdlr != NULL);
66 eventhdlrdata = SCIPeventhdlrGetData(eventhdlr);
67 assert(eventhdlrdata != NULL);
69 SCIPfreeMemory(scip, &eventhdlrdata);
78 SCIP_EVENTHDLRDATA* eventhdlrdata;
83 assert(eventhdlr != NULL);
84 assert(strcmp(SCIPeventhdlrGetName(eventhdlr),
EVENTHDLR_NAME) == 0);
86 eventhdlrdata = SCIPeventhdlrGetData(eventhdlr);
87 assert(eventhdlrdata != NULL);
89 nheurs = SCIPgetNHeurs(scip);
92 SCIP_CALL( SCIPduplicateMemoryArray(scip, &eventhdlrdata->heurs, SCIPgetHeurs(scip), nheurs) );
93 SCIP_CALL( SCIPallocMemoryArray(scip, &eventhdlrdata->bestprimalbd, nheurs) );
95 for( i = 0; i < nheurs; ++i )
96 eventhdlrdata->bestprimalbd[i] = SCIPinfinity(scip);
99 SCIP_CALL( SCIPcatchEvent(scip, SCIP_EVENTTYPE_SOLFOUND, eventhdlr, NULL, NULL) );
108 SCIP_EVENTHDLRDATA* eventhdlrdata;
110 assert(scip != NULL);
111 assert(eventhdlr != NULL);
112 assert(strcmp(SCIPeventhdlrGetName(eventhdlr),
EVENTHDLR_NAME) == 0);
114 eventhdlrdata = SCIPeventhdlrGetData(eventhdlr);
115 assert(eventhdlrdata != NULL);
118 SCIPfreeMemoryArray(scip, &eventhdlrdata->heurs);
119 SCIPfreeMemoryArray(scip, &eventhdlrdata->bestprimalbd);
122 SCIP_CALL( SCIPdropEvent(scip, SCIP_EVENTTYPE_SOLFOUND, eventhdlr, NULL, -1) );
131 SCIP_EVENTHDLRDATA* eventhdlrdata;
132 const char* probname;
136 assert(scip != NULL);
137 assert(eventhdlr != NULL);
138 assert(strcmp(SCIPeventhdlrGetName(eventhdlr),
EVENTHDLR_NAME) == 0);
140 eventhdlrdata = SCIPeventhdlrGetData(eventhdlr);
141 assert(eventhdlrdata != NULL);
143 nheurs = SCIPgetNHeurs(scip);
144 probname = SCIPgetProbName(scip);
147 for( i = 0; i < nheurs; ++i )
149 SCIPstatisticPrintf(
"Heuristic statistics (%s) -- %s : bestprimalbound = %13.6e\n",
150 strncmp(probname,
"master", 6) == 0 ?
"master" :
"original",
151 SCIPheurGetName(eventhdlrdata->heurs[i]), eventhdlrdata->bestprimalbd[i]);
161 SCIP_EVENTHDLRDATA* eventhdlrdata;
168 assert(scip != NULL);
169 assert(eventhdlr != NULL);
170 assert(strcmp(SCIPeventhdlrGetName(eventhdlr),
EVENTHDLR_NAME) == 0);
172 eventhdlrdata = SCIPeventhdlrGetData(eventhdlr);
173 assert(eventhdlrdata != NULL);
175 nheurs = SCIPgetNHeurs(scip);
178 sol = SCIPeventGetSol(event);
182 solheur = SCIPgetSolHeur(scip, sol);
185 obj = SCIPgetSolTransObj(scip, sol);
188 if( solheur == NULL )
192 for( i = 0; i < nheurs && eventhdlrdata->heurs[i] != solheur; ++i ) ;
201 if( obj < eventhdlrdata->bestprimalbd[i] )
202 eventhdlrdata->bestprimalbd[i] = obj;
213 #ifdef SCIP_STATISTIC
214 SCIP_EVENTHDLRDATA* eventhdlrdata;
215 SCIP_EVENTHDLR* eventhdlr;
218 eventhdlrdata = NULL;
219 SCIP_CALL( SCIPallocMemory(scip, &eventhdlrdata) );
220 assert(eventhdlrdata != NULL);
226 eventExecBestsol, eventhdlrdata) );
227 assert(eventhdlr != NULL);
230 SCIP_CALL( SCIPsetEventhdlrFree(scip, eventhdlr, eventFreeBestsol) );
231 SCIP_CALL( SCIPsetEventhdlrInit(scip, eventhdlr, eventInitBestsol) );
232 SCIP_CALL( SCIPsetEventhdlrExit(scip, eventhdlr, eventExitBestsol) );
233 SCIP_CALL( SCIPsetEventhdlrExitsol(scip, eventhdlr, eventExitsolBestsol) );