LNS heuristic that finds the optimal rounding to a given point.
Definition in file heur_rens.c.
#include <assert.h>
#include <string.h>
#include <stdio.h>
#include "scip/scip.h"
#include "scip/heur_rens.h"
#include "scip/scipdefplugins.h"
#include "scip/cons_linear.h"
#include "scip/pub_misc.h"
Go to the source code of this file.
Macros | |
#define | HEUR_NAME "rens" |
#define | HEUR_DESC "LNS exploring fractional neighborhood of relaxation's optimum" |
#define | HEUR_DISPCHAR 'E' |
#define | HEUR_PRIORITY -1100000 |
#define | HEUR_FREQ 0 |
#define | HEUR_FREQOFS 0 |
#define | HEUR_MAXDEPTH -1 |
#define | HEUR_TIMING SCIP_HEURTIMING_AFTERLPNODE |
#define | HEUR_USESSUBSCIP TRUE |
#define | DEFAULT_BINARYBOUNDS TRUE /* should general integers get binary bounds [floor(.),ceil(.)] ? */ |
#define | DEFAULT_MAXNODES 5000LL /* maximum number of nodes to regard in the subproblem */ |
#define | DEFAULT_MINFIXINGRATE 0.5 /* minimum percentage of integer variables that have to be fixed */ |
#define | DEFAULT_MINIMPROVE 0.01 /* factor by which RENS should at least improve the incumbent */ |
#define | DEFAULT_MINNODES 50LL /* minimum number of nodes to regard in the subproblem */ |
#define | DEFAULT_NODESOFS 500LL /* number of nodes added to the contingent of the total nodes */ |
#define | DEFAULT_NODESQUOT 0.1 /* subproblem nodes in relation to nodes of the original problem */ |
#define | DEFAULT_LPLIMFAC 2.0 /* factor by which the limit on the number of LP depends on the node limit */ |
#define | DEFAULT_STARTSOL 'l' /* solution that is used for fixing values */ |
#define | STARTSOL_CHOICES "nl" /* possible values for startsol ('l'p relaxation, 'n'lp relaxation) */ |
#define | DEFAULT_USELPROWS |
#define | DEFAULT_COPYCUTS |
#define | DEFAULT_EXTRATIME |
#define | DEFAULT_ADDALLSOLS FALSE /* should all subproblem solutions be added to the original SCIP? */ |
#define | DEFAULT_FULLSCALE |
#define | DEFAULT_BESTSOLLIMIT -1 /* limit on number of improving incumbent solutions in sub-CIP */ |
#define | DEFAULT_USEUCT FALSE /* should uct node selection be used at the beginning of the search? */ |
#define | EVENTHDLR_NAME "Rens" |
#define | EVENTHDLR_DESC "LP event handler for " HEUR_NAME " heuristic" |
Functions | |
static SCIP_RETCODE | computeFixingrate (SCIP *scip, SCIP_VAR **fixedvars, SCIP_Real *fixedvals, int *nfixedvars, int fixedvarssize, SCIP_Real minfixingrate, char *startsol, SCIP_Real *fixingrate, SCIP_Bool *success) |
static SCIP_RETCODE | restrictToBinaryBounds (SCIP *scip, SCIP *subscip, SCIP_VAR **subvars, char startsol) |
static SCIP_RETCODE | createNewSol (SCIP *scip, SCIP *subscip, SCIP_VAR **subvars, SCIP_HEUR *heur, SCIP_SOL *subsol, SCIP_Bool *success) |
static | SCIP_DECL_EVENTEXEC (eventExecRens) |
static SCIP_RETCODE | setupAndSolveSubscip (SCIP *scip, SCIP *subscip, SCIP_RESULT *result, SCIP_HEUR *heur, SCIP_VAR **fixedvars, SCIP_Real *fixedvals, int nfixedvars, SCIP_Real intfixingrate, SCIP_Real minfixingrate, SCIP_Real minimprove, SCIP_Longint maxnodes, SCIP_Longint nstallnodes, char startsol, SCIP_Bool binarybounds, SCIP_Bool uselprows) |
SCIP_RETCODE | SCIPapplyRens (SCIP *scip, SCIP_HEUR *heur, SCIP_RESULT *result, SCIP_Real minfixingrate, SCIP_Real minimprove, SCIP_Longint maxnodes, SCIP_Longint nstallnodes, char startsol, SCIP_Bool binarybounds, SCIP_Bool uselprows) |
static | SCIP_DECL_HEURCOPY (heurCopyRens) |
static | SCIP_DECL_HEURFREE (heurFreeRens) |
static | SCIP_DECL_HEURINIT (heurInitRens) |
static | SCIP_DECL_HEUREXEC (heurExecRens) |
SCIP_RETCODE | SCIPincludeHeurRens (SCIP *scip) |
#define HEUR_NAME "rens" |
Definition at line 33 of file heur_rens.c.
Referenced by SCIP_DECL_HEURCOPY(), SCIPincludeHeurRens(), and setupAndSolveSubscip().
#define HEUR_DESC "LNS exploring fractional neighborhood of relaxation's optimum" |
Definition at line 34 of file heur_rens.c.
Referenced by SCIPincludeHeurRens().
#define HEUR_DISPCHAR 'E' |
Definition at line 35 of file heur_rens.c.
Referenced by SCIPincludeHeurRens().
#define HEUR_PRIORITY -1100000 |
Definition at line 36 of file heur_rens.c.
Referenced by SCIPincludeHeurRens().
#define HEUR_FREQ 0 |
Definition at line 37 of file heur_rens.c.
Referenced by SCIPincludeHeurRens().
#define HEUR_FREQOFS 0 |
Definition at line 38 of file heur_rens.c.
Referenced by SCIPincludeHeurRens().
#define HEUR_MAXDEPTH -1 |
Definition at line 39 of file heur_rens.c.
Referenced by SCIPincludeHeurRens().
#define HEUR_TIMING SCIP_HEURTIMING_AFTERLPNODE |
Definition at line 40 of file heur_rens.c.
Referenced by SCIPincludeHeurRens().
#define HEUR_USESSUBSCIP TRUE |
does the heuristic use a secondary SCIP instance?
Definition at line 41 of file heur_rens.c.
Referenced by SCIPincludeHeurRens().
#define DEFAULT_BINARYBOUNDS TRUE /* should general integers get binary bounds [floor(.),ceil(.)] ? */ |
Definition at line 44 of file heur_rens.c.
Referenced by SCIPincludeHeurRens().
#define DEFAULT_MAXNODES 5000LL /* maximum number of nodes to regard in the subproblem */ |
Definition at line 45 of file heur_rens.c.
Referenced by SCIPincludeHeurRens().
#define DEFAULT_MINFIXINGRATE 0.5 /* minimum percentage of integer variables that have to be fixed */ |
Definition at line 46 of file heur_rens.c.
Referenced by SCIPincludeHeurRens().
#define DEFAULT_MINIMPROVE 0.01 /* factor by which RENS should at least improve the incumbent */ |
Definition at line 47 of file heur_rens.c.
Referenced by SCIPincludeHeurRens().
#define DEFAULT_MINNODES 50LL /* minimum number of nodes to regard in the subproblem */ |
Definition at line 48 of file heur_rens.c.
Referenced by SCIPincludeHeurRens().
#define DEFAULT_NODESOFS 500LL /* number of nodes added to the contingent of the total nodes */ |
Definition at line 49 of file heur_rens.c.
Referenced by SCIPincludeHeurRens().
#define DEFAULT_NODESQUOT 0.1 /* subproblem nodes in relation to nodes of the original problem */ |
Definition at line 50 of file heur_rens.c.
Referenced by SCIPincludeHeurRens().
#define DEFAULT_LPLIMFAC 2.0 /* factor by which the limit on the number of LP depends on the node limit */ |
Definition at line 51 of file heur_rens.c.
Referenced by SCIPincludeHeurRens().
#define DEFAULT_STARTSOL 'l' /* solution that is used for fixing values */ |
Definition at line 52 of file heur_rens.c.
Referenced by SCIPincludeHeurRens().
#define STARTSOL_CHOICES "nl" /* possible values for startsol ('l'p relaxation, 'n'lp relaxation) */ |
Definition at line 53 of file heur_rens.c.
Referenced by SCIPincludeHeurRens().
#define DEFAULT_USELPROWS |
Definition at line 54 of file heur_rens.c.
Referenced by SCIPincludeHeurRens().
#define DEFAULT_COPYCUTS |
Definition at line 56 of file heur_rens.c.
Referenced by SCIPincludeHeurRens().
#define DEFAULT_EXTRATIME |
Definition at line 59 of file heur_rens.c.
Referenced by SCIPincludeHeurRens().
#define DEFAULT_ADDALLSOLS FALSE /* should all subproblem solutions be added to the original SCIP? */ |
Definition at line 62 of file heur_rens.c.
Referenced by SCIPincludeHeurRens().
#define DEFAULT_FULLSCALE |
Definition at line 64 of file heur_rens.c.
Referenced by SCIPincludeHeurRens().
#define DEFAULT_BESTSOLLIMIT -1 /* limit on number of improving incumbent solutions in sub-CIP */ |
Definition at line 68 of file heur_rens.c.
Referenced by SCIPincludeHeurRens().
#define DEFAULT_USEUCT FALSE /* should uct node selection be used at the beginning of the search? */ |
Definition at line 69 of file heur_rens.c.
Referenced by SCIPincludeHeurRens().
#define EVENTHDLR_NAME "Rens" |
Definition at line 72 of file heur_rens.c.
Referenced by SCIP_DECL_EVENTEXEC(), and setupAndSolveSubscip().
#define EVENTHDLR_DESC "LP event handler for " HEUR_NAME " heuristic" |
Definition at line 73 of file heur_rens.c.
Referenced by setupAndSolveSubscip().
|
static |
compute the number of initial fixings and check whether the fixing rate exceeds the minimum fixing rate
scip | SCIP data structure |
fixedvars | array to store source SCIP variables whose copies should be fixed in the sub-SCIP |
fixedvals | array to store solution values for variable fixing |
nfixedvars | pointer to store the number of fixed variables |
fixedvarssize | size of the arrays to store fixing variables |
minfixingrate | percentage of integer variables that have to be fixed |
startsol | pointer to solution used for fixing values ('l'p relaxation, 'n'lp relaxation) |
fixingrate | percentage of integers that get actually fixed |
success | pointer to store whether minimum fixingrate is exceeded |
Definition at line 113 of file heur_rens.c.
References FALSE, MAX, SCIP_CALL, SCIP_NLPPAR_VERBLEVEL, SCIP_NLPSOLSTAT_FEASIBLE, SCIP_NLPSOLSTAT_GLOBOPT, SCIP_NLPSOLSTAT_LOCOPT, SCIP_OKAY, SCIP_Real, SCIPdebug, SCIPdebugMsg, SCIPfloor(), SCIPgetNLPIntPar(), SCIPgetNLPSolstat(), SCIPgetVarsData(), SCIPisFeasIntegral(), SCIPisNLPConstructed(), SCIPsetNLPInitialGuessSol(), SCIPsetNLPIntPar(), SCIPsolveNLP(), SCIPvarGetLPSol(), SCIPvarGetNLPSol(), and TRUE.
Referenced by SCIPapplyRens().
|
static |
fixes bounds of unfixed integer variables to binary bounds
scip | original SCIP data structure |
subscip | SCIP data structure for the subproblem |
subvars | the variables of the subproblem |
startsol | solution used for fixing values ('l'p relaxation, 'n'lp relaxation) |
Definition at line 226 of file heur_rens.c.
References SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPchgVarLbGlobal(), SCIPchgVarUbGlobal(), SCIPfeasCeil(), SCIPfeasFloor(), SCIPfloor(), SCIPgetVarsData(), SCIPisFeasEQ(), SCIPisFeasIntegral(), SCIPvarGetLbGlobal(), SCIPvarGetLPSol(), SCIPvarGetNLPSol(), and SCIPvarGetUbGlobal().
Referenced by setupAndSolveSubscip().
|
static |
creates a new solution for the original problem by copying the solution of the subproblem
scip | original SCIP data structure |
subscip | SCIP structure of the subproblem |
subvars | the variables of the subproblem |
heur | RENS heuristic structure |
subsol | solution of the subproblem |
success | used to store whether new solution was found or not |
Definition at line 285 of file heur_rens.c.
References FALSE, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPallocBufferArray, SCIPcreateSol(), SCIPfreeBufferArray, SCIPgetNOrigVars(), SCIPgetSolVals(), SCIPgetVarsData(), SCIPsetSolVals(), SCIPtrySolFree(), and TRUE.
Referenced by setupAndSolveSubscip().
|
static |
Definition at line 336 of file heur_rens.c.
References EVENTHDLR_NAME, SCIP_CALL, SCIP_EVENTTYPE_LPSOLVED, SCIP_OKAY, SCIPdebugMsg, SCIPeventGetType(), SCIPeventhdlrGetName(), SCIPgetNLPs(), and SCIPinterruptSolve().
|
static |
setup and solve the RENS sub-SCIP
< number of original problem's variables
scip | SCIP data structure |
subscip | sub SCIP data structure |
result | result pointer |
heur | heuristic data structure |
fixedvars | array of variables that should be fixed |
fixedvals | array of fixing values |
nfixedvars | number of variables that should be fixed |
intfixingrate | percentage of integer variables fixed |
minfixingrate | minimum percentage of integer variables that have to be fixed |
minimprove | factor by which RENS should at least improve the incumbent |
maxnodes | maximum number of nodes for the subproblem |
nstallnodes | number of stalling nodes for the subproblem |
startsol | solution used for fixing values ('l'p relaxation, 'n'lp relaxation) |
binarybounds | should general integers get binary bounds [floor(.),ceil(.)]? |
uselprows | should subproblem be created out of the rows in the LP rows? |
Definition at line 361 of file heur_rens.c.
References createNewSol(), EVENTHDLR_DESC, EVENTHDLR_NAME, FALSE, HEUR_NAME, MAX, restrictToBinaryBounds(), SCIP_Bool, SCIP_CALL, SCIP_EVENTTYPE_LPSOLVED, SCIP_FOUNDSOL, SCIP_OKAY, SCIP_PARAMSETTING_FAST, SCIP_PARAMSETTING_OFF, SCIP_PLUGINNOTFOUND, SCIP_Real, SCIPABORT, SCIPallocBufferArray, SCIPblkmem(), SCIPcatchEvent(), SCIPcopyLargeNeighborhoodSearch(), SCIPcopyLimits(), SCIPdebug, SCIPdebugMsg, SCIPdropEvent(), SCIPerrorMessage, SCIPfindBranchrule(), SCIPfindConshdlr(), SCIPfindNodesel(), SCIPfreeBufferArray, SCIPgetBestSol(), SCIPgetLowerbound(), SCIPgetNConss(), SCIPgetNNodes(), SCIPgetNOrigVars(), SCIPgetNSols(), SCIPgetNVars(), SCIPgetPrimalbound(), SCIPgetSols(), SCIPgetSolvingTime(), SCIPgetUpperbound(), SCIPgetVarsData(), SCIPhashmapCreate(), SCIPhashmapFree(), SCIPhashmapGetImage(), SCIPheurGetData(), SCIPincludeEventhdlrBasic(), SCIPinfinity(), SCIPisInfinity(), SCIPisParamFixed(), SCIPmergeVariableStatistics(), SCIPpresolve(), SCIPprintStatistics(), SCIPsetBoolParam(), SCIPsetCharParam(), SCIPsetIntParam(), SCIPsetLongintParam(), SCIPsetObjlimit(), SCIPsetPresolving(), SCIPsetSeparating(), SCIPsetSubscipsOff(), SCIPsolGetNodenum(), SCIPsolve(), SCIPstatisticPrintf, SCIPsumepsilon(), SCIPtransformProb(), SCIPwarningMessage(), and TRUE.
Referenced by SCIPapplyRens().
|
static |
copy method for primal heuristic plugins (called when SCIP copies plugins)
Definition at line 724 of file heur_rens.c.
References HEUR_NAME, SCIP_CALL, SCIP_OKAY, SCIPheurGetName(), and SCIPincludeHeurRens().
|
static |
destructor of primal heuristic to free user data (called when SCIP is exiting)
Definition at line 738 of file heur_rens.c.
References SCIP_OKAY, SCIPfreeBlockMemory, SCIPheurGetData(), and SCIPheurSetData().
|
static |
initialization method of primal heuristic (called after problem was transformed)
Definition at line 758 of file heur_rens.c.
References SCIP_OKAY, and SCIPheurGetData().
|
static |
execution method of primal heuristic
Definition at line 778 of file heur_rens.c.
References SCIP_CALL, SCIP_DELAYED, SCIP_DIDNOTRUN, SCIP_Longint, SCIP_LPSOLSTAT_OPTIMAL, SCIP_OKAY, SCIPapplyRens(), SCIPdebugMsg, SCIPgetCutoffbound(), SCIPgetLPObjval(), SCIPgetLPSolstat(), SCIPgetNLPBranchCands(), SCIPgetNNlpis(), SCIPgetNNodes(), SCIPhasCurrentNodeLP(), SCIPheurGetData(), SCIPheurGetNBestSolsFound(), SCIPheurGetNCalls(), SCIPisGE(), and SCIPisStopped().