61#define BENDERS_NAME "default"
62#define BENDERS_DESC "default implementation of Benders' decomposition"
63#define BENDERS_PRIORITY 0
64#define BENDERS_CUTLP TRUE
65#define BENDERS_CUTPSEUDO TRUE
66#define BENDERS_CUTRELAX TRUE
67#define BENDERS_SHAREAUXVARS FALSE
75struct SCIP_BendersData
84 SCIP_Bool subprobscopied;
85 SCIP_Bool mappingcreated;
109 (*bendersdata)->nsubproblems = nsubproblems;
114 for(
i = 0;
i < nsubproblems;
i++ )
115 (*bendersdata)->subproblems[
i] = subproblems[
i];
117 (*bendersdata)->created =
TRUE;
149 nsubproblems = bendersdata->nsubproblems;
155 bendersdata->nmastervars =
nvars;
161 for(
i = 0;
i < nsubproblems;
i++ )
195 for(
j = 0;
j < nsubproblems;
j++ )
207 bendersdata->subproblemvars[
j][
i] =
subvar;
219 bendersdata->mappingcreated =
TRUE;
259 for(
i = 0;
i < bendersdata->nsubproblems;
i++ )
275 subproblems = bendersdata->subproblems;
317 assert(bendersdata->subvartomastervar ==
NULL);
318 assert(bendersdata->mastervartosubindex ==
NULL);
319 if( bendersdata->created )
322 if( bendersdata->subprobscopied )
324 for(
i = bendersdata->nsubproblems - 1;
i >= 0;
i-- )
370 if( bendersdata->mappingcreated )
372 for(
i = bendersdata->nsubproblems - 1;
i >= 0;
i-- )
374 for(
j = 0;
j < bendersdata->nmastervars;
j++ )
376 if( bendersdata->subproblemvars[
i][
j] !=
NULL )
506 SCIPerrorMessage(
"The number of restarts is fixed to %d. The default Benders' decomposition requires the number"
static SCIP_RETCODE createVariableMappings(SCIP *scip, SCIP_BENDERS *benders)
static SCIP_RETCODE createBendersData(SCIP *scip, SCIP **subproblems, SCIP_BENDERSDATA **bendersdata, int nsubproblems)
#define BENDERS_CUTPSEUDO
#define BENDERS_SHAREAUXVARS
default Benders' decomposition plugin
SCIP_RETCODE SCIPincludeBendersDefaultCuts(SCIP *scip, SCIP_BENDERS *benders)
SCIP_RETCODE SCIPcreateBendersDefault(SCIP *scip, SCIP **subproblems, int nsubproblems)
SCIP_RETCODE SCIPincludeBendersDefault(SCIP *scip)
SCIP_RETCODE SCIPcopyOrig(SCIP *sourcescip, SCIP *targetscip, SCIP_HASHMAP *varmap, SCIP_HASHMAP *consmap, const char *suffix, SCIP_Bool enablepricing, SCIP_Bool threadsafe, SCIP_Bool passmessagehdlr, SCIP_Bool *valid)
int SCIPgetSubscipDepth(SCIP *scip)
SCIP_RETCODE SCIPfree(SCIP **scip)
SCIP_RETCODE SCIPcreate(SCIP **scip)
int SCIPgetNVars(SCIP *scip)
SCIP_VAR ** SCIPgetVars(SCIP *scip)
SCIP_VAR * SCIPfindVar(SCIP *scip, const char *name)
void SCIPhashmapFree(SCIP_HASHMAP **hashmap)
int SCIPhashmapGetImageInt(SCIP_HASHMAP *hashmap, void *origin)
void * SCIPhashmapGetImage(SCIP_HASHMAP *hashmap, void *origin)
SCIP_RETCODE SCIPhashmapInsert(SCIP_HASHMAP *hashmap, void *origin, void *image)
SCIP_RETCODE SCIPhashmapCreate(SCIP_HASHMAP **hashmap, BMS_BLKMEM *blkmem, int mapsize)
SCIP_RETCODE SCIPhashmapInsertInt(SCIP_HASHMAP *hashmap, void *origin, int image)
SCIP_Bool SCIPisParamFixed(SCIP *scip, const char *name)
SCIP_RETCODE SCIPsetIntParam(SCIP *scip, const char *name, int value)
SCIP_RETCODE SCIPgetIntParam(SCIP *scip, const char *name, int *value)
SCIP_RETCODE SCIPfixParam(SCIP *scip, const char *name)
SCIP_RETCODE SCIPaddBendersSubproblem(SCIP *scip, SCIP_BENDERS *benders, SCIP *subproblem)
SCIP_RETCODE SCIPsetBendersFree(SCIP *scip, SCIP_BENDERS *benders,)
SCIP_BENDERS * SCIPfindBenders(SCIP *scip, const char *name)
SCIP_RETCODE SCIPactivateBenders(SCIP *scip, SCIP_BENDERS *benders, int nsubproblems)
SCIP_RETCODE SCIPincludeBendersBasic(SCIP *scip, SCIP_BENDERS **bendersptr, const char *name, const char *desc, int priority, SCIP_Bool cutlp, SCIP_Bool cutpseudo, SCIP_Bool cutrelax, SCIP_Bool shareauxvars, SCIP_DECL_BENDERSGETVAR((*bendersgetvar)), SCIP_DECL_BENDERSCREATESUB((*benderscreatesub)), SCIP_BENDERSDATA *bendersdata)
SCIP_RETCODE SCIPsetBendersInit(SCIP *scip, SCIP_BENDERS *benders,)
SCIP_Bool SCIPbendersIsActive(SCIP_BENDERS *benders)
SCIP_BENDERSDATA * SCIPbendersGetData(SCIP_BENDERS *benders)
SCIP_RETCODE SCIPsetBendersExit(SCIP *scip, SCIP_BENDERS *benders,)
SCIP_RETCODE SCIPsetBendersCopy(SCIP *scip, SCIP_BENDERS *benders,)
#define SCIPfreeBlockMemoryArray(scip, ptr, num)
#define SCIPallocBufferArray(scip, ptr, num)
#define SCIPfreeBufferArray(scip, ptr)
#define SCIPallocBlockMemoryArray(scip, ptr, num)
#define SCIPfreeBlockMemory(scip, ptr)
#define SCIPallocBlockMemory(scip, ptr)
SCIP_RETCODE SCIPvarGetOrigvarSum(SCIP_VAR **var, SCIP_Real *scalar, SCIP_Real *constant)
const char * SCIPvarGetName(SCIP_VAR *var)
SCIP_RETCODE SCIPreleaseVar(SCIP *scip, SCIP_VAR **var)
SCIP_RETCODE SCIPcaptureVar(SCIP *scip, SCIP_VAR *var)
int SCIPsnprintf(char *t, int len, const char *s,...)
assert(minobj< SCIPgetCutoffbound(scip))
#define BMSclearMemory(ptr)
BMS_BLKMEM * SCIPblkmem(SCIP *scip)
public methods for Benders' decomposition
public methods for message output
public data structures and miscellaneous methods
public methods for problem variables
#define SCIP_DECL_BENDERSCREATESUB(x)
#define SCIP_DECL_BENDERSCOPY(x)
#define SCIP_DECL_BENDERSINIT(x)
#define SCIP_DECL_BENDERSFREE(x)
#define SCIP_DECL_BENDERSGETVAR(x)
#define SCIP_DECL_BENDERSEXIT(x)
struct SCIP_BendersData SCIP_BENDERSDATA
enum SCIP_Retcode SCIP_RETCODE