/** creates the handler for samediff constraints and includes it in SCIP */ SCIP_RETCODE SCIPincludeConshdlrSamediff( SCIP* scip /**< SCIP data structure */ ) { SCIP_CONSHDLRDATA* conshdlrdata; SCIP_CONSHDLR* conshdlr; /* create samediff constraint handler data */ conshdlrdata = NULL; /* TODO: (optional) create constraint handler specific data here */ conshdlr = NULL; /* include constraint handler */ SCIP_CALL( SCIPincludeConshdlrBasic(scip, &conshdlr, CONSHDLR_NAME, CONSHDLR_DESC, CONSHDLR_ENFOPRIORITY, CONSHDLR_CHECKPRIORITY, CONSHDLR_EAGERFREQ, CONSHDLR_NEEDSCONS, consEnfolpSamediff, consEnfopsSamediff, consCheckSamediff, consLockSamediff, conshdlrdata) ); assert(conshdlr != NULL); SCIP_CALL( SCIPsetConshdlrDelete(scip, conshdlr, consDeleteSamediff) ); SCIP_CALL( SCIPsetConshdlrTrans(scip, conshdlr, consTransSamediff) ); SCIP_CALL( SCIPsetConshdlrProp(scip, conshdlr, consPropSamediff, CONSHDLR_PROPFREQ, CONSHDLR_DELAYPROP, CONSHDLR_PROP_TIMING) ); SCIP_CALL( SCIPsetConshdlrActive(scip, conshdlr, consActiveSamediff) ); SCIP_CALL( SCIPsetConshdlrDeactive(scip, conshdlr, consDeactiveSamediff) ); SCIP_CALL( SCIPsetConshdlrPrint(scip, conshdlr, consPrintSamediff) ); return SCIP_OKAY; }
/** creates the handler for conjunction constraints and includes it in SCIP */ SCIP_RETCODE SCIPincludeConshdlrConjunction( SCIP* scip /**< SCIP data structure */ ) { SCIP_CONSHDLRDATA* conshdlrdata; SCIP_CONSHDLR* conshdlr; /* create conjunction constraint handler data */ conshdlrdata = NULL; /* include constraint handler */ SCIP_CALL( SCIPincludeConshdlrBasic(scip, &conshdlr, CONSHDLR_NAME, CONSHDLR_DESC, CONSHDLR_ENFOPRIORITY, CONSHDLR_CHECKPRIORITY, CONSHDLR_EAGERFREQ, CONSHDLR_NEEDSCONS, consEnfolpConjunction, consEnfopsConjunction, consCheckConjunction, consLockConjunction, conshdlrdata) ); assert(conshdlr != NULL); /* set non-fundamental callbacks via specific setter functions */ SCIP_CALL( SCIPsetConshdlrDelete(scip, conshdlr, consDeleteConjunction) ); SCIP_CALL( SCIPsetConshdlrParse(scip, conshdlr, consParseConjunction) ); SCIP_CALL( SCIPsetConshdlrPresol(scip, conshdlr, consPresolConjunction, CONSHDLR_MAXPREROUNDS, CONSHDLR_DELAYPRESOL) ); SCIP_CALL( SCIPsetConshdlrPrint(scip, conshdlr, consPrintConjunction) ); SCIP_CALL( SCIPsetConshdlrTrans(scip, conshdlr, consTransConjunction) ); return SCIP_OKAY; }
/** creates the handler for stp constraints and includes it in SCIP */ SCIP_RETCODE SCIPincludeConshdlrStp( SCIP* scip /**< SCIP data structure */ ) { SCIP_CONSHDLRDATA* conshdlrdata; SCIP_CONSHDLR* conshdlr; /* create stp constraint handler data */ SCIP_CALL( SCIPallocMemory(scip, &conshdlrdata) ); conshdlr = NULL; /* include constraint handler */ SCIP_CALL( SCIPincludeConshdlrBasic(scip, &conshdlr, CONSHDLR_NAME, CONSHDLR_DESC, CONSHDLR_ENFOPRIORITY, CONSHDLR_CHECKPRIORITY, CONSHDLR_EAGERFREQ, CONSHDLR_NEEDSCONS, consEnfolpStp, consEnfopsStp, consCheckStp, consLockStp, conshdlrdata) ); assert(conshdlr != NULL); SCIP_CALL( SCIPsetConshdlrCopy(scip, conshdlr, conshdlrCopyStp, consCopyStp) ); SCIP_CALL( SCIPsetConshdlrDelete(scip, conshdlr, consDeleteStp) ); SCIP_CALL( SCIPsetConshdlrTrans(scip, conshdlr, consTransStp) ); SCIP_CALL( SCIPsetConshdlrProp(scip, conshdlr, consPropStp, CONSHDLR_PROPFREQ, CONSHDLR_DELAYPROP, CONSHDLR_PROP_TIMING) ); SCIP_CALL( SCIPsetConshdlrSepa(scip, conshdlr, consSepalpStp, NULL, CONSHDLR_SEPAFREQ, CONSHDLR_SEPAPRIORITY, CONSHDLR_DELAYSEPA) ); SCIP_CALL( SCIPsetConshdlrFree(scip, conshdlr, consFreeStp) ); SCIP_CALL( SCIPaddBoolParam(scip, "constraints/stp/backcut", "Try Back-Cuts", &conshdlrdata->backcut, TRUE, DEFAULT_BACKCUT, NULL, NULL) ); SCIP_CALL( SCIPaddBoolParam(scip, "constraints/stp/creepflow", "Use Creep-Flow", &conshdlrdata->creepflow, TRUE, DEFAULT_CREEPFLOW, NULL, NULL) ); SCIP_CALL( SCIPaddBoolParam(scip, "constraints/stp/disjunctcut", "Only disjunct Cuts", &conshdlrdata->disjunctcut, TRUE, DEFAULT_DISJUNCTCUT, NULL, NULL) ); SCIP_CALL( SCIPaddBoolParam(scip, "constraints/stp/nestedcut", "Try Nested-Cuts", &conshdlrdata->nestedcut, TRUE, DEFAULT_NESTEDCUT, NULL, NULL) ); SCIP_CALL( SCIPaddBoolParam(scip, "constraints/stp/flowsep", "Try Flow-Cuts", &conshdlrdata->flowsep, TRUE, DEFAULT_FLOWSEP, NULL, NULL) ); SCIP_CALL( SCIPaddIntParam(scip, "constraints/"CONSHDLR_NAME"/maxrounds", "maximal number of separation rounds per node (-1: unlimited)", &conshdlrdata->maxrounds, FALSE, DEFAULT_MAXROUNDS, -1, INT_MAX, NULL, NULL) ); SCIP_CALL( SCIPaddIntParam(scip, "constraints/"CONSHDLR_NAME"/maxroundsroot", "maximal number of separation rounds per node in the root node (-1: unlimited)", &conshdlrdata->maxroundsroot, FALSE, DEFAULT_MAXROUNDSROOT, -1, INT_MAX, NULL, NULL) ); SCIP_CALL( SCIPaddIntParam(scip, "constraints/"CONSHDLR_NAME"/maxsepacuts", "maximal number of cuts separated per separation round", &conshdlrdata->maxsepacuts, FALSE, DEFAULT_MAXSEPACUTS, 0, INT_MAX, NULL, NULL) ); SCIP_CALL( SCIPaddIntParam(scip, "constraints/"CONSHDLR_NAME"/maxsepacutsroot", "maximal number of cuts separated per separation round in the root node", &conshdlrdata->maxsepacutsroot, FALSE, DEFAULT_MAXSEPACUTSROOT, 0, INT_MAX, NULL, NULL) ); return SCIP_OKAY; }
/** creates the handler for xyz constraints and includes it in SCIP */ SCIP_RETCODE SCIPincludeConshdlrXyz( SCIP* scip /**< SCIP data structure */ ) { SCIP_CONSHDLRDATA* conshdlrdata; SCIP_CONSHDLR* conshdlr; /* create xyz constraint handler data */ conshdlrdata = NULL; /* TODO: (optional) create constraint handler specific data here */ conshdlr = NULL; /* include constraint handler */ #if 0 /* use SCIPincludeConshdlr() if you want to set all callbacks explicitly and realize (by getting compiler errors) when * new callbacks are added in future SCIP versions */ SCIP_CALL( SCIPincludeConshdlr(scip, CONSHDLR_NAME, CONSHDLR_DESC, CONSHDLR_SEPAPRIORITY, CONSHDLR_ENFOPRIORITY, CONSHDLR_CHECKPRIORITY, CONSHDLR_SEPAFREQ, CONSHDLR_PROPFREQ, CONSHDLR_EAGERFREQ, CONSHDLR_MAXPREROUNDS, CONSHDLR_DELAYSEPA, CONSHDLR_DELAYPROP, CONSHDLR_NEEDSCONS, CONSHDLR_PROP_TIMING, CONSHDLR_PRESOLTIMING, conshdlrCopyXyz, consFreeXyz, consInitXyz, consExitXyz, consInitpreXyz, consExitpreXyz, consInitsolXyz, consExitsolXyz, consDeleteXyz, consTransXyz, consInitlpXyz, consSepalpXyz, consSepasolXyz, consEnfolpXyz, consEnfopsXyz, consCheckXyz, consPropXyz, consPresolXyz, consRespropXyz, consLockXyz, consActiveXyz, consDeactiveXyz, consEnableXyz, consDisableXyz, consDelvarsXyz, consPrintXyz, consCopyXyz, consParseXyz, consGetVarsXyz, consGetNVarsXyz, consGetDiveBdChgsXyz, conshdlrdata) ); #else /* use SCIPincludeConshdlrBasic() plus setter functions if you want to set callbacks one-by-one and your code should * compile independent of new callbacks being added in future SCIP versions */ SCIP_CALL( SCIPincludeConshdlrBasic(scip, &conshdlr, CONSHDLR_NAME, CONSHDLR_DESC, CONSHDLR_ENFOPRIORITY, CONSHDLR_CHECKPRIORITY, CONSHDLR_EAGERFREQ, CONSHDLR_NEEDSCONS, consEnfolpXyz, consEnfopsXyz, consCheckXyz, consLockXyz, conshdlrdata) ); assert(conshdlr != NULL); /* set non-fundamental callbacks via specific setter functions */ SCIP_CALL( SCIPsetConshdlrActive(scip, conshdlr, consActiveXyz) ); SCIP_CALL( SCIPsetConshdlrCopy(scip, conshdlr, conshdlrCopyXyz, consCopyXyz) ); SCIP_CALL( SCIPsetConshdlrDeactive(scip, conshdlr, consDeactiveXyz) ); SCIP_CALL( SCIPsetConshdlrDelete(scip, conshdlr, consDeleteXyz) ); SCIP_CALL( SCIPsetConshdlrDelvars(scip, conshdlr, consDelvarsXyz) ); SCIP_CALL( SCIPsetConshdlrDisable(scip, conshdlr, consDisableXyz) ); SCIP_CALL( SCIPsetConshdlrEnable(scip, conshdlr, consEnableXyz) ); SCIP_CALL( SCIPsetConshdlrExit(scip, conshdlr, consExitXyz) ); SCIP_CALL( SCIPsetConshdlrExitpre(scip, conshdlr, consExitpreXyz) ); SCIP_CALL( SCIPsetConshdlrExitsol(scip, conshdlr, consExitsolXyz) ); SCIP_CALL( SCIPsetConshdlrFree(scip, conshdlr, consFreeXyz) ); SCIP_CALL( SCIPsetConshdlrGetDiveBdChgs(scip, conshdlr, consGetDiveBdChgsXyz) ); SCIP_CALL( SCIPsetConshdlrGetVars(scip, conshdlr, consGetVarsXyz) ); SCIP_CALL( SCIPsetConshdlrGetNVars(scip, conshdlr, consGetNVarsXyz) ); SCIP_CALL( SCIPsetConshdlrInit(scip, conshdlr, consInitXyz) ); SCIP_CALL( SCIPsetConshdlrInitpre(scip, conshdlr, consInitpreXyz) ); SCIP_CALL( SCIPsetConshdlrInitsol(scip, conshdlr, consInitsolXyz) ); SCIP_CALL( SCIPsetConshdlrInitlp(scip, conshdlr, consInitlpXyz) ); SCIP_CALL( SCIPsetConshdlrParse(scip, conshdlr, consParseXyz) ); SCIP_CALL( SCIPsetConshdlrPresol(scip, conshdlr, consPresolXyz, CONSHDLR_MAXPREROUNDS, CONSHDLR_PRESOLTIMING) ); SCIP_CALL( SCIPsetConshdlrPrint(scip, conshdlr, consPrintXyz) ); SCIP_CALL( SCIPsetConshdlrProp(scip, conshdlr, consPropXyz, CONSHDLR_PROPFREQ, CONSHDLR_DELAYPROP, CONSHDLR_PROP_TIMING) ); SCIP_CALL( SCIPsetConshdlrResprop(scip, conshdlr, consRespropXyz) ); SCIP_CALL( SCIPsetConshdlrSepa(scip, conshdlr, consSepalpXyz, consSepasolXyz, CONSHDLR_SEPAFREQ, CONSHDLR_SEPAPRIORITY, CONSHDLR_DELAYSEPA) ); SCIP_CALL( SCIPsetConshdlrTrans(scip, conshdlr, consTransXyz) ); #endif #ifdef LINCONSUPGD_PRIORITY if( SCIPfindConshdlr(scip,"linear") != NULL ) { /* include the linear constraint upgrade in the linear constraint handler */ SCIP_CALL( SCIPincludeLinconsUpgrade(scip, linconsUpgdXyz, LINCONSUPGD_PRIORITY, CONSHDLR_NAME) ); } #endif /* add xyz constraint handler parameters */ /* TODO: (optional) add constraint handler specific parameters with SCIPaddTypeParam() here */ return SCIP_OKAY; }