50 assert(eventhdlr != NULL);
52 assert(set->scip != NULL);
54 if( eventhdlr->eventcopy != NULL )
57 SCIP_CALL( eventhdlr->eventcopy(set->scip, eventhdlr) );
79 assert(eventhdlr != NULL);
82 assert(eventexec != NULL);
87 (*eventhdlr)->eventcopy = eventcopy;
88 (*eventhdlr)->eventfree = eventfree;
89 (*eventhdlr)->eventinit = eventinit;
90 (*eventhdlr)->eventexit = eventexit;
91 (*eventhdlr)->eventinitsol = eventinitsol;
92 (*eventhdlr)->eventexitsol = eventexitsol;
93 (*eventhdlr)->eventdelete = eventdelete;
94 (*eventhdlr)->eventexec = eventexec;
95 (*eventhdlr)->eventhdlrdata = eventhdlrdata;
96 (*eventhdlr)->initialized =
FALSE;
111 assert(eventhdlr != NULL);
112 assert(*eventhdlr != NULL);
113 assert(!(*eventhdlr)->initialized);
117 if( (*eventhdlr)->eventfree != NULL )
119 SCIP_CALL( (*eventhdlr)->eventfree(set->scip, *eventhdlr) );
139 assert(eventhdlr != NULL);
148 if( set->misc_resetstat )
154 if( eventhdlr->eventinit != NULL )
159 SCIP_CALL( eventhdlr->eventinit(set->scip, eventhdlr) );
175 assert(eventhdlr != NULL);
184 if( eventhdlr->eventexit != NULL )
189 SCIP_CALL( eventhdlr->eventexit(set->scip, eventhdlr) );
205 assert(eventhdlr != NULL);
209 if( eventhdlr->eventinitsol != NULL )
214 SCIP_CALL( eventhdlr->eventinitsol(set->scip, eventhdlr) );
229 assert(eventhdlr != NULL);
233 if( eventhdlr->eventexitsol != NULL )
238 SCIP_CALL( eventhdlr->eventexitsol(set->scip, eventhdlr) );
255 assert(eventhdlr != NULL);
256 assert(eventhdlr->eventexec != NULL);
258 assert(event != NULL);
267 SCIP_CALL( eventhdlr->eventexec(set->scip, eventhdlr, event, eventdata) );
282 assert(eventhdlr != NULL);
284 return eventhdlr->
name;
292 assert(eventhdlr != NULL);
303 assert(eventhdlr != NULL);
314 assert(eventhdlr != NULL);
316 eventhdlr->eventcopy = eventcopy;
325 assert(eventhdlr != NULL);
327 eventhdlr->eventfree = eventfree;
336 assert(eventhdlr != NULL);
338 eventhdlr->eventinit = eventinit;
347 assert(eventhdlr != NULL);
349 eventhdlr->eventexit = eventexit;
358 assert(eventhdlr != NULL);
360 eventhdlr->eventinitsol = eventinitsol;
369 assert(eventhdlr != NULL);
371 eventhdlr->eventexitsol = eventexitsol;
380 assert(eventhdlr != NULL);
382 eventhdlr->eventdelete = eventdelete;
390 assert(eventhdlr != NULL);
401 assert(eventhdlr != NULL);
412 assert(eventhdlr != NULL);
424 assert(eventhdlr != NULL);
442 assert(event != NULL);
461 #undef SCIPeventGetType 462 #undef SCIPeventGetOldobj 463 #undef SCIPeventGetNewobj 464 #undef SCIPeventGetOldbound 465 #undef SCIPeventGetNewbound 466 #undef SCIPeventGetNode 467 #undef SCIPeventGetSol 468 #undef SCIPeventGetRowCol 469 #undef SCIPeventGetRowOldCoefVal 470 #undef SCIPeventGetRowNewCoefVal 471 #undef SCIPeventGetRowOldConstVal 472 #undef SCIPeventGetRowNewConstVal 473 #undef SCIPeventGetRowSide 474 #undef SCIPeventGetRowOldSideVal 475 #undef SCIPeventGetRowNewSideVal 484 assert(event != NULL);
485 assert(blkmem != NULL);
490 (*event)->data.eventvaradded.var = var;
502 assert(event != NULL);
503 assert(blkmem != NULL);
508 (*event)->data.eventvardeleted.var = var;
520 assert(event != NULL);
521 assert(blkmem != NULL);
530 (*event)->data.eventvarfixed.var = var;
542 assert(event != NULL);
543 assert(blkmem != NULL);
551 (*event)->data.eventvarunlocked.var = var;
565 assert(event != NULL);
566 assert(blkmem != NULL);
567 assert(oldobj != newobj);
572 (*event)->data.eventobjchg.var = var;
573 (*event)->
data.eventobjchg.oldobj = oldobj;
574 (*event)->
data.eventobjchg.newobj = newobj;
588 assert(event != NULL);
589 assert(blkmem != NULL);
590 assert(oldbound != newbound);
595 (*event)->data.eventbdchg.var = var;
596 (*event)->
data.eventbdchg.oldbound = oldbound;
597 (*event)->
data.eventbdchg.newbound = newbound;
611 assert(event != NULL);
612 assert(blkmem != NULL);
613 assert(oldbound != newbound);
618 (*event)->data.eventbdchg.var = var;
619 (*event)->
data.eventbdchg.oldbound = oldbound;
620 (*event)->
data.eventbdchg.newbound = newbound;
634 assert(event != NULL);
635 assert(blkmem != NULL);
636 assert(oldbound != newbound);
640 if( newbound > oldbound )
644 (*event)->data.eventbdchg.var = var;
645 (*event)->
data.eventbdchg.oldbound = oldbound;
646 (*event)->
data.eventbdchg.newbound = newbound;
660 assert(event != NULL);
661 assert(blkmem != NULL);
662 assert(oldbound != newbound);
666 if( newbound < oldbound )
670 (*event)->data.eventbdchg.var = var;
671 (*event)->
data.eventbdchg.oldbound = oldbound;
672 (*event)->
data.eventbdchg.newbound = newbound;
686 assert(event != NULL);
687 assert(blkmem != NULL);
692 (*event)->data.eventhole.var = var;
693 (*event)->
data.eventhole.left = left;
694 (*event)->
data.eventhole.right = right;
708 assert(event != NULL);
709 assert(blkmem != NULL);
714 (*event)->data.eventhole.var = var;
715 (*event)->
data.eventhole.left = left;
716 (*event)->
data.eventhole.right = right;
730 assert(event != NULL);
731 assert(blkmem != NULL);
736 (*event)->data.eventhole.var = var;
737 (*event)->
data.eventhole.left = left;
738 (*event)->
data.eventhole.right = right;
752 assert(event != NULL);
753 assert(blkmem != NULL);
758 (*event)->data.eventhole.var = var;
759 (*event)->
data.eventhole.left = left;
760 (*event)->
data.eventhole.right = right;
772 assert(event != NULL);
773 assert(blkmem != NULL);
779 (*event)->data.eventimpladd.var = var;
791 assert(event != NULL);
792 assert(blkmem != NULL);
798 (*event)->data.eventrowaddedsepa.row = row;
810 assert(event != NULL);
811 assert(blkmem != NULL);
817 (*event)->data.eventrowdeletedsepa.row = row;
829 assert(event != NULL);
830 assert(blkmem != NULL);
836 (*event)->data.eventrowaddedlp.row = row;
848 assert(event != NULL);
849 assert(blkmem != NULL);
855 (*event)->data.eventrowdeletedlp.row = row;
870 assert(event != NULL);
871 assert(blkmem != NULL);
877 (*event)->data.eventrowcoefchanged.row = row;
878 (*event)->data.eventrowcoefchanged.col = col;
879 (*event)->data.eventrowcoefchanged.oldval = oldval;
880 (*event)->data.eventrowcoefchanged.newval = newval;
894 assert(event != NULL);
895 assert(blkmem != NULL);
901 (*event)->data.eventrowconstchanged.row = row;
902 (*event)->data.eventrowconstchanged.oldval = oldval;
903 (*event)->data.eventrowconstchanged.newval = newval;
918 assert(event != NULL);
919 assert(blkmem != NULL);
925 (*event)->data.eventrowsidechanged.row = row;
926 (*event)->data.eventrowsidechanged.side = side;
927 (*event)->data.eventrowsidechanged.oldval = oldval;
928 (*event)->data.eventrowsidechanged.newval = newval;
939 assert(event != NULL);
940 assert(blkmem != NULL);
953 assert(event != NULL);
963 assert(event != NULL);
965 return event->eventtype;
974 assert(event != NULL);
976 event->eventtype = eventtype;
986 assert(event != NULL);
992 return event->data.eventvaradded.var;
996 return event->data.eventvardeleted.var;
1000 return event->data.eventvarfixed.var;
1004 return event->data.eventvarunlocked.var;
1008 return event->data.eventobjchg.var;
1017 return event->data.eventbdchg.var;
1024 return event->data.eventhole.var;
1028 return event->data.eventimpladd.var;
1043 assert(event != NULL);
1049 event->data.eventvaradded.var = var;
1054 event->data.eventvardeleted.var = var;
1059 event->data.eventvarfixed.var = var;
1064 event->data.eventvarunlocked.var = var;
1069 event->data.eventobjchg.var = var;
1079 event->data.eventbdchg.var = var;
1087 event->data.eventhole.var = var;
1092 event->data.eventimpladd.var = var;
1108 assert(event != NULL);
1117 return event->data.eventobjchg.oldobj;
1125 assert(event != NULL);
1134 return event->data.eventobjchg.newobj;
1142 assert(event != NULL);
1152 return event->data.eventbdchg.oldbound;
1166 assert(event != NULL);
1176 return event->data.eventbdchg.newbound;
1190 assert(event != NULL);
1199 return event->data.node;
1208 assert(event != NULL);
1217 event->data.node = node;
1227 assert(event != NULL);
1236 return event->data.sol;
1245 assert(event != NULL);
1254 event->data.sol = sol;
1264 assert(event != NULL);
1273 return event->data.eventhole.left;
1281 assert(event != NULL);
1290 return event->data.eventhole.right;
1298 assert(event != NULL);
1303 return event->data.eventrowaddedsepa.row;
1305 return event->data.eventrowdeletedsepa.row;
1307 return event->data.eventrowaddedlp.row;
1309 return event->data.eventrowdeletedlp.row;
1311 return event->data.eventrowcoefchanged.row;
1313 return event->data.eventrowconstchanged.row;
1315 return event->data.eventrowsidechanged.row;
1328 assert(event != NULL);
1337 return event->data.eventrowcoefchanged.col;
1345 assert(event != NULL);
1354 return event->data.eventrowcoefchanged.oldval;
1362 assert(event != NULL);
1371 return event->data.eventrowcoefchanged.newval;
1379 assert(event != NULL);
1388 return event->data.eventrowconstchanged.oldval;
1396 assert(event != NULL);
1405 return event->data.eventrowconstchanged.newval;
1413 assert(event != NULL);
1422 return event->data.eventrowsidechanged.side;
1430 assert(event != NULL);
1439 return event->data.eventrowsidechanged.oldval;
1447 assert(event != NULL);
1456 return event->data.eventrowsidechanged.newval;
1471 assert(event != NULL);
1505 var =
event->
data.eventvardeleted.var;
1506 assert(var != NULL);
1513 var =
event->
data.eventvarfixed.var;
1514 assert(var != NULL);
1521 var =
event->
data.eventvarunlocked.var;
1522 assert(var != NULL);
1529 var =
event->
data.eventobjchg.var;
1530 assert(var != NULL);
1557 var =
event->
data.eventbdchg.var;
1558 assert(var != NULL);
1573 var =
event->
data.eventbdchg.var;
1574 assert(var != NULL);
1590 var =
event->
data.eventbdchg.var;
1591 assert(var != NULL);
1613 var =
event->
data.eventbdchg.var;
1614 assert(var != NULL);
1638 var =
event->
data.eventhole.var;
1639 assert(var != NULL);
1646 var =
event->
data.eventimpladd.var;
1647 assert(var != NULL);
1677 assert(eventfilter != NULL);
1678 assert(blkmem != NULL);
1679 assert(
set != NULL);
1681 if( num > eventfilter->
size )
1690 eventfilter->
size = newsize;
1692 assert(num <= eventfilter->size);
1703 assert(eventfilter != NULL);
1704 assert(blkmem != NULL);
1707 (*eventfilter)->eventtypes = NULL;
1708 (*eventfilter)->eventhdlrs = NULL;
1709 (*eventfilter)->eventdata = NULL;
1710 (*eventfilter)->nextpos = NULL;
1711 (*eventfilter)->size = 0;
1712 (*eventfilter)->len = 0;
1713 (*eventfilter)->firstfreepos = -1;
1714 (*eventfilter)->firstdeletedpos = -1;
1717 (*eventfilter)->delayupdates =
FALSE;
1731 assert(eventfilter != NULL);
1732 assert(*eventfilter != NULL);
1733 assert(!(*eventfilter)->delayupdates);
1734 assert(blkmem != NULL);
1735 assert(
set != NULL);
1736 assert(set->scip != NULL);
1739 for( i = 0; i < (*eventfilter)->len; ++i )
1743 assert((*eventfilter)->eventhdlrs[i] != NULL);
1744 if( (*eventfilter)->eventhdlrs[i]->eventdelete != NULL )
1746 SCIP_CALL( (*eventfilter)->eventhdlrs[i]->eventdelete(set->scip, (*eventfilter)->eventhdlrs[i],
1747 &(*eventfilter)->eventdata[i]) );
1775 assert(eventfilter != NULL);
1776 assert(blkmem != NULL);
1777 assert(
set != NULL);
1778 assert(eventhdlr != NULL);
1787 pos = eventfilter->
len;
1799 pos = eventfilter->
len;
1806 assert(0 <= pos && pos < eventfilter->len);
1815 assert(0 <= pos && pos < eventfilter->len);
1819 eventfilter->
eventdata[pos] = eventdata;
1820 eventfilter->
nextpos[pos] = -2;
1822 if( filterpos != NULL )
1839 assert(eventfilter != NULL);
1841 assert(eventhdlr != NULL);
1843 for( i = eventfilter->
len - 1; i >= 0; --i )
1845 if( eventdata == eventfilter->
eventdata[i]
1848 && eventfilter->
nextpos[i] == -2 )
1866 assert(eventfilter != NULL);
1867 assert(blkmem != NULL);
1868 assert(
set != NULL);
1870 assert(eventhdlr != NULL);
1871 assert(-1 <= filterpos && filterpos < eventfilter->len);
1874 if( filterpos == -1 )
1876 if( filterpos == -1 )
1878 SCIPerrorMessage(
"no event for event handler %p with data %p and event mask 0x%x found in event filter %p\n",
1879 eventhdlr, eventdata, eventtype, eventfilter);
1882 assert(0 <= filterpos && filterpos < eventfilter->len);
1883 assert(eventfilter->
eventtypes[filterpos] == eventtype);
1884 assert(eventfilter->
eventhdlrs[filterpos] == eventhdlr);
1885 assert(eventfilter->
eventdata[filterpos] == eventdata);
1886 assert(eventfilter->
nextpos[filterpos] == -2);
1900 assert(eventfilter->
nextpos[filterpos] == -2);
1915 assert(eventfilter != NULL);
1931 assert(eventfilter != NULL);
1938 assert(0 <= pos && pos < eventfilter->len);
1940 assert(eventfilter->
nextpos[pos] >= -1);
1942 nextpos = eventfilter->
nextpos[pos];
1971 assert(eventfilter != NULL);
1972 assert(
set != NULL);
1973 assert(event != NULL);
1976 (
void*)eventfilter, eventfilter->
len, eventfilter->eventmask, event->
eventtype);
1978 eventtype =
event->eventtype;
1981 if( (eventtype & eventfilter->eventmask) == 0 )
1991 len = eventfilter->len;
1992 eventtypes = eventfilter->eventtypes;
1993 for( i = 0; i < len; ++i )
1996 if( (eventtype & eventtypes[i]) != 0 )
2007 eventfilter->eventmask &= ~event->
eventtype;
2008 SCIPsetDebugMsg(
set,
" -> event type 0x%" SCIP_EVENTTYPE_FORMAT
" not processed. new mask of event filter %p: 0x%" SCIP_EVENTTYPE_FORMAT
"\n",
2009 event->
eventtype, (
void*)eventfilter, eventfilter->eventmask);
2034 #undef SCIPeventqueueIsDelayed 2044 assert(eventqueue != NULL);
2045 assert(
set != NULL);
2055 assert(num <= eventqueue->eventssize);
2065 assert(eventqueue != NULL);
2068 (*eventqueue)->events = NULL;
2069 (*eventqueue)->eventssize = 0;
2070 (*eventqueue)->nevents = 0;
2071 (*eventqueue)->delayevents =
FALSE;
2081 assert(eventqueue != NULL);
2082 assert(*eventqueue != NULL);
2083 assert((*eventqueue)->nevents == 0);
2099 assert(eventqueue != NULL);
2101 assert(event != NULL);
2102 assert(*event != NULL);
2105 (
void*)*event, (*event)->
eventtype, (
void*)eventqueue, eventqueue->
nevents);
2108 eventqueue->events[eventqueue->nevents] = *event;
2109 eventqueue->nevents++;
2132 assert(eventqueue != NULL);
2133 assert(event != NULL);
2134 assert(*event != NULL);
2150 switch( (*event)->eventtype )
2189 var = (*event)->
data.eventobjchg.var;
2190 assert(var != NULL);
2195 assert(pos < eventqueue->nevents);
2196 qevent = eventqueue->events[pos];
2197 assert(qevent != NULL);
2202 SCIPsetDebugMsg(
set,
" -> merging OBJ event (<%s>,%g -> %g) with event at position %d (<%s>,%g -> %g)\n",
2203 SCIPvarGetName((*event)->data.eventobjchg.var), (*event)->data.eventobjchg.oldobj,
2204 (*event)->data.eventobjchg.newobj,
2231 var = (*event)->
data.eventbdchg.var;
2232 assert(var != NULL);
2237 assert(pos < eventqueue->nevents);
2238 qevent = eventqueue->events[pos];
2239 assert(qevent != NULL);
2244 SCIPsetDebugMsg(
set,
" -> merging LB event (<%s>,%g -> %g) with event at position %d (<%s>,%g -> %g)\n",
2245 SCIPvarGetName((*event)->data.eventbdchg.var), (*event)->data.eventbdchg.oldbound,
2246 (*event)->data.eventbdchg.newbound,
2280 var = (*event)->
data.eventbdchg.var;
2281 assert(var != NULL);
2286 assert(pos < eventqueue->nevents);
2287 qevent = eventqueue->events[pos];
2288 assert(qevent != NULL);
2293 SCIPsetDebugMsg(
set,
" -> merging UB event (<%s>,%g -> %g) with event at position %d (<%s>,%g -> %g)\n",
2294 SCIPvarGetName((*event)->data.eventbdchg.var), (*event)->data.eventbdchg.oldbound,
2295 (*event)->data.eventbdchg.newbound,
2327 var = (*event)->
data.eventimpladd.var;
2328 assert(var != NULL);
2347 assert(*event == NULL);
2357 assert(eventqueue != NULL);
2381 assert(eventqueue != NULL);
2392 for( i = 0; i < eventqueue->
nevents; ++i )
2394 event = eventqueue->
events[i];
2395 assert(event != NULL);
2405 event->data.eventobjchg.var->eventqueueindexobj = -1;
2410 event->data.eventbdchg.var->eventqueueindexlb = -1;
2415 event->data.eventbdchg.var->eventqueueindexub = -1;
2420 event->data.eventimpladd.var->eventqueueimpl =
FALSE;
2432 assert(i == eventqueue->
nevents);
2444 assert(eventqueue != NULL);
SCIP_Real SCIPeventGetRowNewSideVal(SCIP_EVENT *event)
SCIP_RETCODE SCIPeventfilterCreate(SCIP_EVENTFILTER **eventfilter, BMS_BLKMEM *blkmem)
void SCIPeventhdlrSetInit(SCIP_EVENTHDLR *eventhdlr, SCIP_DECL_EVENTINIT((*eventinit)))
void SCIPeventhdlrSetCopy(SCIP_EVENTHDLR *eventhdlr, SCIP_DECL_EVENTCOPY((*eventcopy)))
#define SCIP_EVENTTYPE_LPSOLVED
#define BMSfreeBlockMemoryArrayNull(mem, ptr, num)
SCIP_RETCODE SCIPeventCreateRowAddedLP(SCIP_EVENT **event, BMS_BLKMEM *blkmem, SCIP_ROW *row)
internal methods for managing events
#define SCIP_EVENTTYPE_OBJCHANGED
#define SCIP_EVENTTYPE_LPEVENT
static int eventfilterSearch(SCIP_EVENTFILTER *const eventfilter, SCIP_EVENTTYPE const eventtype, SCIP_EVENTHDLR *const eventhdlr, SCIP_EVENTDATA *const eventdata)
SCIP_RETCODE SCIPeventhdlrCreate(SCIP_EVENTHDLR **eventhdlr, const char *name, const char *desc, SCIP_DECL_EVENTCOPY((*eventcopy)), SCIP_DECL_EVENTFREE((*eventfree)), SCIP_DECL_EVENTINIT((*eventinit)), SCIP_DECL_EVENTEXIT((*eventexit)), SCIP_DECL_EVENTINITSOL((*eventinitsol)), SCIP_DECL_EVENTEXITSOL((*eventexitsol)), SCIP_DECL_EVENTDELETE((*eventdelete)), SCIP_DECL_EVENTEXEC((*eventexec)), SCIP_EVENTHDLRDATA *eventhdlrdata)
#define BMSfreeMemoryArrayNull(ptr)
#define SCIP_EVENTTYPE_VARFIXED
static SCIP_RETCODE eventqueueEnsureEventsMem(SCIP_EVENTQUEUE *eventqueue, SCIP_SET *set, int num)
void SCIPeventhdlrSetExitsol(SCIP_EVENTHDLR *eventhdlr, SCIP_DECL_EVENTEXITSOL((*eventexitsol)))
SCIP_EVENTVARUNLOCKED eventvarunlocked
#define SCIP_EVENTTYPE_ROWADDEDLP
SCIP_RETCODE SCIPeventqueueProcess(SCIP_EVENTQUEUE *eventqueue, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_PRIMAL *primal, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTFILTER *eventfilter)
SCIP_RETCODE SCIPeventCreateRowDeletedLP(SCIP_EVENT **event, BMS_BLKMEM *blkmem, SCIP_ROW *row)
SCIP_SIDETYPE SCIPeventGetRowSide(SCIP_EVENT *event)
SCIP_RETCODE SCIPeventqueueAdd(SCIP_EVENTQUEUE *eventqueue, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_PRIMAL *primal, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTFILTER *eventfilter, SCIP_EVENT **event)
static void eventDisable(SCIP_EVENT *event)
SCIP_RETCODE SCIPeventChgType(SCIP_EVENT *event, SCIP_EVENTTYPE eventtype)
SCIP_RETCODE SCIPeventhdlrExit(SCIP_EVENTHDLR *eventhdlr, SCIP_SET *set)
internal methods for clocks and timing issues
SCIP_RETCODE SCIPeventCreateImplAdded(SCIP_EVENT **event, BMS_BLKMEM *blkmem, SCIP_VAR *var)
SCIP_EVENTHDLR ** eventhdlrs
SCIP_Real SCIPeventGetRowNewConstVal(SCIP_EVENT *event)
SCIP_RETCODE SCIPeventfilterDel(SCIP_EVENTFILTER *eventfilter, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int filterpos)
SCIP_RETCODE SCIPeventCreateSync(SCIP_EVENT **event, BMS_BLKMEM *blkmem)
SCIP_EVENTOBJCHG eventobjchg
SCIP_RETCODE SCIPeventhdlrCopyInclude(SCIP_EVENTHDLR *eventhdlr, SCIP_SET *set)
SCIP_DECL_EVENTEXIT(EventhdlrNewSol::scip_exit)
struct SCIP_EventhdlrData SCIP_EVENTHDLRDATA
SCIP_RETCODE SCIPcolChgObj(SCIP_COL *col, SCIP_SET *set, SCIP_LP *lp, SCIP_Real newobj)
SCIP_RETCODE SCIPlpUpdateVarLb(SCIP_LP *lp, SCIP_SET *set, SCIP_VAR *var, SCIP_Real oldlb, SCIP_Real newlb)
#define SCIP_EVENTTYPE_ROWSIDECHANGED
void SCIPclockStop(SCIP_CLOCK *clck, SCIP_SET *set)
SCIP_RETCODE SCIPlpUpdateVarLbGlobal(SCIP_LP *lp, SCIP_SET *set, SCIP_VAR *var, SCIP_Real oldlb, SCIP_Real newlb)
SCIP_RETCODE SCIPeventProcess(SCIP_EVENT *event, SCIP_SET *set, SCIP_PRIMAL *primal, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTFILTER *eventfilter)
SCIP_RETCODE SCIPlpUpdateVarUbGlobal(SCIP_LP *lp, SCIP_SET *set, SCIP_VAR *var, SCIP_Real oldub, SCIP_Real newub)
const char * SCIPeventhdlrGetName(SCIP_EVENTHDLR *eventhdlr)
static void eventfilterDelayUpdates(SCIP_EVENTFILTER *eventfilter)
void SCIPclockStart(SCIP_CLOCK *clck, SCIP_SET *set)
SCIP_ROW * SCIPeventGetRow(SCIP_EVENT *event)
SCIP_RETCODE SCIPeventqueueDelay(SCIP_EVENTQUEUE *eventqueue)
enum SCIP_Retcode SCIP_RETCODE
#define SCIP_EVENTTYPE_NODEFOCUSED
SCIP_RETCODE SCIPeventCreateUbChanged(SCIP_EVENT **event, BMS_BLKMEM *blkmem, SCIP_VAR *var, SCIP_Real oldbound, SCIP_Real newbound)
int SCIPvarGetProbindex(SCIP_VAR *var)
internal methods for branching rules and branching candidate storage
int SCIPsetCalcMemGrowSize(SCIP_SET *set, int num)
#define SCIP_EVENTTYPE_GLBCHANGED
SCIP_RETCODE SCIPeventqueueFree(SCIP_EVENTQUEUE **eventqueue)
SCIP_RETCODE SCIPeventChgNode(SCIP_EVENT *event, SCIP_NODE *node)
SCIP_RETCODE SCIPeventChgVar(SCIP_EVENT *event, SCIP_VAR *var)
#define SCIP_EVENTTYPE_ROWDELETEDLP
void SCIPclockEnableOrDisable(SCIP_CLOCK *clck, SCIP_Bool enable)
#define BMSfreeMemory(ptr)
SCIP_Real SCIPeventGetRowOldSideVal(SCIP_EVENT *event)
SCIP_RETCODE SCIPeventCreateLholeAdded(SCIP_EVENT **event, BMS_BLKMEM *blkmem, SCIP_VAR *var, SCIP_Real left, SCIP_Real right)
#define SCIP_EVENTTYPE_BOUNDCHANGED
internal methods for LP management
SCIP_DECL_EVENTINITSOL(EventhdlrNewSol::scip_initsol)
SCIP_RETCODE SCIPeventCreateObjChanged(SCIP_EVENT **event, BMS_BLKMEM *blkmem, SCIP_VAR *var, SCIP_Real oldobj, SCIP_Real newobj)
internal methods for collecting primal CIP solutions and primal informations
#define SCIP_EVENTTYPE_LBCHANGED
#define SCIP_EVENTTYPE_NODEFEASIBLE
void SCIPeventhdlrSetData(SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTHDLRDATA *eventhdlrdata)
#define SCIP_EVENTTYPE_LBRELAXED
#define SCIP_EVENTTYPE_NODEBRANCHED
SCIP_DECL_EVENTINIT(EventhdlrNewSol::scip_init)
static SCIP_RETCODE eventfilterEnsureMem(SCIP_EVENTFILTER *eventfilter, BMS_BLKMEM *blkmem, SCIP_SET *set, int num)
SCIP_RETCODE SCIPeventCreateVarFixed(SCIP_EVENT **event, BMS_BLKMEM *blkmem, SCIP_VAR *var)
SCIP_RETCODE SCIPeventhdlrFree(SCIP_EVENTHDLR **eventhdlr, SCIP_SET *set)
SCIP_RETCODE SCIPeventCreateRowDeletedSepa(SCIP_EVENT **event, BMS_BLKMEM *blkmem, SCIP_ROW *row)
SCIP_DECL_EVENTFREE(EventhdlrNewSol::scip_free)
SCIP_Real SCIPeventGetHoleLeft(SCIP_EVENT *event)
SCIP_RETCODE SCIPeventChgSol(SCIP_EVENT *event, SCIP_SOL *sol)
SCIP_Real SCIPeventGetRowOldConstVal(SCIP_EVENT *event)
SCIP_Real SCIPeventhdlrGetTime(SCIP_EVENTHDLR *eventhdlr)
SCIP_Real SCIPeventGetNewbound(SCIP_EVENT *event)
void SCIPeventhdlrSetInitsol(SCIP_EVENTHDLR *eventhdlr, SCIP_DECL_EVENTINITSOL((*eventinitsol)))
#define SCIP_EVENTTYPE_ROWADDEDSEPA
SCIP_RETCODE SCIPlpUpdateVarUb(SCIP_LP *lp, SCIP_SET *set, SCIP_VAR *var, SCIP_Real oldub, SCIP_Real newub)
#define SCIP_EVENTTYPE_SOLEVENT
SCIP_RETCODE SCIPeventfilterAdd(SCIP_EVENTFILTER *eventfilter, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int *filterpos)
SCIP_Real SCIPeventGetOldobj(SCIP_EVENT *event)
#define BMSfreeMemoryArray(ptr)
#define SCIP_EVENTTYPE_LHOLEREMOVED
void SCIPclockReset(SCIP_CLOCK *clck)
SCIP_Bool SCIPeventhdlrIsInitialized(SCIP_EVENTHDLR *eventhdlr)
SCIP_RETCODE SCIPeventqueueCreate(SCIP_EVENTQUEUE **eventqueue)
SCIP_NODE * SCIPeventGetNode(SCIP_EVENT *event)
SCIP_RETCODE SCIPeventCreateVarAdded(SCIP_EVENT **event, BMS_BLKMEM *blkmem, SCIP_VAR *var)
#define SCIP_EVENTTYPE_GHOLEREMOVED
void SCIPeventhdlrEnableOrDisableClocks(SCIP_EVENTHDLR *eventhdlr, SCIP_Bool enable)
#define SCIP_EVENTTYPE_IMPLADDED
#define SCIP_EVENTTYPE_ROWCONSTCHANGED
struct SCIP_EventData SCIP_EVENTDATA
void SCIPeventhdlrSetExit(SCIP_EVENTHDLR *eventhdlr, SCIP_DECL_EVENTEXIT((*eventexit)))
SCIP_Real SCIPeventhdlrGetSetupTime(SCIP_EVENTHDLR *eventhdlr)
const char * SCIPvarGetName(SCIP_VAR *var)
SCIP_EVENTVARADDED eventvaradded
SCIP_Real SCIPclockGetTime(SCIP_CLOCK *clck)
SCIP_Real SCIPeventGetNewobj(SCIP_EVENT *event)
SCIP_RETCODE SCIPeventCreateLbChanged(SCIP_EVENT **event, BMS_BLKMEM *blkmem, SCIP_VAR *var, SCIP_Real oldbound, SCIP_Real newbound)
#define SCIP_EVENTTYPE_UBRELAXED
SCIP_RETCODE SCIPeventCreateLholeRemoved(SCIP_EVENT **event, BMS_BLKMEM *blkmem, SCIP_VAR *var, SCIP_Real left, SCIP_Real right)
internal methods for global SCIP settings
#define SCIP_EVENTTYPE_LBTIGHTENED
SCIP_RETCODE SCIPeventhdlrInitsol(SCIP_EVENTHDLR *eventhdlr, SCIP_SET *set)
SCIP_COL * SCIPeventGetRowCol(SCIP_EVENT *event)
#define SCIP_EVENTTYPE_LHOLEADDED
SCIP_Bool SCIPsetIsEQ(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_EVENTIMPLADD eventimpladd
#define BMSduplicateMemoryArray(ptr, source, num)
#define SCIP_EVENTTYPE_UBCHANGED
SCIP_RETCODE SCIPclockCreate(SCIP_CLOCK **clck, SCIP_CLOCKTYPE clocktype)
#define BMSfreeBlockMemory(mem, ptr)
internal methods for problem variables
SCIP_VAR * SCIPeventGetVar(SCIP_EVENT *event)
SCIP_Real SCIPeventGetRowNewCoefVal(SCIP_EVENT *event)
#define SCIP_EVENTTYPE_NODEEVENT
SCIP_EVENTTYPE SCIPeventGetType(SCIP_EVENT *event)
void SCIPeventhdlrSetFree(SCIP_EVENTHDLR *eventhdlr, SCIP_DECL_EVENTFREE((*eventfree)))
void SCIPprimalUpdateVarObj(SCIP_PRIMAL *primal, SCIP_VAR *var, SCIP_Real oldobj, SCIP_Real newobj)
SCIP_EVENTHDLRDATA * eventhdlrdata
#define SCIP_EVENTTYPE_ROWCOEFCHANGED
SCIP_RETCODE SCIPeventCreateRowSideChanged(SCIP_EVENT **event, BMS_BLKMEM *blkmem, SCIP_ROW *row, SCIP_SIDETYPE side, SCIP_Real oldval, SCIP_Real newval)
SCIP_RETCODE SCIPeventCreateGholeRemoved(SCIP_EVENT **event, BMS_BLKMEM *blkmem, SCIP_VAR *var, SCIP_Real left, SCIP_Real right)
void SCIPclockFree(SCIP_CLOCK **clck)
SCIP_RETCODE SCIPeventCreateGlbChanged(SCIP_EVENT **event, BMS_BLKMEM *blkmem, SCIP_VAR *var, SCIP_Real oldbound, SCIP_Real newbound)
SCIP_RETCODE SCIPcolChgLb(SCIP_COL *col, SCIP_SET *set, SCIP_LP *lp, SCIP_Real newlb)
static void eventfilterProcessUpdates(SCIP_EVENTFILTER *eventfilter)
SCIP_RETCODE SCIPeventCreateVarDeleted(SCIP_EVENT **event, BMS_BLKMEM *blkmem, SCIP_VAR *var)
#define SCIP_EVENTTYPE_NODEINFEASIBLE
#define SCIP_EVENTTYPE_ROWDELETEDSEPA
#define SCIP_EVENTTYPE_HOLECHANGED
#define SCIP_EVENTTYPE_GHOLEADDED
SCIP_COL * SCIPvarGetCol(SCIP_VAR *var)
SCIP_RETCODE SCIPbranchcandUpdateVar(SCIP_BRANCHCAND *branchcand, SCIP_SET *set, SCIP_VAR *var)
#define SCIP_EVENTTYPE_UBTIGHTENED
SCIP_RETCODE SCIPeventhdlrExec(SCIP_EVENTHDLR *eventhdlr, SCIP_SET *set, SCIP_EVENT *event, SCIP_EVENTDATA *eventdata)
#define SCIP_EVENTTYPE_FIRSTLPSOLVED
SCIP_RETCODE SCIPeventFree(SCIP_EVENT **event, BMS_BLKMEM *blkmem)
static SCIP_RETCODE eventqueueAppend(SCIP_EVENTQUEUE *eventqueue, SCIP_SET *set, SCIP_EVENT **event)
SCIP_RETCODE SCIPcolChgUb(SCIP_COL *col, SCIP_SET *set, SCIP_LP *lp, SCIP_Real newub)
SCIP_EVENTFILTER * eventfilter
SCIP_Real SCIPeventGetRowOldCoefVal(SCIP_EVENT *event)
SCIP_RETCODE SCIPeventCreateRowCoefChanged(SCIP_EVENT **event, BMS_BLKMEM *blkmem, SCIP_ROW *row, SCIP_COL *col, SCIP_Real oldval, SCIP_Real newval)
SCIP_EVENTDATA ** eventdata
#define SCIP_EVENTTYPE_DISABLED
SCIP_EVENTBDCHG eventbdchg
#define SCIP_EVENTTYPE_BESTSOLFOUND
#define SCIP_EVENTTYPE_POORSOLFOUND
union SCIP_Event::@8 data
SCIP_RETCODE SCIPeventfilterFree(SCIP_EVENTFILTER **eventfilter, BMS_BLKMEM *blkmem, SCIP_SET *set)
#define SCIP_EVENTTYPE_FORMAT
SCIP_RETCODE SCIPlpUpdateVarObj(SCIP_LP *lp, SCIP_SET *set, SCIP_VAR *var, SCIP_Real oldobj, SCIP_Real newobj)
SCIP_RETCODE SCIPeventfilterProcess(SCIP_EVENTFILTER *eventfilter, SCIP_SET *set, SCIP_EVENT *event)
public methods for message output
SCIP_RETCODE SCIPeventhdlrExitsol(SCIP_EVENTHDLR *eventhdlr, SCIP_SET *set)
SCIP_Real SCIPeventGetOldbound(SCIP_EVENT *event)
SCIP_DECL_EVENTEXEC(EventhdlrNewSol::scip_exec)
SCIP_VARSTATUS SCIPvarGetStatus(SCIP_VAR *var)
SCIP_Real SCIPeventGetHoleRight(SCIP_EVENT *event)
#define SCIP_EVENTTYPE_VARUNLOCKED
SCIP_DECL_EVENTEXITSOL(EventhdlrNewSol::scip_exitsol)
unsigned int eventqueueimpl
#define SCIP_DECL_EVENTCOPY(x)
#define BMSallocMemory(ptr)
#define BMSreallocMemoryArray(ptr, num)
SCIP_RETCODE SCIPeventCreateGholeAdded(SCIP_EVENT **event, BMS_BLKMEM *blkmem, SCIP_VAR *var, SCIP_Real left, SCIP_Real right)
SCIP_RETCODE SCIPeventCreateVarUnlocked(SCIP_EVENT **event, BMS_BLKMEM *blkmem, SCIP_VAR *var)
SCIP_EVENTTYPE delayedeventmask
SCIP_EVENTTYPE * eventtypes
SCIP_EVENTVARDELETED eventvardeleted
SCIP_EVENTVARFIXED eventvarfixed
SCIP_DECL_EVENTDELETE(EventhdlrNewSol::scip_delete)
#define BMSallocBlockMemory(mem, ptr)
void SCIPeventhdlrSetDelete(SCIP_EVENTHDLR *eventhdlr, SCIP_DECL_EVENTDELETE((*eventdelete)))
SCIP_Bool SCIPeventqueueIsDelayed(SCIP_EVENTQUEUE *eventqueue)
common defines and data types used in all packages of SCIP
struct BMS_BlkMem BMS_BLKMEM
#define SCIP_EVENTTYPE_GUBCHANGED
SCIP_EVENTHDLRDATA * SCIPeventhdlrGetData(SCIP_EVENTHDLR *eventhdlr)
#define SCIP_EVENTTYPE_SYNC
#define SCIP_EVENTTYPE_PRESOLVEROUND
SCIP_RETCODE SCIPeventCreateGubChanged(SCIP_EVENT **event, BMS_BLKMEM *blkmem, SCIP_VAR *var, SCIP_Real oldbound, SCIP_Real newbound)
#define SCIP_EVENTTYPE_VARADDED
SCIP_SOL * SCIPeventGetSol(SCIP_EVENT *event)
#define BMSreallocBlockMemoryArray(mem, ptr, oldnum, newnum)
#define SCIP_EVENTTYPE_VARDELETED
SCIP_RETCODE SCIPeventhdlrInit(SCIP_EVENTHDLR *eventhdlr, SCIP_SET *set)
SCIP_RETCODE SCIPeventCreateRowAddedSepa(SCIP_EVENT **event, BMS_BLKMEM *blkmem, SCIP_ROW *row)
SCIP_RETCODE SCIPeventCreateRowConstChanged(SCIP_EVENT **event, BMS_BLKMEM *blkmem, SCIP_ROW *row, SCIP_Real oldval, SCIP_Real newval)
enum SCIP_SideType SCIP_SIDETYPE