Detailed Description
methods for Benders' decomposition
Definition in file benders.c.
#include <assert.h>
#include <string.h>
#include "scip/def.h"
#include "scip/set.h"
#include "scip/clock.h"
#include "scip/paramset.h"
#include "scip/lp.h"
#include "scip/prob.h"
#include "scip/pricestore.h"
#include "scip/scip.h"
#include "scip/benders.h"
#include "scip/pub_message.h"
#include "scip/pub_misc.h"
#include "scip/cons_linear.h"
#include "scip/struct_benders.h"
#include "scip/struct_benderscut.h"
#include "scip/benderscut.h"
Go to the source code of this file.
Macros | |
#define | SCIP_DEFAULT_TRANSFERCUTS TRUE /** should Benders' cuts generated in LNS heuristics be transferred to the main SCIP instance? */ |
#define | SCIP_DEFAULT_CUTSASCONSS TRUE /** should the transferred cuts be added as constraints? */ |
#define | SCIP_DEFAULT_LNSCHECK TRUE /** should the Benders' decomposition be used in LNS heuristics */ |
#define | SCIP_DEFAULT_LNSMAXDEPTH -1 /** maximum depth at which the LNS check is performed */ |
#define | SCIP_DEFAULT_SUBPROBFRAC 1.0 /** fraction of subproblems that are solved in each iteration */ |
#define | SCIP_DEFAULT_UPDATEAUXVARBOUND TRUE /** should the auxiliary variable lower bound be updated by solving the subproblem */ |
#define | BENDERS_MAXPSEUDOSOLS |
#define | AUXILIARYVAR_NAME "##bendersauxiliaryvar" /** the name for the Benders' auxiliary variables in the master problem */ |
#define | NODEFOCUS_EVENTHDLR_NAME "bendersnodefocus" |
#define | NODEFOCUS_EVENTHDLR_DESC "node focus event handler for Benders' decomposition" |
#define | MIPNODEFOCUS_EVENTHDLR_NAME "bendersmipsolvenodefocus" |
#define | MIPNODEFOCUS_EVENTHDLR_DESC "node focus event handler for the MIP solve method for Benders' decomposition" |
#define | UPPERBOUND_EVENTHDLR_NAME "bendersupperbound" |
#define | UPPERBOUND_EVENTHDLR_DESC "found solution event handler to terminate subproblem solve for a given upper bound" |
#define | NODESOLVED_EVENTHDLR_NAME "bendersnodesolved" |
#define | NODESOLVED_EVENTHDLR_DESC "node solved event handler for the Benders' integer cuts" |
Macro Definition Documentation
◆ SCIP_DEFAULT_TRANSFERCUTS
#define SCIP_DEFAULT_TRANSFERCUTS TRUE /** should Benders' cuts generated in LNS heuristics be transferred to the main SCIP instance? */ |
Definition at line 45 of file benders.c.
Referenced by doBendersCreate().
◆ SCIP_DEFAULT_CUTSASCONSS
#define SCIP_DEFAULT_CUTSASCONSS TRUE /** should the transferred cuts be added as constraints? */ |
Definition at line 46 of file benders.c.
Referenced by doBendersCreate().
◆ SCIP_DEFAULT_LNSCHECK
#define SCIP_DEFAULT_LNSCHECK TRUE /** should the Benders' decomposition be used in LNS heuristics */ |
Definition at line 47 of file benders.c.
Referenced by doBendersCreate().
◆ SCIP_DEFAULT_LNSMAXDEPTH
#define SCIP_DEFAULT_LNSMAXDEPTH -1 /** maximum depth at which the LNS check is performed */ |
Definition at line 48 of file benders.c.
Referenced by doBendersCreate().
◆ SCIP_DEFAULT_SUBPROBFRAC
#define SCIP_DEFAULT_SUBPROBFRAC 1.0 /** fraction of subproblems that are solved in each iteration */ |
Definition at line 49 of file benders.c.
Referenced by doBendersCreate().
◆ SCIP_DEFAULT_UPDATEAUXVARBOUND
#define SCIP_DEFAULT_UPDATEAUXVARBOUND TRUE /** should the auxiliary variable lower bound be updated by solving the subproblem */ |
Definition at line 50 of file benders.c.
Referenced by doBendersCreate().
◆ BENDERS_MAXPSEUDOSOLS
#define BENDERS_MAXPSEUDOSOLS |
Definition at line 52 of file benders.c.
Referenced by SCIPbendersExec().
◆ AUXILIARYVAR_NAME
#define AUXILIARYVAR_NAME "##bendersauxiliaryvar" /** the name for the Benders' auxiliary variables in the master problem */ |
Definition at line 55 of file benders.c.
Referenced by addAuxiliaryVariablesToMaster(), assignAuxiliaryVariables(), and SCIPbendersGetVar().
◆ NODEFOCUS_EVENTHDLR_NAME
#define NODEFOCUS_EVENTHDLR_NAME "bendersnodefocus" |
Definition at line 58 of file benders.c.
Referenced by initialiseLPSubproblem(), SCIP_DECL_EVENTEXEC(), SCIP_DECL_EVENTEXIT(), SCIP_DECL_EVENTEXITSOL(), SCIP_DECL_EVENTFREE(), and SCIP_DECL_EVENTINITSOL().
◆ NODEFOCUS_EVENTHDLR_DESC
#define NODEFOCUS_EVENTHDLR_DESC "node focus event handler for Benders' decomposition" |
Definition at line 59 of file benders.c.
Referenced by initialiseLPSubproblem().
◆ MIPNODEFOCUS_EVENTHDLR_NAME
#define MIPNODEFOCUS_EVENTHDLR_NAME "bendersmipsolvenodefocus" |
Definition at line 61 of file benders.c.
Referenced by createSubproblems(), SCIP_DECL_EVENTEXEC(), SCIP_DECL_EVENTEXIT(), SCIP_DECL_EVENTEXITSOL(), SCIP_DECL_EVENTFREE(), SCIP_DECL_EVENTINITSOL(), SCIPbendersComputeSubproblemLowerbound(), and SCIPbendersSolveSubproblemCIP().
◆ MIPNODEFOCUS_EVENTHDLR_DESC
#define MIPNODEFOCUS_EVENTHDLR_DESC "node focus event handler for the MIP solve method for Benders' decomposition" |
Definition at line 62 of file benders.c.
Referenced by createSubproblems().
◆ UPPERBOUND_EVENTHDLR_NAME
#define UPPERBOUND_EVENTHDLR_NAME "bendersupperbound" |
Definition at line 64 of file benders.c.
Referenced by createSubproblems(), SCIP_DECL_EVENTEXEC(), SCIP_DECL_EVENTEXIT(), SCIP_DECL_EVENTEXITSOL(), SCIP_DECL_EVENTFREE(), SCIP_DECL_EVENTINITSOL(), and updateEventhdlrUpperbound().
◆ UPPERBOUND_EVENTHDLR_DESC
#define UPPERBOUND_EVENTHDLR_DESC "found solution event handler to terminate subproblem solve for a given upper bound" |
Definition at line 65 of file benders.c.
Referenced by createSubproblems().
◆ NODESOLVED_EVENTHDLR_NAME
#define NODESOLVED_EVENTHDLR_NAME "bendersnodesolved" |
Definition at line 67 of file benders.c.
Referenced by SCIP_DECL_EVENTEXEC(), SCIP_DECL_EVENTINITSOL(), and SCIPbendersActivate().
◆ NODESOLVED_EVENTHDLR_DESC
#define NODESOLVED_EVENTHDLR_DESC "node solved event handler for the Benders' integer cuts" |
Definition at line 68 of file benders.c.
Referenced by SCIPbendersActivate().
Function Documentation
◆ initEventhandlerData()
|
static |
initialises the members of the eventhandler data
- Parameters
-
scip the SCIP data structure eventhdlrdata the event handler data
Definition at line 85 of file benders.c.
References FALSE, NULL, SCIP_OKAY, and SCIPinfinity().
Referenced by createSubproblems(), exitEventhandler(), and initialiseLPSubproblem().
◆ initsolEventhandler()
|
static |
initsol method for the event handlers
- Parameters
-
scip the SCIP data structure eventhdlr the event handlers data structure eventtype event type mask to select events to catch
Definition at line 103 of file benders.c.
References NULL, SCIP_CALL, SCIP_OKAY, SCIPcatchEvent(), and SCIPeventhdlrGetData().
Referenced by SCIP_DECL_EVENTINITSOL().
◆ exitsolEventhandler()
|
static |
the exit sol method for the event handlers
- Parameters
-
scip the SCIP data structure eventhdlr the event handlers data structure eventtype event type mask to select events to catch
Definition at line 123 of file benders.c.
References NULL, SCIP_CALL, SCIP_OKAY, SCIPdropEvent(), and SCIPeventhdlrGetData().
Referenced by SCIP_DECL_EVENTEXITSOL().
◆ exitEventhandler()
|
static |
the exit method for the event handlers
- Parameters
-
scip the SCIP data structure eventhdlr the event handlers data structure
Definition at line 147 of file benders.c.
References initEventhandlerData(), NULL, SCIP_CALL, SCIP_OKAY, and SCIPeventhdlrGetData().
Referenced by SCIP_DECL_EVENTEXIT().
◆ freeEventhandler()
|
static |
free method for the event handler
- Parameters
-
scip the SCIP data structure eventhdlr the event handlers data structure
Definition at line 167 of file benders.c.
References NULL, SCIP_OKAY, SCIPeventhdlrGetData(), SCIPeventhdlrSetData(), and SCIPfreeBlockMemory.
Referenced by SCIP_DECL_EVENTFREE().
◆ SCIP_DECL_EVENTEXEC() [1/4]
|
static |
exec the event handler
Definition at line 193 of file benders.c.
References NODEFOCUS_EVENTHDLR_NAME, NULL, SCIP_CALL, SCIP_EVENTTYPE_NODEFOCUSED, SCIP_OKAY, SCIPdropEvent(), SCIPeventhdlrGetData(), SCIPeventhdlrGetName(), and SCIPinterruptSolve().
◆ SCIP_DECL_EVENTINITSOL() [1/4]
|
static |
solving process initialization method of event handler (called when branch and bound process is about to begin)
Definition at line 215 of file benders.c.
References initsolEventhandler(), NODEFOCUS_EVENTHDLR_NAME, NULL, SCIP_CALL, SCIP_EVENTTYPE_NODEFOCUSED, SCIP_OKAY, and SCIPeventhdlrGetName().
◆ SCIP_DECL_EVENTEXITSOL() [1/3]
|
static |
solving process deinitialization method of event handler (called before branch and bound process data is freed)
Definition at line 228 of file benders.c.
References exitsolEventhandler(), NODEFOCUS_EVENTHDLR_NAME, NULL, SCIP_CALL, SCIP_EVENTTYPE_NODEFOCUSED, SCIP_OKAY, and SCIPeventhdlrGetName().
◆ SCIP_DECL_EVENTEXIT() [1/3]
|
static |
deinitialization method of event handler (called before transformed problem is freed)
Definition at line 241 of file benders.c.
References exitEventhandler(), NODEFOCUS_EVENTHDLR_NAME, NULL, SCIP_CALL, SCIP_OKAY, and SCIPeventhdlrGetName().
◆ SCIP_DECL_EVENTFREE() [1/3]
|
static |
deinitialization method of event handler (called before transformed problem is freed)
Definition at line 254 of file benders.c.
References freeEventhandler(), NODEFOCUS_EVENTHDLR_NAME, NULL, SCIP_CALL, SCIP_OKAY, and SCIPeventhdlrGetName().
◆ SCIP_DECL_EVENTEXEC() [2/4]
|
static |
exec the event handler
Definition at line 270 of file benders.c.
References MIPNODEFOCUS_EVENTHDLR_NAME, NULL, SCIP_CALL, SCIP_EVENTTYPE_NODEFOCUSED, SCIP_OKAY, SCIPdropEvent(), SCIPeventhdlrGetData(), SCIPeventhdlrGetName(), and SCIPinterruptSolve().
◆ SCIP_DECL_EVENTINITSOL() [2/4]
|
static |
solving process initialization method of event handler (called when branch and bound process is about to begin)
Definition at line 296 of file benders.c.
References initsolEventhandler(), MIPNODEFOCUS_EVENTHDLR_NAME, NULL, SCIP_CALL, SCIP_EVENTTYPE_NODEFOCUSED, SCIP_OKAY, and SCIPeventhdlrGetName().
◆ SCIP_DECL_EVENTEXITSOL() [2/3]
|
static |
solving process deinitialization method of event handler (called before branch and bound process data is freed)
Definition at line 309 of file benders.c.
References exitsolEventhandler(), MIPNODEFOCUS_EVENTHDLR_NAME, NULL, SCIP_CALL, SCIP_EVENTTYPE_NODEFOCUSED, SCIP_OKAY, and SCIPeventhdlrGetName().
◆ SCIP_DECL_EVENTEXIT() [2/3]
|
static |
deinitialization method of event handler (called before transformed problem is freed)
Definition at line 322 of file benders.c.
References exitEventhandler(), MIPNODEFOCUS_EVENTHDLR_NAME, NULL, SCIP_CALL, SCIP_OKAY, and SCIPeventhdlrGetName().
◆ SCIP_DECL_EVENTFREE() [2/3]
|
static |
deinitialization method of event handler (called before transformed problem is freed)
Definition at line 335 of file benders.c.
References freeEventhandler(), MIPNODEFOCUS_EVENTHDLR_NAME, NULL, SCIP_CALL, SCIP_OKAY, and SCIPeventhdlrGetName().
◆ SCIP_DECL_EVENTEXEC() [3/4]
|
static |
exec the event handler
Definition at line 350 of file benders.c.
References NULL, SCIP_CALL, SCIP_OKAY, SCIPeventhdlrGetData(), SCIPeventhdlrGetName(), SCIPgetBestSol(), SCIPgetObjsense(), SCIPgetSolOrigObj(), SCIPinterruptSolve(), SCIPisLT(), and UPPERBOUND_EVENTHDLR_NAME.
◆ SCIP_DECL_EVENTINITSOL() [3/4]
|
static |
solving process initialization method of event handler (called when branch and bound process is about to begin)
Definition at line 374 of file benders.c.
References initsolEventhandler(), NULL, SCIP_CALL, SCIP_EVENTTYPE_BESTSOLFOUND, SCIP_OKAY, SCIPeventhdlrGetName(), and UPPERBOUND_EVENTHDLR_NAME.
◆ SCIP_DECL_EVENTEXITSOL() [3/3]
|
static |
solving process deinitialization method of event handler (called before branch and bound process data is freed)
Definition at line 387 of file benders.c.
References exitsolEventhandler(), NULL, SCIP_CALL, SCIP_EVENTTYPE_BESTSOLFOUND, SCIP_OKAY, SCIPeventhdlrGetName(), and UPPERBOUND_EVENTHDLR_NAME.
◆ SCIP_DECL_EVENTEXIT() [3/3]
|
static |
deinitialization method of event handler (called before transformed problem is freed)
Definition at line 400 of file benders.c.
References exitEventhandler(), NULL, SCIP_CALL, SCIP_OKAY, SCIPeventhdlrGetName(), and UPPERBOUND_EVENTHDLR_NAME.
◆ SCIP_DECL_EVENTFREE() [3/3]
|
static |
deinitialization method of event handler (called before transformed problem is freed)
Definition at line 413 of file benders.c.
References freeEventhandler(), NULL, SCIP_CALL, SCIP_OKAY, SCIPeventhdlrGetName(), and UPPERBOUND_EVENTHDLR_NAME.
◆ updateEventhdlrUpperbound()
|
static |
updates the upper bound in the event handler data
- Parameters
-
benders Benders' decomposition probnumber the subproblem number upperbound the upper bound value
Definition at line 426 of file benders.c.
References NULL, SCIP_OKAY, SCIPbendersSubproblem(), SCIPeventhdlrGetData(), SCIPfindEventhdlr(), and UPPERBOUND_EVENTHDLR_NAME.
Referenced by SCIPbendersExecSubproblemSolve().
◆ updateSubproblemLowerbound()
|
static |
Updates the cut constant of the Benders' cuts data. This function solves the master problem with only the auxiliary variables in the objective function.
- Parameters
-
masterprob the SCIP instance of the master problem benders Benders' decomposition
Definition at line 455 of file benders.c.
References NULL, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_VARSTATUS_COLUMN, SCIPbendersGetAuxiliaryVar(), SCIPbendersGetNSubproblems(), SCIPbendersGetSubproblemLowerbound(), SCIPbendersUpdateSubproblemLowerbound(), SCIPchgVarObjProbing(), SCIPdebugMsg, SCIPendProbing(), SCIPgetNVars(), SCIPgetSolTransObj(), SCIPgetVars(), SCIPinDive(), SCIPinProbing(), SCIPinRepropagation(), SCIPisInfinity(), SCIPsolveProbingLP(), SCIPstartProbing(), and SCIPvarGetStatus().
Referenced by SCIP_DECL_EVENTEXEC().
◆ SCIP_DECL_EVENTEXEC() [4/4]
|
static |
exec the event handler
Definition at line 522 of file benders.c.
References NODESOLVED_EVENTHDLR_NAME, NULL, SCIP_CALL, SCIP_EVENTTYPE_NODESOLVED, SCIP_OKAY, SCIPbendersGetNConvexSubproblems(), SCIPbendersGetNSubproblems(), SCIPdropEvent(), SCIPeventhdlrGetData(), SCIPeventhdlrGetName(), and updateSubproblemLowerbound().
◆ SCIP_DECL_EVENTINITSOL() [4/4]
|
static |
solving process initialization method of event handler (called when branch and bound process is about to begin)
Definition at line 545 of file benders.c.
References NODESOLVED_EVENTHDLR_NAME, NULL, SCIP_CALL, SCIP_EVENTTYPE_NODESOLVED, SCIP_OKAY, SCIPbendersIsActive(), SCIPbendersOnlyCheckConvexRelax(), SCIPcatchEvent(), SCIPeventhdlrGetData(), and SCIPeventhdlrGetName().
◆ addAuxiliaryVariablesToMaster()
|
static |
adds the auxiliary variables to the Benders' decomposition master problem
- Parameters
-
scip SCIP data structure benders Benders' decomposition structure
Definition at line 579 of file benders.c.
References AUXILIARYVAR_NAME, SCIP_Benders::auxiliaryvars, FALSE, SCIP_Bool, SCIP_CALL, SCIP_MAXSTRLEN, SCIP_OKAY, SCIP_VARTYPE_CONTINUOUS, SCIPaddVar(), SCIPallocBlockMemory, SCIPbendersGetAuxiliaryVar(), SCIPbendersGetName(), SCIPbendersGetNSubproblems(), SCIPbendersShareAuxVars(), SCIPcaptureVar(), SCIPcreateVarBasic(), SCIPfreeBlockMemory, SCIPgetBenders(), SCIPinfinity(), SCIPsnprintf(), SCIPvarSetData(), and TRUE.
Referenced by SCIPbendersInitpre().
◆ assignAuxiliaryVariables()
|
static |
assigns the copied auxiliary variables in the target SCIP to the target Benders' decomposition data
- Parameters
-
scip SCIP data structure, the target scip benders Benders' decomposition
Definition at line 636 of file benders.c.
References AUXILIARYVAR_NAME, SCIP_Benders::auxiliaryvars, FALSE, NULL, SCIP_Bool, SCIP_CALL, SCIP_MAXSTRLEN, SCIP_OKAY, SCIPallocBlockMemory, SCIPbendersGetName(), SCIPbendersGetNSubproblems(), SCIPbendersShareAuxVars(), SCIPcaptureVar(), SCIPfindVar(), SCIPfreeBlockMemory, SCIPgetBenders(), SCIPsnprintf(), SCIPvarGetTransVar(), SCIPvarSetData(), and TRUE.
Referenced by SCIPbendersInitpre().
◆ resetSubproblemObjectiveValue()
|
static |
sets the subproblem objective value array to -infinity
- Parameters
-
benders the Benders' decomposition structure
Definition at line 689 of file benders.c.
References NULL, SCIPbendersGetNSubproblems(), SCIPbendersSetSubproblemObjval(), SCIPbendersSubproblem(), and SCIPinfinity().
Referenced by SCIPbendersExec().
◆ SCIP_DECL_PARAMCHGD()
|
static |
method to call, when the priority of a Benders' decomposition was changed
Definition at line 722 of file benders.c.
References NULL, SCIP_OKAY, SCIPparamGetData(), SCIPparamGetInt(), and SCIPsetBendersPriority().
◆ createMasterVarMapping()
|
static |
creates a variable mapping between the master problem variables of the source scip and the sub scip
- Parameters
-
benders Benders' decomposition of the target SCIP instance sourceset global SCIP settings from the source SCIP varmap a hashmap to store the mapping of source variables corresponding target variables; must not be NULL
Definition at line 737 of file benders.c.
References SCIP_Benders::iscopy, SCIP_Benders::mastervarsmap, NULL, SCIP_Set::scip, SCIP_CALL, SCIP_OKAY, SCIPblkmem(), SCIPcaptureVar(), SCIPgetNVars(), SCIPgetVars(), SCIPhashmapCreate(), SCIPhashmapGetImage(), and SCIPhashmapInsert().
Referenced by SCIPbendersCopyInclude().
◆ SCIPbendersCopyInclude()
SCIP_RETCODE SCIPbendersCopyInclude | ( | SCIP_BENDERS * | benders, |
SCIP_SET * | sourceset, | ||
SCIP_SET * | targetset, | ||
SCIP_HASHMAP * | varmap, | ||
SCIP_Bool * | valid | ||
) |
copies the given Benders' decomposition to a new SCIP
- Parameters
-
benders Benders' decomposition sourceset SCIP_SET of SCIP to copy from targetset SCIP_SET of SCIP to copy to varmap a hashmap to store the mapping of source variables corresponding target variables; must not be NULL valid was the copying process valid?
Definition at line 777 of file benders.c.
References SCIP_Set::benders_copybenders, SCIP_Benders::benderscuts, createMasterVarMapping(), FALSE, SCIP_Benders::lnscheck, SCIP_Benders::nbenderscuts, NULL, SCIP_Set::scip, SCIP_CALL, SCIP_OKAY, SCIPbenderscutCopyInclude(), SCIPbendersGetName(), SCIPbendersIsActive(), SCIPbendersSortBenderscuts(), SCIPsetDebugMsg, SCIPsetFindBenders(), and TRUE.
Referenced by SCIPcopyBenders().
◆ doBendersCreate()
|
static |
internal method for creating a Benders' decomposition structure
- Parameters
-
benders pointer to Benders' decomposition data structure set global SCIP settings messagehdlr message handler blkmem block memory for parameter settings name name of Benders' decomposition desc description of Benders' decomposition priority priority of the Benders' decomposition cutlp should Benders' cuts be generated for LP solutions cutpseudo should Benders' cuts be generated for pseudo solutions cutrelax should Benders' cuts be generated for relaxation solutions shareauxvars should this Benders' use the highest priority Benders aux vars bendersdata Benders' decomposition data
Definition at line 836 of file benders.c.
References BMSallocMemory, BMSclearMemory, BMSduplicateMemoryArray, FALSE, NULL, SCIP_ALLOC, SCIP_CALL, SCIP_CLOCKTYPE_DEFAULT, SCIP_DEFAULT_CUTSASCONSS, SCIP_DEFAULT_LNSCHECK, SCIP_DEFAULT_LNSMAXDEPTH, SCIP_DEFAULT_SUBPROBFRAC, SCIP_DEFAULT_TRANSFERCUTS, SCIP_DEFAULT_UPDATEAUXVARBOUND, SCIP_INVALIDCALL, SCIP_MAXSTRLEN, SCIP_MAXTREEDEPTH, SCIP_OKAY, SCIPclockCreate(), SCIPerrorMessage, SCIPsetAddBoolParam(), SCIPsetAddIntParam(), SCIPsetAddRealParam(), SCIPsnprintf(), and TRUE.
Referenced by SCIPbendersCreate().
◆ SCIPbendersCreate()
SCIP_RETCODE SCIPbendersCreate | ( | SCIP_BENDERS ** | benders, |
SCIP_SET * | set, | ||
SCIP_MESSAGEHDLR * | messagehdlr, | ||
BMS_BLKMEM * | blkmem, | ||
const char * | name, | ||
const char * | desc, | ||
int | priority, | ||
SCIP_Bool | cutlp, | ||
SCIP_Bool | cutpseudo, | ||
SCIP_Bool | cutrelax, | ||
SCIP_Bool | shareauxvars, | ||
SCIP_DECL_BENDERSCOPY((*benderscopy)) | , | ||
SCIP_DECL_BENDERSFREE((*bendersfree)) | , | ||
SCIP_DECL_BENDERSINIT((*bendersinit)) | , | ||
SCIP_DECL_BENDERSEXIT((*bendersexit)) | , | ||
SCIP_DECL_BENDERSINITPRE((*bendersinitpre)) | , | ||
SCIP_DECL_BENDERSEXITPRE((*bendersexitpre)) | , | ||
SCIP_DECL_BENDERSINITSOL((*bendersinitsol)) | , | ||
SCIP_DECL_BENDERSEXITSOL((*bendersexitsol)) | , | ||
SCIP_DECL_BENDERSGETVAR((*bendersgetvar)) | , | ||
SCIP_DECL_BENDERSCREATESUB((*benderscreatesub)) | , | ||
SCIP_DECL_BENDERSPRESUBSOLVE((*benderspresubsolve)) | , | ||
SCIP_DECL_BENDERSSOLVESUBCONVEX((*benderssolvesubconvex)) | , | ||
SCIP_DECL_BENDERSSOLVESUB((*benderssolvesub)) | , | ||
SCIP_DECL_BENDERSPOSTSOLVE((*benderspostsolve)) | , | ||
SCIP_DECL_BENDERSFREESUB((*bendersfreesub)) | , | ||
SCIP_BENDERSDATA * | bendersdata | ||
) |
creates a Benders' decomposition structure
To use the Benders' decomposition for solving a problem, it first has to be activated with a call to SCIPactivateBenders().
- Parameters
-
benders pointer to Benders' decomposition data structure set global SCIP settings messagehdlr message handler blkmem block memory for parameter settings name name of Benders' decomposition desc description of Benders' decomposition priority priority of the Benders' decomposition cutlp should Benders' cuts be generated for LP solutions cutpseudo should Benders' cuts be generated for pseudo solutions cutrelax should Benders' cuts be generated for relaxation solutions shareauxvars should this Benders' use the highest priority Benders aux vars bendersdata Benders' decomposition data
Definition at line 969 of file benders.c.
References doBendersCreate(), NULL, SCIP_CALL_FINALLY, SCIP_OKAY, and SCIPbendersFree().
Referenced by SCIPincludeBenders(), and SCIPincludeBendersBasic().
◆ releaseVarMappingHashmapVars()
|
static |
releases the variables that have been captured in the hashmap
- Parameters
-
scip the SCIP data structure benders Benders' decomposition
Definition at line 1014 of file benders.c.
References SCIP_Benders::mastervarsmap, NULL, SCIP_CALL, SCIP_OKAY, SCIPhashmapEntryGetImage(), SCIPhashmapGetEntry(), SCIPhashmapGetNEntries(), and SCIPreleaseVar().
Referenced by SCIPbendersFree().
◆ SCIPbendersFree()
SCIP_RETCODE SCIPbendersFree | ( | SCIP_BENDERS ** | benders, |
SCIP_SET * | set | ||
) |
calls destructor and frees memory of Benders' decomposition
- Parameters
-
benders pointer to Benders' decomposition data structure set global SCIP settings
Definition at line 1048 of file benders.c.
References BMSfreeMemory, BMSfreeMemoryArray, BMSfreeMemoryArrayNull, NULL, releaseVarMappingHashmapVars(), SCIP_CALL, SCIP_OKAY, SCIPbenderscutFree(), SCIPclockFree(), and SCIPhashmapFree().
Referenced by SCIPbendersCreate().
◆ initialiseSubproblem()
|
static |
initialises a MIP subproblem by putting the problem into SCIP_STAGE_SOLVING. This is achieved by calling SCIPsolve and then interrupting the solve in a node focus event handler. The LP subproblem is also initialised using this method; however, a different event handler is added. This event handler will put the LP subproblem into probing mode. The MIP solving function is called to initialise the subproblem because this function calls SCIPsolve with the appropriate parameter settings for Benders' decomposition.
- Parameters
-
benders Benders' decomposition set global SCIP settings probnumber the subproblem number success was the initialisation process successful
Definition at line 1099 of file benders.c.
References FALSE, NULL, SCIP_BENDERSENFOTYPE_LP, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_STAGE_SOLVING, SCIP_STATUS_BESTSOLLIMIT, SCIP_STATUS_MEMLIMIT, SCIP_STATUS_TIMELIMIT, SCIPbendersGetNSubproblems(), SCIPbendersSolveSubproblemCIP(), SCIPbendersSubproblem(), SCIPconstructLP(), SCIPgetStage(), SCIPgetStatus(), and TRUE.
Referenced by initialiseLPSubproblem(), SCIPbendersSetupSubproblem(), and SCIPbendersSolveSubproblem().
◆ initialiseLPSubproblem()
|
static |
initialises an LP subproblem by putting the problem into probing mode. The probing mode is invoked in a node focus event handler. This event handler is added just prior to calling the initialise subproblem function.
- Parameters
-
benders Benders' decomposition set global SCIP settings probnumber the subproblem number
Definition at line 1141 of file benders.c.
References initEventhandlerData(), initialiseSubproblem(), NODEFOCUS_EVENTHDLR_DESC, NODEFOCUS_EVENTHDLR_NAME, NULL, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIPallocBlockMemory, SCIPbendersGetNSubproblems(), SCIPbendersSubproblem(), SCIPincludeEventhdlrBasic(), SCIPsetEventhdlrExit(), SCIPsetEventhdlrExitsol(), SCIPsetEventhdlrFree(), and SCIPsetEventhdlrInitsol().
Referenced by createSubproblems(), and SCIPbendersChgMastervarsToCont().
◆ createSubproblems()
|
static |
creates the subproblems and registers it with the Benders' decomposition struct
- Parameters
-
benders Benders' decomposition set global SCIP settings
Definition at line 1179 of file benders.c.
References FALSE, initEventhandlerData(), initialiseLPSubproblem(), SCIP_Benders::iscopy, MIPNODEFOCUS_EVENTHDLR_DESC, MIPNODEFOCUS_EVENTHDLR_NAME, NULL, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_STAGE_PROBLEM, SCIP_VERBLEVEL_FULL, SCIP_VERBLEVEL_HIGH, SCIPallocBlockMemory, SCIPbendersGetNSubproblems(), SCIPbendersGetVar(), SCIPbendersSetSubproblemIsConvex(), SCIPbendersSubproblem(), SCIPchgVarObj(), SCIPgetStage(), SCIPgetVarsData(), SCIPincludeEventhdlrBasic(), SCIPisZero(), SCIPsetEventhdlrExit(), SCIPsetEventhdlrExitsol(), SCIPsetEventhdlrFree(), SCIPsetEventhdlrInitsol(), SCIPsetIntParam(), SCIPvarGetName(), SCIPvarGetObj(), SCIPverbMessage(), SCIP_Benders::subprobscreated, TRUE, UPPERBOUND_EVENTHDLR_DESC, and UPPERBOUND_EVENTHDLR_NAME.
Referenced by SCIPbendersInit().
◆ SCIPbendersInit()
SCIP_RETCODE SCIPbendersInit | ( | SCIP_BENDERS * | benders, |
SCIP_SET * | set | ||
) |
initializes Benders' decomposition
- Parameters
-
benders Benders' decomposition set global SCIP settings
Definition at line 1323 of file benders.c.
References SCIP_Benders::bendersclock, SCIP_Benders::benderscuts, createSubproblems(), SCIP_Benders::initialized, SCIP_Benders::name, SCIP_Benders::nbenderscuts, SCIP_Benders::ncalls, SCIP_Benders::ncutsfound, SCIP_Benders::ntransferred, NULL, SCIP_CALL, SCIP_INVALIDCALL, SCIP_OKAY, SCIPbenderscutInit(), SCIPbendersSortBenderscuts(), SCIPclockReset(), SCIPclockStart(), SCIPclockStop(), SCIPerrorMessage, SCIP_Benders::setuptime, and TRUE.
◆ createAndAddTransferredCut()
|
static |
Transfers Benders' cuts that were generated while solving a sub-SCIP to the original SCIP instance. This involves creating a constraint/cut that is equivalent to the generated cut in the sub-SCIP. This new constraint/cut is then added to the original SCIP instance.
- Parameters
-
sourcescip the source SCIP from when the Benders' decomposition was copied benders the Benders' decomposition structure of the sub SCIP vars the variables from the source constraint vals the coefficients of the variables in the source constriant lhs the LHS of the source constraint rhs the RHS of the source constraint nvars the number of variables in the source constraint
Definition at line 1382 of file benders.c.
References SCIP_Benders::cutsasconss, FALSE, SCIP_Benders::mastervarsmap, SCIP_Benders::ntransferred, NULL, SCIP_Bool, SCIP_CALL, SCIP_MAXSTRLEN, SCIP_OKAY, SCIP_Real, SCIPaddCoefLinear(), SCIPaddCons(), SCIPaddPoolCut(), SCIPaddVarToRow(), SCIPbendersGetName(), SCIPbendersGetNTransferredCuts(), SCIPcreateConsBasicLinear(), SCIPcreateEmptyRowCons(), SCIPfindBenders(), SCIPfindConshdlr(), SCIPhashmapGetImage(), SCIPreleaseCons(), SCIPreleaseRow(), SCIPsetConsRemovable(), SCIPsnprintf(), SCIPvarGetOrigvarSum(), and TRUE.
Referenced by transferBendersCuts().
◆ transferBendersCuts()
|
static |
transfers the cuts generated in a subscip to the source scip
- Parameters
-
sourcescip the source SCIP from when the Benders' decomposition was copied subscip the sub SCIP where the Benders' cuts were generated benders the Benders' decomposition structure of the sub SCIP
Definition at line 1498 of file benders.c.
References SCIP_Benders::benderscuts, createAndAddTransferredCut(), SCIP_Benders::nbenderscuts, NULL, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPbenderscutGetAddedCutData(), SCIPbenderscutGetNAddedCuts(), SCIPbendersGetName(), SCIPfindBenders(), and SCIP_Benders::transfercuts.
Referenced by SCIPbendersExit().
◆ SCIPbendersExit()
SCIP_RETCODE SCIPbendersExit | ( | SCIP_BENDERS * | benders, |
SCIP_SET * | set | ||
) |
calls exit method of Benders' decomposition
- Parameters
-
benders Benders' decomposition set global SCIP settings
Definition at line 1551 of file benders.c.
References SCIP_Benders::auxiliaryvars, SCIP_Benders::benderscuts, FALSE, SCIP_Benders::initialized, SCIP_Benders::iscopy, SCIP_Benders::name, SCIP_Benders::nbenderscuts, NULL, SCIP_CALL, SCIP_INVALIDCALL, SCIP_OKAY, SCIPbenderscutExit(), SCIPbendersGetNSubproblems(), SCIPbendersSortBenderscuts(), SCIPclockStart(), SCIPclockStop(), SCIPerrorMessage, SCIPreleaseVar(), SCIP_Benders::setuptime, SCIP_Benders::sourcescip, and transferBendersCuts().
Referenced by SCIPsetInitPlugins().
◆ checkSubproblemIndependence()
|
static |
Checks whether a subproblem is independent.
- Parameters
-
scip the SCIP data structure benders Benders' decomposition
Definition at line 1612 of file benders.c.
References FALSE, NULL, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIPbendersGetNSubproblems(), SCIPbendersSetSubproblemIsIndependent(), SCIPgetBendersSubproblemVar(), SCIPgetVarsData(), and TRUE.
Referenced by SCIPbendersInitpre().
◆ SCIPbendersInitpre()
SCIP_RETCODE SCIPbendersInitpre | ( | SCIP_BENDERS * | benders, |
SCIP_SET * | set, | ||
SCIP_STAT * | stat | ||
) |
informs the Benders' decomposition that the presolving process is being started
- Parameters
-
benders Benders' decomposition set global SCIP settings stat dynamic problem statistics
Definition at line 1668 of file benders.c.
References addAuxiliaryVariablesToMaster(), assignAuxiliaryVariables(), checkSubproblemIndependence(), SCIP_Benders::iscopy, NULL, SCIP_CALL, SCIP_OKAY, SCIPclockStart(), SCIPclockStop(), and SCIP_Benders::setuptime.
Referenced by SCIPsetExitPlugins().
◆ SCIPbendersExitpre()
SCIP_RETCODE SCIPbendersExitpre | ( | SCIP_BENDERS * | benders, |
SCIP_SET * | set, | ||
SCIP_STAT * | stat | ||
) |
informs the Benders' decomposition that the presolving process has completed
- Parameters
-
benders Benders' decomposition set global SCIP settings stat dynamic problem statistics
Definition at line 1712 of file benders.c.
References NULL, SCIP_CALL, SCIP_OKAY, SCIPclockStart(), SCIPclockStop(), and SCIP_Benders::setuptime.
Referenced by SCIPsetExitPlugins().
◆ SCIPbendersInitsol()
SCIP_RETCODE SCIPbendersInitsol | ( | SCIP_BENDERS * | benders, |
SCIP_SET * | set | ||
) |
informs Benders' decomposition that the branch and bound process is being started
- Parameters
-
benders Benders' decomposition set global SCIP settings
Definition at line 1738 of file benders.c.
References SCIP_Benders::benderscuts, SCIP_Benders::nbenderscuts, NULL, SCIP_CALL, SCIP_OKAY, SCIPbenderscutInitsol(), SCIPbendersSortBenderscuts(), SCIPclockStart(), SCIPclockStop(), and SCIP_Benders::setuptime.
Referenced by SCIPsetInitprePlugins().
◆ SCIPbendersExitsol()
SCIP_RETCODE SCIPbendersExitsol | ( | SCIP_BENDERS * | benders, |
SCIP_SET * | set | ||
) |
informs Benders' decomposition that the branch and bound process data is being freed
- Parameters
-
benders Benders' decomposition set global SCIP settings
Definition at line 1771 of file benders.c.
References SCIP_Benders::benderscuts, FALSE, SCIP_Benders::nbenderscuts, NULL, SCIP_CALL, SCIP_OKAY, SCIPbenderscutExitsol(), SCIPbendersFreeSubproblem(), SCIPbendersGetNSubproblems(), SCIPbendersSetSubproblemIsIndependent(), SCIPbendersSortBenderscuts(), SCIPbendersSubproblemIsIndependent(), SCIPclockStart(), SCIPclockStop(), and SCIP_Benders::setuptime.
Referenced by SCIPsetInitsolPlugins().
◆ SCIPbendersActivate()
SCIP_RETCODE SCIPbendersActivate | ( | SCIP_BENDERS * | benders, |
SCIP_SET * | set, | ||
int | nsubproblems | ||
) |
activates Benders' decomposition such that it is called in LP solving loop
- Parameters
-
benders the Benders' decomposition structure set global SCIP settings nsubproblems the number subproblems used in this decomposition
Definition at line 1827 of file benders.c.
References SCIP_Benders::active, SCIP_Benders::auxiliaryvars, SCIP_Benders::bestsubprobobjval, BMSallocMemoryArray, FALSE, SCIP_Benders::indepsubprob, SCIP_Benders::mastervarscont, SCIP_Benders::nactivesubprobs, NODESOLVED_EVENTHDLR_DESC, NODESOLVED_EVENTHDLR_NAME, SCIP_Benders::nsubproblems, NULL, SCIP_ALLOC, SCIP_CALL, SCIP_OKAY, SCIP_STAGE_INIT, SCIP_STAGE_PROBLEM, SCIPincludeEventhdlrBasic(), SCIPsetEventhdlrInitsol(), SCIPsetInfinity(), SCIP_Benders::subprobenabled, SCIP_Benders::subprobisconvex, SCIP_Benders::subproblems, SCIP_Benders::subproblowerbound, SCIP_Benders::subprobobjval, SCIP_Benders::subprobsetup, and TRUE.
Referenced by SCIPactivateBenders().
◆ SCIPbendersDeactivate()
void SCIPbendersDeactivate | ( | SCIP_BENDERS * | benders, |
SCIP_SET * | set | ||
) |
deactivates Benders' decomposition such that it is no longer called in LP solving loop
- Parameters
-
benders the Benders' decomposition structure set global SCIP settings
Definition at line 1890 of file benders.c.
References SCIP_Benders::active, SCIP_Benders::auxiliaryvars, SCIP_Benders::bestsubprobobjval, BMSfreeMemoryArray, FALSE, SCIP_Benders::indepsubprob, SCIP_Benders::mastervarscont, NULL, SCIP_STAGE_INIT, SCIP_STAGE_PROBLEM, SCIPbendersGetNSubproblems(), SCIP_Benders::subprobenabled, SCIP_Benders::subprobisconvex, SCIP_Benders::subproblems, SCIP_Benders::subproblowerbound, SCIP_Benders::subprobobjval, and SCIP_Benders::subprobsetup.
Referenced by SCIPdeactivateBenders(), and SCIPfreeProb().
◆ updateAuxiliaryVarLowerbound()
|
static |
updates the lower bound for all auxiliary variables. This is called if the first LP enforced is unbounded.
- Parameters
-
benders Benders' decomposition set global SCIP settings result the result from updating the auxiliary variable lower bound
Definition at line 1942 of file benders.c.
References FALSE, NULL, SCIP_Bool, SCIP_CALL, SCIP_DIDNOTRUN, SCIP_INFEASIBLE, SCIP_OKAY, SCIP_Real, SCIP_REDUCEDDOM, SCIPbendersComputeSubproblemLowerbound(), SCIPbendersGetAuxiliaryVar(), SCIPbendersGetNSubproblems(), SCIPbendersUpdateSubproblemLowerbound(), SCIPchgVarLb(), SCIPsetDebugMsg, SCIPsetIsGT(), SCIPvarGetLbGlobal(), and SCIPvarGetName().
Referenced by SCIPbendersExec().
◆ numSubproblemsToCheck()
|
static |
returns the number of subproblems that will be checked in this iteration
- Parameters
-
benders Benders' decomposition set global SCIP settings type the type of solution being enforced
Definition at line 2009 of file benders.c.
References SCIP_Benders::ncalls, SCIP_BENDERSENFOTYPE_CHECK, SCIP_Real, SCIPbendersGetNSubproblems(), SCIPbendersOnlyCheckConvexRelax(), SCIPsetCeil(), and SCIP_Benders::subprobfrac.
Referenced by solveBendersSubproblems().
◆ subproblemIsActive()
|
static |
returns whether the solving of the given subproblem needs to be executed
- Parameters
-
benders Benders' decomposition probnumber the subproblem index
Definition at line 2023 of file benders.c.
References SCIPbendersSubproblemIsEnabled(), and SCIPbendersSubproblemIsIndependent().
Referenced by generateBendersCuts(), SCIPbendersExec(), SCIPbendersFreeSubproblem(), SCIPbendersSetSubproblemEnabled(), SCIPbendersSetSubproblemIsIndependent(), and solveBendersSubproblems().
◆ solveBendersSubproblems()
|
static |
Solves each of the Benders' decomposition subproblems for the given solution. All, or a fraction, of subproblems are solved before the Benders' decomposition cuts are generated. Since a convex relaxation of the subproblem could be solved to generate cuts, a parameter nverified is used to identified the number of subproblems that have been solved in their "original" form. For example, if the subproblem is a MIP, then if the LP is solved to generate cuts, this does not constitute a verification. The verification is only performed when the MIP is solved.
- Parameters
-
benders Benders' decomposition set global SCIP settings sol primal CIP solution type the type of solution being enforced solveloop the current solve loop checkint are the subproblems called during a check/enforce of integer sols? nchecked the number of subproblems checked in this solve loop, they may not be solved nverified the number of subproblems verified in the current loop subprobsolved an array indicating the subproblems that were solved in this loop. substatus array to store the status of the subsystem infeasible is the master problem infeasible with respect to the Benders' cuts? optimal is the current solution optimal? stopped was the solving process stopped?
Definition at line 2040 of file benders.c.
References FALSE, SCIP_Benders::firstchecked, SCIP_Benders::lastchecked, NULL, numSubproblemsToCheck(), SCIP_BENDERSENFOTYPE_CHECK, SCIP_BENDERSENFOTYPE_LP, SCIP_BENDERSSOLVELOOP_CIP, SCIP_BENDERSSOLVELOOP_CONVEX, SCIP_BENDERSSOLVELOOP_USERCIP, SCIP_BENDERSSOLVELOOP_USERCONVEX, SCIP_BENDERSSUBSTATUS_AUXVIOL, SCIP_BENDERSSUBSTATUS_INFEAS, SCIP_BENDERSSUBSTATUS_OPTIMAL, SCIP_BENDERSSUBSTATUS_UNKNOWN, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPbendersCheckSubproblemOptimality(), SCIPbendersExecSubproblemSolve(), SCIPbendersGetAuxiliaryVarVal(), SCIPbendersGetNSubproblems(), SCIPbendersGetSubproblemLowerbound(), SCIPbendersGetSubproblemObjval(), SCIPbendersOnlyCheckConvexRelax(), SCIPbendersSetSubproblemObjval(), SCIPbendersSubproblem(), SCIPbendersSubproblemIsConvex(), SCIPinfinity(), SCIPisStopped(), SCIPrelDiff(), SCIPsetDebugMsg, SCIPsetGetRealParam(), SCIPsetIsInfinity(), subproblemIsActive(), and TRUE.
Referenced by SCIPbendersExec().
◆ generateBendersCuts()
|
static |
Calls the Benders' decompsition cuts for the given solve loop. There are four cases: i) solveloop == SCIP_BENDERSSOLVELOOP_CONVEX - only the LP Benders' cuts are called ii) solveloop == SCIP_BENDERSSOLVELOOP_CIP - only the CIP Benders' cuts are called iii) solveloop == SCIP_BENDERSSOLVELOOP_USERCONVEX - only the LP Benders' cuts are called iv) solveloop == SCIP_BENDERSSOLVELOOP_USERCIP - only the CIP Benders' cuts are called
The priority of the results are: SCIP_CONSADDED (SCIP_SEPARATED), SCIP_DIDNOTFIND, SCIP_FEASIBLE, SCIP_DIDNOTRUN. In this function, there are four levels of results that need to be assessed. These are: i) The result from the individual cut for the subproblem ii) The overall result for the subproblem from all cuts iii) the overall result for the solve loop from all cuts iv) the over all result from all solve loops. In each level, the priority of results must be adhered to.
- Parameters
-
benders Benders' decomposition set global SCIP settings sol primal CIP solution result result of the pricing process type the type of solution being enforced solveloop the current solve loop checkint are the subproblems called during a check/enforce of integer sols? nchecked the number of subproblems checked in this solve loop, they may not be solved subprobsolved an array indicating the subproblems that were solved in this loop. substatus array to store the status of the subsystem mergecands the subproblems that are merge candidates npriomergecands the number of priority merge candidates. nmergecands the number of merge candidates. nsolveloops the number of solve loops, is updated w.r.t added cuts
Definition at line 2302 of file benders.c.
References SCIP_Benders::firstchecked, SCIP_Benders::ncutsfound, NULL, SCIP_BENDERSENFOTYPE_CHECK, SCIP_BENDERSSOLVELOOP_CIP, SCIP_BENDERSSOLVELOOP_CONVEX, SCIP_BENDERSSOLVELOOP_USERCIP, SCIP_BENDERSSOLVELOOP_USERCONVEX, SCIP_BENDERSSUBSTATUS_INFEAS, SCIP_BENDERSSUBSTATUS_OPTIMAL, SCIP_Bool, SCIP_CALL, SCIP_CONSADDED, SCIP_DIDNOTFIND, SCIP_DIDNOTRUN, SCIP_FEASIBLE, SCIP_Longint, SCIP_OKAY, SCIP_SEPARATED, SCIP_STAGE_SOLVED, SCIPbenderscutExec(), SCIPbenderscutGetNFound(), SCIPbenderscutIsLPCut(), SCIPbendersGetBenderscuts(), SCIPbendersGetNBenderscuts(), SCIPbendersGetNConvexSubproblems(), SCIPbendersGetNSubproblems(), SCIPbendersOnlyCheckConvexRelax(), SCIPbendersSubproblemIsConvex(), SCIPsetGetStage(), and subproblemIsActive().
Referenced by SCIPbendersExec().
◆ SCIPbendersExec()
SCIP_RETCODE SCIPbendersExec | ( | SCIP_BENDERS * | benders, |
SCIP_SET * | set, | ||
SCIP_SOL * | sol, | ||
SCIP_RESULT * | result, | ||
SCIP_Bool * | infeasible, | ||
SCIP_Bool * | auxviol, | ||
SCIP_BENDERSENFOTYPE | type, | ||
SCIP_Bool | checkint | ||
) |
Solves the subproblem using the current master problem solution.
The checkint flag indicates whether integer feasibility can be assumed. If it is not assumed, i.e. checkint == FALSE, then only the convex relaxations of the subproblems are solved. If integer feasibility is assumed, i.e. checkint == TRUE, then the convex relaxations and the full CIP are solved to generate Benders' cuts and check solution feasibility.
TODO: consider allowing the possibility to pass solution information back from the subproblems instead of the scip instance. This would allow the use of different solvers for the subproblems, more importantly allowing the use of an LP solver for LP subproblems.
- Parameters
-
benders Benders' decomposition set global SCIP settings sol primal CIP solution result result of the pricing process infeasible is the master problem infeasible with respect to the Benders' cuts? auxviol set to TRUE only if the solution is feasible but the aux vars are violated type the type of solution being enforced checkint should the integer solution be checked by the subproblems
Definition at line 2502 of file benders.c.
References BENDERS_MAXPSEUDOSOLS, SCIP_Benders::bendersclock, FALSE, SCIP_Benders::firstchecked, generateBendersCuts(), SCIP_Benders::iscopy, SCIP_Benders::lastchecked, SCIP_Benders::lnscheck, SCIP_Benders::lnsmaxdepth, SCIP_Benders::name, SCIP_Benders::ncalls, SCIP_Benders::npseudosols, NULL, resetSubproblemObjectiveValue(), SCIP_BENDERSENFOTYPE_CHECK, SCIP_BENDERSENFOTYPE_LP, SCIP_BENDERSENFOTYPE_PSEUDO, SCIP_BENDERSSOLVELOOP_USERCIP, SCIP_BENDERSSOLVELOOP_USERCONVEX, SCIP_Bool, SCIP_CALL, SCIP_CONSADDED, SCIP_DIDNOTFIND, SCIP_DIDNOTRUN, SCIP_ERROR, SCIP_FEASIBLE, SCIP_INFEASIBLE, SCIP_INVALIDRESULT, SCIP_LPSOLSTAT_UNBOUNDEDRAY, SCIP_OKAY, SCIP_SEPARATED, SCIP_SOLVELP, SCIP_STAGE_TRANSFORMED, SCIP_VERBLEVEL_HIGH, SCIPallocClearBlockMemoryArray, SCIPbendersFreeSubproblem(), SCIPbendersGetName(), SCIPbendersGetNConvexSubproblems(), SCIPbendersGetNSubproblems(), SCIPbendersOnlyCheckConvexRelax(), SCIPbendersSubproblem(), SCIPclockStart(), SCIPclockStop(), SCIPerrorMessage, SCIPfreeBlockMemoryArray, SCIPgetDepth(), SCIPgetLPSolstat(), SCIPgetObjsense(), SCIPgetPrimalbound(), SCIPgetSolOrigObj(), SCIPgetStage(), SCIPinProbing(), SCIPsetDebugMsg, SCIPsetIsFeasLE(), SCIPverbMessage(), solveBendersSubproblems(), SCIP_Benders::sourcescip, subproblemIsActive(), TRUE, updateAuxiliaryVarLowerbound(), and SCIP_Benders::updateauxvarbound.
Referenced by SCIPsolveBendersSubproblems().
◆ executeUserDefinedSolvesub()
|
static |
solves the user-defined subproblem solving function
- Parameters
-
benders Benders' decomposition set global SCIP settings sol primal CIP solution probnumber the subproblem number solveloop the solve loop iteration. The first iter is for LP, the second for IP infeasible returns whether the current subproblem is infeasible objective the objective function value of the subproblem result the result from solving the subproblem
Definition at line 2873 of file benders.c.
References SCIP_Benders::name, NULL, SCIP_BENDERSSOLVELOOP_USERCIP, SCIP_BENDERSSOLVELOOP_USERCONVEX, SCIP_CALL, SCIP_DIDNOTFIND, SCIP_DIDNOTRUN, SCIP_ERROR, SCIP_FEASIBLE, SCIP_INFEASIBLE, SCIP_INVALIDRESULT, SCIP_OKAY, SCIP_UNBOUNDED, SCIPbendersOnlyCheckConvexRelax(), SCIPerrorMessage, SCIPsetInfinity(), SCIPsetIsInfinity(), and TRUE.
Referenced by SCIPbendersExecSubproblemSolve(), and SCIPbendersSolveSubproblem().
◆ SCIPbendersExecSubproblemSolve()
SCIP_RETCODE SCIPbendersExecSubproblemSolve | ( | SCIP_BENDERS * | benders, |
SCIP_SET * | set, | ||
SCIP_SOL * | sol, | ||
int | probnumber, | ||
SCIP_BENDERSSOLVELOOP | solveloop, | ||
SCIP_Bool | enhancement, | ||
SCIP_Bool * | solved, | ||
SCIP_Bool * | infeasible, | ||
SCIP_BENDERSENFOTYPE | type | ||
) |
executes the subproblem solving process
- Parameters
-
benders Benders' decomposition set global SCIP settings sol primal CIP solution probnumber the subproblem number solveloop the solve loop iteration. The first iter is for LP, the second for IP enhancement is the solve performed as part of and enhancement? solved flag to indicate whether the subproblem was solved infeasible returns whether the current subproblem is infeasible type the enforcement type calling this function
Definition at line 2944 of file benders.c.
References executeUserDefinedSolvesub(), FALSE, NULL, SCIP_BENDERSSOLVELOOP_CIP, SCIP_BENDERSSOLVELOOP_CONVEX, SCIP_BENDERSSOLVELOOP_USERCIP, SCIP_BENDERSSOLVELOOP_USERCONVEX, SCIP_CALL, SCIP_DIDNOTRUN, SCIP_FEASIBLE, SCIP_INFEASIBLE, SCIP_LPSOLSTAT_ERROR, SCIP_LPSOLSTAT_INFEASIBLE, SCIP_LPSOLSTAT_NOTSOLVED, SCIP_LPSOLSTAT_OPTIMAL, SCIP_LPSOLSTAT_TIMELIMIT, SCIP_LPSOLSTAT_UNBOUNDEDRAY, SCIP_OKAY, SCIP_Real, SCIP_STATUS_BESTSOLLIMIT, SCIP_STATUS_INFEASIBLE, SCIP_STATUS_MEMLIMIT, SCIP_STATUS_OPTIMAL, SCIP_STATUS_TIMELIMIT, SCIP_STATUS_UNBOUNDED, SCIP_STATUS_USERINTERRUPT, SCIP_UNBOUNDED, SCIP_VERBLEVEL_FULL, SCIPABORT, SCIPbendersGetAuxiliaryVarVal(), SCIPbendersSetSubproblemObjval(), SCIPbendersSetupSubproblem(), SCIPbendersSolveSubproblemCIP(), SCIPbendersSolveSubproblemLP(), SCIPbendersSubproblem(), SCIPbendersSubproblemIsConvex(), SCIPbendersSubproblemIsSetup(), SCIPerrorMessage, SCIPgetBestSol(), SCIPgetLPSolstat(), SCIPgetObjsense(), SCIPgetSolOrigObj(), SCIPgetStatus(), SCIPsetDebugMsg, SCIPsetInfinity(), SCIPverbMessage(), TRUE, and updateEventhdlrUpperbound().
Referenced by solveBendersSubproblems().
◆ SCIPbendersSetupSubproblem()
SCIP_RETCODE SCIPbendersSetupSubproblem | ( | SCIP_BENDERS * | benders, |
SCIP_SET * | set, | ||
SCIP_SOL * | sol, | ||
int | probnumber | ||
) |
sets up the subproblem using the solution to the master problem
- Parameters
-
benders Benders' decomposition set global SCIP settings sol primal CIP solution probnumber the subproblem number
Definition at line 3119 of file benders.c.
References FALSE, initialiseSubproblem(), NULL, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPbendersChgMastervarsToCont(), SCIPbendersGetNSubproblems(), SCIPbendersGetVar(), SCIPbendersSetSubproblemIsSetup(), SCIPbendersSubproblem(), SCIPbendersSubproblemIsConvex(), SCIPchgVarLb(), SCIPchgVarUb(), SCIPgetNVars(), SCIPgetSolVal(), SCIPgetVars(), SCIPisEQ(), SCIPisGT(), SCIPisLT(), SCIPstartProbing(), SCIPvarGetLbLocal(), SCIPvarGetUbLocal(), and TRUE.
Referenced by SCIPbendersExecSubproblemSolve(), and SCIPsetupBendersSubproblem().
◆ SCIPbendersSolveSubproblem()
SCIP_RETCODE SCIPbendersSolveSubproblem | ( | SCIP_BENDERS * | benders, |
SCIP_SET * | set, | ||
SCIP_SOL * | sol, | ||
int | probnumber, | ||
SCIP_Bool * | infeasible, | ||
SCIP_BENDERSENFOTYPE | type, | ||
SCIP_Bool | solvecip, | ||
SCIP_Real * | objective | ||
) |
Solve a Benders' decomposition subproblems. This will either call the user defined method or the generic solving methods. If the generic method is called, then the subproblem must be set up before calling this method.
- Parameters
-
benders Benders' decomposition set global SCIP settings sol primal CIP solution, can be NULL probnumber the subproblem number infeasible returns whether the current subproblem is infeasible type the enforcement type calling this function solvecip directly solve the CIP subproblem objective the objective function value of the subproblem, can be NULL
Definition at line 3218 of file benders.c.
References executeUserDefinedSolvesub(), initialiseSubproblem(), NULL, SCIP_BENDERSSOLVELOOP_USERCIP, SCIP_BENDERSSOLVELOOP_USERCONVEX, SCIP_Bool, SCIP_CALL, SCIP_ERROR, SCIP_OKAY, SCIP_Real, SCIPbendersGetNSubproblems(), SCIPbendersSolveSubproblemCIP(), SCIPbendersSolveSubproblemLP(), SCIPbendersSubproblem(), SCIPbendersSubproblemIsConvex(), SCIPbendersSubproblemIsIndependent(), SCIPbendersSubproblemIsSetup(), SCIPerrorMessage, SCIPgetBestSol(), SCIPgetObjsense(), SCIPgetSolOrigObj(), SCIPinfinity(), SCIPinProbing(), SCIPstartProbing(), and TRUE.
Referenced by SCIPsolveBendersSubproblem().
◆ copyMemoryAndTimeLimits()
|
static |
copies the time and memory limit from the master problem to the subproblem
- Parameters
-
scip the SCIP data structure subproblem the Benders' decomposition subproblem
Definition at line 3313 of file benders.c.
References MAX, MIN, NULL, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPgetMemExternEstim(), SCIPgetMemUsed(), SCIPgetParam(), SCIPgetRealParam(), SCIPgetSolvingTime(), SCIPparamGetRealMax(), and SCIPsetRealParam().
Referenced by SCIPbendersComputeSubproblemLowerbound(), and setSubproblemParams().
◆ storeOrigSubproblemParams()
|
static |
stores the original parameters from the subproblem
- Parameters
-
subproblem the SCIP data structure origparams the original subproblem parameters
Definition at line 3346 of file benders.c.
References SCIP_SubproblemParams::conflict_enable, SCIP_SubproblemParams::cons_linear_propfreq, SCIP_SubproblemParams::limits_memory, SCIP_SubproblemParams::limits_time, SCIP_SubproblemParams::lp_alwaysgetduals, SCIP_SubproblemParams::lp_disablecutoff, SCIP_SubproblemParams::lp_initalg, SCIP_SubproblemParams::lp_resolvealg, SCIP_SubproblemParams::lp_scaling, SCIP_SubproblemParams::misc_catchctrlc, SCIP_SubproblemParams::misc_scaleobj, NULL, SCIP_SubproblemParams::prop_maxrounds, SCIP_SubproblemParams::prop_maxroundsroot, SCIP_CALL, SCIP_OKAY, SCIPgetBoolParam(), SCIPgetCharParam(), SCIPgetIntParam(), and SCIPgetRealParam().
Referenced by SCIPbendersSolveSubproblemCIP(), and SCIPbendersSolveSubproblemLP().
◆ setSubproblemParams()
|
static |
sets the parameters for the subproblem
- Parameters
-
scip the SCIP data structure subproblem the subproblem SCIP instance
Definition at line 3373 of file benders.c.
References copyMemoryAndTimeLimits(), FALSE, NULL, SCIP_CALL, SCIP_OKAY, SCIP_PARAMSETTING_OFF, SCIP_VERBLEVEL_NONE, SCIPsetBoolParam(), SCIPsetCharParam(), SCIPsetHeuristics(), SCIPsetIntParam(), SCIPsetParam(), SCIPsetPresolving(), and TRUE.
Referenced by SCIPbendersSolveSubproblemCIP(), and SCIPbendersSolveSubproblemLP().
◆ resetOrigSubproblemParams()
|
static |
resets the original parameters from the subproblem
- Parameters
-
subproblem the SCIP data structure origparams the original subproblem parameters
Definition at line 3417 of file benders.c.
References SCIP_SubproblemParams::conflict_enable, SCIP_SubproblemParams::cons_linear_propfreq, SCIP_SubproblemParams::limits_memory, SCIP_SubproblemParams::limits_time, SCIP_SubproblemParams::lp_alwaysgetduals, SCIP_SubproblemParams::lp_disablecutoff, SCIP_SubproblemParams::lp_initalg, SCIP_SubproblemParams::lp_resolvealg, SCIP_SubproblemParams::lp_scaling, SCIP_SubproblemParams::misc_catchctrlc, SCIP_SubproblemParams::misc_scaleobj, NULL, SCIP_SubproblemParams::prop_maxrounds, SCIP_SubproblemParams::prop_maxroundsroot, SCIP_CALL, SCIP_OKAY, SCIPsetBoolParam(), SCIPsetCharParam(), SCIPsetIntParam(), and SCIPsetRealParam().
Referenced by SCIPbendersSolveSubproblemCIP(), and SCIPbendersSolveSubproblemLP().
◆ SCIPbendersFreeSubproblem()
SCIP_RETCODE SCIPbendersFreeSubproblem | ( | SCIP_BENDERS * | benders, |
SCIP_SET * | set, | ||
int | probnumber | ||
) |
frees the subproblems
- Parameters
-
benders Benders' decomposition set global SCIP settings probnumber the subproblem number
Definition at line 3606 of file benders.c.
References FALSE, NULL, SCIP_CALL, SCIP_OKAY, SCIP_STAGE_TRANSFORMED, SCIPbendersSetSubproblemIsSetup(), SCIPbendersSubproblem(), SCIPbendersSubproblemIsConvex(), SCIPendProbing(), SCIPfreeTransform(), SCIPgetStage(), SCIPinProbing(), and subproblemIsActive().
Referenced by SCIPbendersComputeSubproblemLowerbound(), SCIPbendersExec(), SCIPbendersExitsol(), SCIPbendersMergeSubproblemIntoMaster(), and SCIPfreeBendersSubproblem().
◆ SCIPbendersCheckSubproblemOptimality()
SCIP_RETCODE SCIPbendersCheckSubproblemOptimality | ( | SCIP_BENDERS * | benders, |
SCIP_SET * | set, | ||
SCIP_SOL * | sol, | ||
int | probnumber, | ||
SCIP_Bool * | optimal | ||
) |
compares the subproblem objective value with the auxiliary variable value for optimality
- Parameters
-
benders the benders' decomposition structure set global SCIP settings sol primal CIP solution probnumber the subproblem number optimal flag to indicate whether the current subproblem is optimal for the master
Definition at line 3656 of file benders.c.
References FALSE, NULL, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPbendersGetAuxiliaryVarVal(), SCIPbendersGetSubproblemObjval(), SCIPrelDiff(), SCIPsetDebugMsg, SCIPsetGetRealParam(), and TRUE.
Referenced by SCIPcheckBendersSubproblemOptimality(), and solveBendersSubproblems().
◆ SCIPbendersGetAuxiliaryVarVal()
SCIP_Real SCIPbendersGetAuxiliaryVarVal | ( | SCIP_BENDERS * | benders, |
SCIP_SET * | set, | ||
SCIP_SOL * | sol, | ||
int | probnumber | ||
) |
returns the value of the auxiliary variable value in a master problem solution
- Parameters
-
benders the benders' decomposition structure set global SCIP settings sol primal CIP solution probnumber the subproblem number
Definition at line 3688 of file benders.c.
References NULL, SCIPbendersGetAuxiliaryVar(), and SCIPgetSolVal().
Referenced by SCIPbendersCheckSubproblemOptimality(), SCIPbendersExecSubproblemSolve(), SCIPgetBendersAuxiliaryVarVal(), and solveBendersSubproblems().
◆ SCIPbendersComputeSubproblemLowerbound()
SCIP_RETCODE SCIPbendersComputeSubproblemLowerbound | ( | SCIP_BENDERS * | benders, |
SCIP_SET * | set, | ||
int | probnumber, | ||
SCIP_Real * | lowerbound, | ||
SCIP_Bool * | infeasible | ||
) |
Solves an independent subproblem to identify its lower bound. The lower bound is then used to update the bound on the auxiliary variable.
- Parameters
-
benders Benders' decomposition set global SCIP settings probnumber the subproblem to be evaluated lowerbound the lowerbound for the subproblem infeasible was the subproblem found to be infeasible?
Definition at line 3709 of file benders.c.
References copyMemoryAndTimeLimits(), FALSE, MIPNODEFOCUS_EVENTHDLR_NAME, NULL, SCIP_Bool, SCIP_CALL, SCIP_Longint, SCIP_LPSOLSTAT_INFEASIBLE, SCIP_OKAY, SCIP_Real, SCIP_STATUS_INFEASIBLE, SCIP_VERBLEVEL_FULL, SCIP_VERBLEVEL_HIGH, SCIP_VERBLEVEL_NONE, SCIPbendersFreeSubproblem(), SCIPbendersGetAuxiliaryVar(), SCIPbendersSubproblem(), SCIPbendersSubproblemIsConvex(), SCIPbendersSubproblemIsIndependent(), SCIPeventhdlrGetData(), SCIPfindEventhdlr(), SCIPgetDualbound(), SCIPgetIntParam(), SCIPgetLongintParam(), SCIPgetLPSolstat(), SCIPgetRealParam(), SCIPgetStatus(), SCIPinfinity(), SCIPinfoMessage(), SCIPisLPConstructed(), SCIPsetIntParam(), SCIPsetLongintParam(), SCIPsetRealParam(), SCIPsolve(), SCIPsolveProbingLP(), SCIPstartProbing(), SCIPvarGetLbGlobal(), SCIPverbMessage(), and TRUE.
Referenced by SCIPcomputeBendersSubproblemLowerbound(), and updateAuxiliaryVarLowerbound().
◆ SCIPbendersMergeSubproblemIntoMaster()
SCIP_RETCODE SCIPbendersMergeSubproblemIntoMaster | ( | SCIP_BENDERS * | benders, |
SCIP_SET * | set, | ||
SCIP_HASHMAP * | varmap, | ||
SCIP_HASHMAP * | consmap, | ||
int | probnumber | ||
) |
Merges a subproblem into the master problem. This process just adds a copy of the subproblem variables and constraints to the master problem, but keeps the subproblem stored in the Benders' decomposition data structure. The reason for keeping the subproblem available is for when it is queried for solutions after the problem is solved.
Once the subproblem is merged into the master problem, then the subproblem is flagged as disabled. This means that it will not be solved in the subsequent subproblem solving loops.
The associated auxiliary variables are kept in the master problem. The objective function of the merged subproblem is added as an underestimator constraint.
- Parameters
-
benders Benders' decomposition set global SCIP settings varmap a hashmap to store the mapping of subproblem variables corresponding to the newly created master variables, or NULL consmap a hashmap to store the mapping of subproblem constraints to the corresponding newly created constraints, or NULL probnumber the number of the subproblem that will be merged into the master problem
Definition at line 3838 of file benders.c.
References FALSE, NULL, SCIP_Bool, SCIP_CALL, SCIP_MAXSTRLEN, SCIP_OKAY, SCIP_Real, SCIP_VERBLEVEL_HIGH, SCIPaddCoefLinear(), SCIPaddCons(), SCIPaddVar(), SCIPbendersFreeSubproblem(), SCIPbendersGetAuxiliaryVar(), SCIPbendersSetSubproblemEnabled(), SCIPbendersSubproblem(), SCIPblkmem(), SCIPconsGetHdlr(), SCIPconsIsChecked(), SCIPconsIsDynamic(), SCIPconsIsEnforced(), SCIPconsIsInitial(), SCIPconsIsModifiable(), SCIPconsIsPropagated(), SCIPconsIsRemovable(), SCIPconsIsSeparated(), SCIPcreateConsBasicLinear(), SCIPcreateVarBasic(), SCIPgetBendersMasterVar(), SCIPgetConsCopy(), SCIPgetConss(), SCIPgetNConss(), SCIPgetNVars(), SCIPgetVars(), SCIPhashmapCreate(), SCIPhashmapFree(), SCIPhashmapInsert(), SCIPreleaseCons(), SCIPreleaseVar(), SCIPsetConsRemovable(), SCIPsetInfinity(), SCIPsnprintf(), SCIPvarGetLbOriginal(), SCIPvarGetName(), SCIPvarGetObj(), SCIPvarGetOrigvarSum(), SCIPvarGetType(), SCIPvarGetUbOriginal(), SCIPverbMessage(), and TRUE.
Referenced by SCIPmergeBendersSubproblemIntoMaster().
◆ SCIPbendersGetVar()
SCIP_RETCODE SCIPbendersGetVar | ( | SCIP_BENDERS * | benders, |
SCIP_SET * | set, | ||
SCIP_VAR * | var, | ||
SCIP_VAR ** | mappedvar, | ||
int | probnumber | ||
) |
Returns the corresponding master or subproblem variable for the given variable. This provides a call back for the variable mapping between the master and subproblems.
- Parameters
-
benders Benders' decomposition set global SCIP settings var the variable for which the corresponding variable is desired mappedvar the variable that is mapped to var probnumber the problem number for the desired variable, -1 for the master problem
Definition at line 4021 of file benders.c.
References AUXILIARYVAR_NAME, NULL, SCIP_CALL, SCIP_OKAY, and SCIPvarGetName().
Referenced by createSubproblems(), SCIPbendersChgMastervarsToCont(), SCIPbendersSetupSubproblem(), SCIPgetBendersMasterVar(), and SCIPgetBendersSubproblemVar().
◆ SCIPbendersSetCopy()
void SCIPbendersSetCopy | ( | SCIP_BENDERS * | benders, |
SCIP_DECL_BENDERSCOPY((*benderscopy)) | |||
) |
sets copy callback of Benders' decomposition
- Parameters
-
benders Benders' decomposition
Definition at line 4068 of file benders.c.
References NULL.
Referenced by SCIPsetBendersCopy().
◆ SCIPbendersSetFree()
void SCIPbendersSetFree | ( | SCIP_BENDERS * | benders, |
SCIP_DECL_BENDERSFREE((*bendersfree)) | |||
) |
sets destructor callback of Benders' decomposition
- Parameters
-
benders Benders' decomposition
Definition at line 4079 of file benders.c.
References NULL.
Referenced by SCIPsetBendersFree().
◆ SCIPbendersSetInit()
void SCIPbendersSetInit | ( | SCIP_BENDERS * | benders, |
SCIP_DECL_BENDERSINIT((*bendersinit)) | |||
) |
sets initialization callback of Benders' decomposition
- Parameters
-
benders Benders' decomposition
Definition at line 4090 of file benders.c.
References NULL.
Referenced by SCIPsetBendersInit().
◆ SCIPbendersSetExit()
void SCIPbendersSetExit | ( | SCIP_BENDERS * | benders, |
SCIP_DECL_BENDERSEXIT((*bendersexit)) | |||
) |
sets deinitialization callback of Benders' decomposition
- Parameters
-
benders Benders' decomposition
Definition at line 4101 of file benders.c.
References NULL.
Referenced by SCIPsetBendersExit().
◆ SCIPbendersSetInitpre()
void SCIPbendersSetInitpre | ( | SCIP_BENDERS * | benders, |
SCIP_DECL_BENDERSINITPRE((*bendersinitpre)) | |||
) |
sets presolving initialization callback of Benders' decomposition
- Parameters
-
benders Benders' decomposition
Definition at line 4112 of file benders.c.
References NULL.
Referenced by SCIPsetBendersInitpre().
◆ SCIPbendersSetExitpre()
void SCIPbendersSetExitpre | ( | SCIP_BENDERS * | benders, |
SCIP_DECL_BENDERSEXITPRE((*bendersexitpre)) | |||
) |
sets presolving deinitialization callback of Benders' decomposition
- Parameters
-
benders Benders' decomposition
Definition at line 4123 of file benders.c.
References NULL.
Referenced by SCIPsetBendersExitpre().
◆ SCIPbendersSetInitsol()
void SCIPbendersSetInitsol | ( | SCIP_BENDERS * | benders, |
SCIP_DECL_BENDERSINITSOL((*bendersinitsol)) | |||
) |
sets solving process initialization callback of Benders' decomposition
- Parameters
-
benders Benders' decomposition
Definition at line 4134 of file benders.c.
References NULL.
Referenced by SCIPsetBendersInitsol().
◆ SCIPbendersSetExitsol()
void SCIPbendersSetExitsol | ( | SCIP_BENDERS * | benders, |
SCIP_DECL_BENDERSEXITSOL((*bendersexitsol)) | |||
) |
sets solving process deinitialization callback of Benders' decomposition
- Parameters
-
benders Benders' decomposition
Definition at line 4145 of file benders.c.
References NULL.
Referenced by SCIPsetBendersExitsol().
◆ SCIPbendersSetPresubsolve()
void SCIPbendersSetPresubsolve | ( | SCIP_BENDERS * | benders, |
SCIP_DECL_BENDERSPRESUBSOLVE((*benderspresubsolve)) | |||
) |
sets the pre subproblem solve callback of Benders' decomposition
- Parameters
-
benders Benders' decomposition
Definition at line 4156 of file benders.c.
References NULL.
Referenced by SCIPsetBendersPresubsolve().
◆ SCIPbendersSetSolvesubconvex()
void SCIPbendersSetSolvesubconvex | ( | SCIP_BENDERS * | benders, |
SCIP_DECL_BENDERSSOLVESUBCONVEX((*benderssolvesubconvex)) | |||
) |
sets convex solve callback of Benders' decomposition
- Parameters
-
benders Benders' decomposition
Definition at line 4167 of file benders.c.
References NULL.
Referenced by SCIPsetBendersSolveAndFreesub().
◆ SCIPbendersSetSolvesub()
void SCIPbendersSetSolvesub | ( | SCIP_BENDERS * | benders, |
SCIP_DECL_BENDERSSOLVESUB((*benderssolvesub)) | |||
) |
sets solve callback of Benders' decomposition
- Parameters
-
benders Benders' decomposition
Definition at line 4178 of file benders.c.
References NULL.
Referenced by SCIPsetBendersSolveAndFreesub().
◆ SCIPbendersSetPostsolve()
void SCIPbendersSetPostsolve | ( | SCIP_BENDERS * | benders, |
SCIP_DECL_BENDERSPOSTSOLVE((*benderspostsolve)) | |||
) |
sets post-solve callback of Benders' decomposition
- Parameters
-
benders Benders' decomposition
Definition at line 4189 of file benders.c.
References NULL.
Referenced by SCIPsetBendersPostsolve().
◆ SCIPbendersSetFreesub()
void SCIPbendersSetFreesub | ( | SCIP_BENDERS * | benders, |
SCIP_DECL_BENDERSFREESUB((*bendersfreesub)) | |||
) |
sets free subproblem callback of Benders' decomposition
- Parameters
-
benders Benders' decomposition
Definition at line 4200 of file benders.c.
References NULL.
Referenced by SCIPsetBendersSolveAndFreesub().
◆ SCIPbendersSetPriority()
void SCIPbendersSetPriority | ( | SCIP_BENDERS * | benders, |
SCIP_SET * | set, | ||
int | priority | ||
) |
sets priority of Benders' decomposition
- Parameters
-
benders Benders' decomposition set global SCIP settings priority new priority of the Benders' decomposition
Definition at line 4241 of file benders.c.
References FALSE, NULL, and SCIP_Benders::priority.
Referenced by SCIPsetBendersPriority().
◆ SCIPbendersEnableOrDisableClocks()
void SCIPbendersEnableOrDisableClocks | ( | SCIP_BENDERS * | benders, |
SCIP_Bool | enable | ||
) |
enables or disables all clocks of the Benders' decomposition, depending on the value of the flag
- Parameters
-
benders the Benders' decomposition for which all clocks should be enabled or disabled enable should the clocks of the Benders' decomposition be enabled?
Definition at line 4317 of file benders.c.
References SCIP_Benders::bendersclock, NULL, SCIPclockEnableOrDisable(), and SCIP_Benders::setuptime.
◆ SCIPbendersAddSubproblem()
SCIP_RETCODE SCIPbendersAddSubproblem | ( | SCIP_BENDERS * | benders, |
SCIP * | subproblem | ||
) |
adds a subproblem to the Benders' decomposition data
- Parameters
-
benders Benders' decomposition subproblem subproblem to be added to the data storage
Definition at line 4379 of file benders.c.
References SCIP_Benders::naddedsubprobs, SCIP_Benders::nsubproblems, NULL, SCIP_OKAY, and SCIP_Benders::subproblems.
Referenced by SCIPaddBendersSubproblem().
◆ SCIPbendersRemoveSubproblems()
void SCIPbendersRemoveSubproblems | ( | SCIP_BENDERS * | benders | ) |
removes the subproblems from the Benders' decomposition data
- Parameters
-
benders Benders' decomposition
Definition at line 4397 of file benders.c.
References BMSclearMemoryArray, SCIP_Benders::naddedsubprobs, NULL, and SCIP_Benders::subproblems.
◆ SCIPbendersChgMastervarsToCont()
SCIP_RETCODE SCIPbendersChgMastervarsToCont | ( | SCIP_BENDERS * | benders, |
SCIP_SET * | set, | ||
int | probnumber | ||
) |
changes all of the master problem variables in the given subproblem to continuous.
- Parameters
-
benders Benders' decomposition set global SCIP settings probnumber the subproblem number
Definition at line 4511 of file benders.c.
References initialiseLPSubproblem(), NULL, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_VARTYPE_CONTINUOUS, SCIPbendersGetMastervarsCont(), SCIPbendersGetNSubproblems(), SCIPbendersGetVar(), SCIPbendersSetMastervarsCont(), SCIPbendersSetSubproblemIsConvex(), SCIPbendersSubproblem(), SCIPchgVarType(), SCIPgetVarsData(), SCIPvarGetType(), and TRUE.
Referenced by SCIPbendersSetupSubproblem().
◆ SCIPbendersSetSubproblemIsSetup()
void SCIPbendersSetSubproblemIsSetup | ( | SCIP_BENDERS * | benders, |
int | probnumber, | ||
SCIP_Bool | issetup | ||
) |
sets the subproblem setup flag
- Parameters
-
benders Benders' decomposition probnumber the subproblem number issetup flag to indicate whether the subproblem has been setup
Definition at line 4581 of file benders.c.
References NULL, SCIPbendersGetNSubproblems(), and SCIP_Benders::subprobsetup.
Referenced by SCIPbendersFreeSubproblem(), and SCIPbendersSetupSubproblem().
◆ SCIPbendersSubproblemIsSetup()
SCIP_Bool SCIPbendersSubproblemIsSetup | ( | SCIP_BENDERS * | benders, |
int | probnumber | ||
) |
returns the subproblem setup flag
- Parameters
-
benders Benders' decomposition probnumber the subproblem number
Definition at line 4594 of file benders.c.
References NULL, SCIPbendersGetNSubproblems(), and SCIP_Benders::subprobsetup.
Referenced by SCIPbendersExecSubproblemSolve(), SCIPbendersSolveSubproblem(), and SCIPbendersSolveSubproblemLP().
◆ SCIPbendersSetSubproblemEnabled()
void SCIPbendersSetSubproblemEnabled | ( | SCIP_BENDERS * | benders, |
int | probnumber, | ||
SCIP_Bool | enabled | ||
) |
Sets whether the subproblem is enabled or disabled. A subproblem is disabled if it has been merged into the master problem.
- Parameters
-
benders Benders' decomposition probnumber the subproblem number enabled flag to indicate whether the subproblem is enabled
Definition at line 4660 of file benders.c.
References SCIP_Benders::nactivesubprobs, NULL, SCIP_Bool, SCIPbendersGetNSubproblems(), SCIP_Benders::subprobenabled, and subproblemIsActive().
Referenced by SCIPbendersMergeSubproblemIntoMaster().
◆ SCIPbendersSetMastervarsCont()
SCIP_RETCODE SCIPbendersSetMastervarsCont | ( | SCIP_BENDERS * | benders, |
int | probnumber, | ||
SCIP_Bool | arecont | ||
) |
sets a flag to indicate whether the master variables are all set to continuous
- Parameters
-
benders Benders' decomposition probnumber the subproblem number arecont flag to indicate whether the master problem variables are continuous
Definition at line 4698 of file benders.c.
References FALSE, SCIP_Benders::mastervarscont, NULL, SCIP_CALL, SCIP_OKAY, SCIPbendersGetNSubproblems(), SCIPbendersSetSubproblemIsConvex(), SCIPbendersSubproblem(), SCIPendProbing(), and SCIPinProbing().
Referenced by SCIPbendersChgMastervarsToCont().
◆ SCIPbendersGetMastervarsCont()
SCIP_Bool SCIPbendersGetMastervarsCont | ( | SCIP_BENDERS * | benders, |
int | probnumber | ||
) |
returns whether the master variables are all set to continuous
- Parameters
-
benders Benders' decomposition probnumber the subproblem number
Definition at line 4725 of file benders.c.
References SCIP_Benders::mastervarscont, NULL, and SCIPbendersGetNSubproblems().
Referenced by SCIPbendersChgMastervarsToCont().
◆ SCIPbendersSetBenderscutsSorted()
void SCIPbendersSetBenderscutsSorted | ( | SCIP_BENDERS * | benders, |
SCIP_Bool | sorted | ||
) |
sets the sorted flags in the Benders' decomposition
- Parameters
-
benders Benders' decomposition structure sorted the value to set the sorted flag to
Definition at line 4780 of file benders.c.
References SCIP_Benders::benderscutsnamessorted, SCIP_Benders::benderscutssorted, and NULL.
Referenced by SCIPsetBenderscutPriority().
◆ SCIPbendersIncludeBenderscut()
SCIP_RETCODE SCIPbendersIncludeBenderscut | ( | SCIP_BENDERS * | benders, |
SCIP_SET * | set, | ||
SCIP_BENDERSCUT * | benderscut | ||
) |
inserts a Benders' cut into the Benders' cuts list
- Parameters
-
benders Benders' decomposition structure set global SCIP settings benderscut Benders' cut
Definition at line 4792 of file benders.c.
References SCIP_Benders::benderscuts, SCIP_Benders::benderscutssize, SCIP_Benders::benderscutssorted, BMSreallocMemoryArray, FALSE, SCIP_Benders::nbenderscuts, NULL, SCIP_ALLOC, SCIP_OKAY, and SCIPsetCalcMemGrowSize().
Referenced by SCIPincludeBenderscut(), and SCIPincludeBenderscutBasic().
◆ SCIPbendersSortBenderscuts()
void SCIPbendersSortBenderscuts | ( | SCIP_BENDERS * | benders | ) |
sorts Benders' decomposition cuts by priorities
- Parameters
-
benders Benders' decomposition
Definition at line 4881 of file benders.c.
References SCIP_Benders::benderscuts, SCIP_Benders::benderscutsnamessorted, SCIP_Benders::benderscutssorted, FALSE, SCIP_Benders::nbenderscuts, NULL, SCIPsortPtr(), and TRUE.
Referenced by SCIPbendersCopyInclude(), SCIPbendersExit(), SCIPbendersExitsol(), SCIPbendersInit(), and SCIPbendersInitsol().
◆ SCIPbendersSortBenderscutsName()
void SCIPbendersSortBenderscutsName | ( | SCIP_BENDERS * | benders | ) |
sorts Benders' decomposition cuts by name
- Parameters
-
benders Benders' decomposition
Definition at line 4896 of file benders.c.
References SCIP_Benders::benderscuts, SCIP_Benders::benderscutsnamessorted, SCIP_Benders::benderscutssorted, FALSE, SCIP_Benders::nbenderscuts, NULL, SCIPsortPtr(), and TRUE.