/** creates the redcost propagator and includes it in SCIP */ SCIP_RETCODE SCIPincludePropRedcost( SCIP* scip /**< SCIP data structure */ ) { SCIP_PROPDATA* propdata; SCIP_PROP* prop; /* create redcost propagator data */ SCIP_CALL( SCIPallocMemory(scip, &propdata) ); /* include propagator */ SCIP_CALL( SCIPincludePropBasic(scip, &prop, PROP_NAME, PROP_DESC, PROP_PRIORITY, PROP_FREQ, PROP_DELAY, PROP_TIMING, propExecRedcost, propdata) ); assert(prop != NULL); /* set optional callbacks via setter functions */ SCIP_CALL( SCIPsetPropCopy(scip, prop, propCopyRedcost) ); SCIP_CALL( SCIPsetPropInitsol(scip, prop, propInitsolRedcost) ); SCIP_CALL( SCIPsetPropFree(scip, prop, propFreeRedcost) ); /* add redcost propagator parameters */ SCIP_CALL( SCIPaddBoolParam(scip, "propagating/"PROP_NAME"/continuous", "should reduced cost fixing be also applied to continuous variables?", &propdata->continuous, FALSE, DEFAULT_CONTINUOUS, NULL, NULL) ); SCIP_CALL( SCIPaddBoolParam(scip, "propagating/"PROP_NAME"/useimplics", "should implications be used to strength the reduced cost for binary variables?", &propdata->useimplics, FALSE, DEFAULT_USEIMPLICS, NULL, NULL) ); return SCIP_OKAY; }
/** creates the xyz propagator and includes it in SCIP */ SCIP_RETCODE SCIPincludePropXyz( SCIP* scip /**< SCIP data structure */ ) { SCIP_PROPDATA* propdata; SCIP_PROP* prop; /* create xyz propagator data */ propdata = NULL; /* TODO: (optional) create propagator specific data here */ prop = NULL; /* include propagator */ #if 0 /* use SCIPincludeProp() 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( SCIPincludeProp(scip, PROP_NAME, PROP_DESC, PROP_PRIORITY, PROP_FREQ, PROP_DELAY, PROP_TIMING, PROP_PRESOL_PRIORITY, PROP_PRESOL_MAXROUNDS, PROP_PRESOL_DELAY, propCopyXyz, propFreeXyz, propInitXyz, propExitXyz, propInitpreXyz, propExitpreXyz, propInitsolXyz, propExitsolXyz, propPresolXyz, propExecXyz, propRespropXyz, propdata) ); #else /* use SCIPincludePropBasic() 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( SCIPincludePropBasic(scip, &prop, PROP_NAME, PROP_DESC, PROP_PRIORITY, PROP_FREQ, PROP_DELAY, PROP_TIMING, propExecXyz, propdata) ); assert(prop != NULL); /* set optional callbacks via setter functions */ SCIP_CALL( SCIPsetPropCopy(scip, prop, propCopyXyz) ); SCIP_CALL( SCIPsetPropFree(scip, prop, propFreeXyz) ); SCIP_CALL( SCIPsetPropInit(scip, prop, propInitXyz) ); SCIP_CALL( SCIPsetPropExit(scip, prop, propExitXyz) ); SCIP_CALL( SCIPsetPropInitsol(scip, prop, propInitsolXyz) ); SCIP_CALL( SCIPsetPropExitsol(scip, prop, propExitsolXyz) ); SCIP_CALL( SCIPsetPropInitpre(scip, prop, propInitpreXyz) ); SCIP_CALL( SCIPsetPropExitpre(scip, prop, propExitpreXyz) ); SCIP_CALL( SCIPsetPropPresol(scip, prop, propPresolXyz, PROP_PRESOL_PRIORITY, PROP_PRESOL_MAXROUNDS, PROP_PRESOL_DELAY) ); SCIP_CALL( SCIPsetPropResprop(scip, prop, propRespropXyz) ); #endif /* add xyz propagator parameters */ /* TODO: (optional) add propagator specific parameters with SCIPaddTypeParam() here */ return SCIP_OKAY; }
/** creates the dual fixing propagator and includes it in SCIP */ SCIP_RETCODE SCIPincludePropDualfix( SCIP* scip /**< SCIP data structure */ ) { SCIP_PROPDATA* propdata; SCIP_PROP* prop; /* create dualfix propagator data */ propdata = NULL; /* include propagator */ SCIP_CALL( SCIPincludePropBasic(scip, &prop, PROP_NAME, PROP_DESC, PROP_PRIORITY, PROP_FREQ, PROP_DELAY, PROP_TIMING, propExecDualfix, propdata) ); assert(prop != NULL); SCIP_CALL( SCIPsetPropCopy(scip, prop, propCopyDualfix) ); SCIP_CALL( SCIPsetPropPresol(scip, prop, propPresolDualfix, PROP_PRESOL_PRIORITY, PROP_PRESOL_MAXROUNDS, PROP_PRESOLTIMING) ); return SCIP_OKAY; }