/** creates the primal heuristic for the given primal heuristic object and includes it in SCIP */ SCIP_RETCODE SCIPincludeObjHeur( SCIP* scip, /**< SCIP data structure */ scip::ObjHeur* objheur, /**< primal heuristic object */ SCIP_Bool deleteobject /**< should the primal heuristic object be deleted when heuristic is freed? */ ) { SCIP_HEURDATA* heurdata; assert(scip != NULL); assert(objheur != NULL); /* create primal heuristic data */ heurdata = new SCIP_HEURDATA; heurdata->objheur = objheur; heurdata->deleteobject = deleteobject; /* include primal heuristic */ SCIP_CALL( SCIPincludeHeur(scip, objheur->scip_name_, objheur->scip_desc_, objheur->scip_dispchar_, objheur->scip_priority_, objheur->scip_freq_, objheur->scip_freqofs_, objheur->scip_maxdepth_, objheur->scip_timingmask_, objheur->scip_usessubscip_, heurCopyObj, heurFreeObj, heurInitObj, heurExitObj, heurInitsolObj, heurExitsolObj, heurExecObj, heurdata) ); /*lint !e429*/ return SCIP_OKAY; /*lint !e429*/ }
/** creates RENS primal heuristic and includes it in SCIP */ SCIP_RETCODE SCIPincludeHeurGcgrens( SCIP* scip /**< SCIP data structure */ ) { SCIP_HEURDATA* heurdata; /* create heuristic data */ SCIP_CALL( SCIPallocMemory(scip, &heurdata) ); /* include primal heuristic */ SCIP_CALL( SCIPincludeHeur(scip, HEUR_NAME, HEUR_DESC, HEUR_DISPCHAR, HEUR_PRIORITY, HEUR_FREQ, HEUR_FREQOFS, HEUR_MAXDEPTH, HEUR_TIMING, HEUR_USESSUBSCIP, heurCopyGcgrens, heurFreeGcgrens, heurInitGcgrens, heurExitGcgrens, heurInitsolGcgrens, heurExitsolGcgrens, heurExecGcgrens, heurdata) ); /* add rens primal heuristic parameters */ SCIP_CALL( SCIPaddRealParam(scip, "heuristics/"HEUR_NAME"/minfixingrate", "minimum percentage of integer variables that have to be fixable", &heurdata->minfixingrate, FALSE, DEFAULT_MINFIXINGRATE, 0.0, 1.0, NULL, NULL) ); SCIP_CALL( SCIPaddLongintParam(scip, "heuristics/"HEUR_NAME"/maxnodes", "maximum number of nodes to regard in the subproblem", &heurdata->maxnodes, TRUE,DEFAULT_MAXNODES, 0LL, SCIP_LONGINT_MAX, NULL, NULL) ); SCIP_CALL( SCIPaddLongintParam(scip, "heuristics/"HEUR_NAME"/nodesofs", "number of nodes added to the contingent of the total nodes", &heurdata->nodesofs, FALSE, DEFAULT_NODESOFS, 0LL, SCIP_LONGINT_MAX, NULL, NULL) ); SCIP_CALL( SCIPaddLongintParam(scip, "heuristics/"HEUR_NAME"/minnodes", "minimum number of nodes required to start the subproblem", &heurdata->minnodes, TRUE, DEFAULT_MINNODES, 0LL, SCIP_LONGINT_MAX, NULL, NULL) ); SCIP_CALL( SCIPaddRealParam(scip, "heuristics/"HEUR_NAME"/nodesquot", "contingent of sub problem nodes in relation to the number of nodes of the original problem", &heurdata->nodesquot, FALSE, DEFAULT_NODESQUOT, 0.0, 1.0, NULL, NULL) ); SCIP_CALL( SCIPaddRealParam(scip, "heuristics/"HEUR_NAME"/minimprove", "factor by which RENS should at least improve the incumbent", &heurdata->minimprove, TRUE, DEFAULT_MINIMPROVE, 0.0, 1.0, NULL, NULL) ); SCIP_CALL( SCIPaddBoolParam(scip, "heuristics/"HEUR_NAME"/binarybounds", "should general integers get binary bounds [floor(.),ceil(.)] ?", &heurdata->binarybounds, TRUE, DEFAULT_BINARYBOUNDS, NULL, NULL) ); SCIP_CALL( SCIPaddBoolParam(scip, "heuristics/"HEUR_NAME"/uselprows", "should subproblem be created out of the rows in the LP rows?", &heurdata->uselprows, TRUE, DEFAULT_USELPROWS, NULL, NULL) ); SCIP_CALL( SCIPaddBoolParam(scip, "heuristics/"HEUR_NAME"/copycuts", "if uselprows == FALSE, should all active cuts from cutpool be copied to constraints in subproblem?", &heurdata->copycuts, TRUE, DEFAULT_COPYCUTS, NULL, NULL) ); return SCIP_OKAY; }
/** creates the simple rounding heuristic and includes it in SCIP */ SCIP_RETCODE SCIPincludeHeurSimplerounding( SCIP* scip /**< SCIP data structure */ ) { /* include heuristic */ SCIP_CALL( SCIPincludeHeur(scip, HEUR_NAME, HEUR_DESC, HEUR_DISPCHAR, HEUR_PRIORITY, HEUR_FREQ, HEUR_FREQOFS, HEUR_MAXDEPTH, HEUR_TIMING, HEUR_USESSUBSCIP, heurCopySimplerounding, heurFreeSimplerounding, heurInitSimplerounding, heurExitSimplerounding, heurInitsolSimplerounding, heurExitsolSimplerounding, heurExecSimplerounding, NULL) ); return SCIP_OKAY; }
/** creates the objpscostdiving heuristic and includes it in SCIP */ SCIP_RETCODE SCIPincludeHeurObjpscostdiving( SCIP* scip /**< SCIP data structure */ ) { SCIP_HEURDATA* heurdata; /* create heuristic data */ SCIP_CALL( SCIPallocMemory(scip, &heurdata) ); /* include heuristic */ SCIP_CALL( SCIPincludeHeur(scip, HEUR_NAME, HEUR_DESC, HEUR_DISPCHAR, HEUR_PRIORITY, HEUR_FREQ, HEUR_FREQOFS, HEUR_MAXDEPTH, HEUR_TIMING, HEUR_USESSUBSCIP, heurCopyObjpscostdiving, heurFreeObjpscostdiving, heurInitObjpscostdiving, heurExitObjpscostdiving, heurInitsolObjpscostdiving, heurExitsolObjpscostdiving, heurExecObjpscostdiving, heurdata) ); /* objpscostdiving heuristic parameters */ SCIP_CALL( SCIPaddRealParam(scip, "heuristics/objpscostdiving/minreldepth", "minimal relative depth to start diving", &heurdata->minreldepth, TRUE, DEFAULT_MINRELDEPTH, 0.0, 1.0, NULL, NULL) ); SCIP_CALL( SCIPaddRealParam(scip, "heuristics/objpscostdiving/maxreldepth", "maximal relative depth to start diving", &heurdata->maxreldepth, TRUE, DEFAULT_MAXRELDEPTH, 0.0, 1.0, NULL, NULL) ); SCIP_CALL( SCIPaddRealParam(scip, "heuristics/objpscostdiving/maxlpiterquot", "maximal fraction of diving LP iterations compared to total iteration number", &heurdata->maxlpiterquot, FALSE, DEFAULT_MAXLPITERQUOT, 0.0, 1.0, NULL, NULL) ); SCIP_CALL( SCIPaddIntParam(scip, "heuristics/objpscostdiving/maxlpiterofs", "additional number of allowed LP iterations", &heurdata->maxlpiterofs, FALSE, DEFAULT_MAXLPITEROFS, 0, INT_MAX, NULL, NULL) ); SCIP_CALL( SCIPaddIntParam(scip, "heuristics/objpscostdiving/maxsols", "total number of feasible solutions found up to which heuristic is called (-1: no limit)", &heurdata->maxsols, TRUE, DEFAULT_MAXSOLS, -1, INT_MAX, NULL, NULL) ); SCIP_CALL( SCIPaddRealParam(scip, "heuristics/objpscostdiving/depthfac", "maximal diving depth: number of binary/integer variables times depthfac", &heurdata->depthfac, TRUE, DEFAULT_DEPTHFAC, 0.0, SCIP_REAL_MAX, NULL, NULL) ); SCIP_CALL( SCIPaddRealParam(scip, "heuristics/objpscostdiving/depthfacnosol", "maximal diving depth factor if no feasible solution was found yet", &heurdata->depthfacnosol, TRUE, DEFAULT_DEPTHFACNOSOL, 0.0, SCIP_REAL_MAX, NULL, NULL) ); return SCIP_OKAY; }