Scippy

SCIP

Solving Constraint Integer Programs

benderscut.c File Reference

Detailed Description

methods for Benders' decomposition cut

Author
Stephen J. Maher

Definition in file benderscut.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/scip.h"
#include "scip/benderscut.h"
#include "scip/reopt.h"
#include "scip/pub_message.h"
#include "scip/pub_misc.h"
#include "scip/pub_benders.h"
#include "scip/struct_benderscut.h"

Go to the source code of this file.

Macros

#define BENDERSCUT_ARRAYSIZE   10
 
#define SCIP_DEFAULT_ENABLED   TRUE
 

Functions

 SCIP_DECL_SORTPTRCOMP (SCIPbenderscutComp)
 
 SCIP_DECL_SORTPTRCOMP (SCIPbenderscutCompName)
 
static SCIP_DECL_PARAMCHGD (paramChgdBenderscutPriority)
 
SCIP_RETCODE SCIPbenderscutCopyInclude (SCIP_BENDERS *benders, SCIP_BENDERSCUT *benderscut, SCIP_SET *set)
 
SCIP_RETCODE SCIPbenderscutCreate (SCIP_BENDERS *benders, SCIP_BENDERSCUT **benderscut, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem, const char *name, const char *desc, int priority, SCIP_Bool islpcut, SCIP_DECL_BENDERSCUTCOPY((*benderscutcopy)), SCIP_DECL_BENDERSCUTFREE((*benderscutfree)), SCIP_DECL_BENDERSCUTINIT((*benderscutinit)), SCIP_DECL_BENDERSCUTEXIT((*benderscutexit)), SCIP_DECL_BENDERSCUTINITSOL((*benderscutinitsol)), SCIP_DECL_BENDERSCUTEXITSOL((*benderscutexitsol)), SCIP_DECL_BENDERSCUTEXEC((*benderscutexec)), SCIP_BENDERSCUTDATA *benderscutdata)
 
SCIP_RETCODE SCIPbenderscutFree (SCIP_BENDERSCUT **benderscut, SCIP_SET *set)
 
SCIP_RETCODE SCIPbenderscutInit (SCIP_BENDERSCUT *benderscut, SCIP_SET *set)
 
SCIP_RETCODE SCIPbenderscutExit (SCIP_BENDERSCUT *benderscut, SCIP_SET *set)
 
SCIP_RETCODE SCIPbenderscutInitsol (SCIP_BENDERSCUT *benderscut, SCIP_SET *set)
 
SCIP_RETCODE SCIPbenderscutExitsol (SCIP_BENDERSCUT *benderscut, SCIP_SET *set)
 
SCIP_RETCODE SCIPbenderscutExec (SCIP_BENDERSCUT *benderscut, SCIP_SET *set, SCIP_BENDERS *benders, SCIP_SOL *sol, int probnumber, SCIP_BENDERSENFOTYPE type, SCIP_RESULT *result)
 
SCIP_BENDERSCUTDATASCIPbenderscutGetData (SCIP_BENDERSCUT *benderscut)
 
void SCIPbenderscutSetData (SCIP_BENDERSCUT *benderscut, SCIP_BENDERSCUTDATA *benderscutdata)
 
void SCIPbenderscutSetCopy (SCIP_BENDERSCUT *benderscut, SCIP_DECL_BENDERSCUTCOPY((*benderscutcopy)))
 
void SCIPbenderscutSetFree (SCIP_BENDERSCUT *benderscut, SCIP_DECL_BENDERSCUTFREE((*benderscutfree)))
 
void SCIPbenderscutSetInit (SCIP_BENDERSCUT *benderscut, SCIP_DECL_BENDERSCUTINIT((*benderscutinit)))
 
void SCIPbenderscutSetExit (SCIP_BENDERSCUT *benderscut, SCIP_DECL_BENDERSCUTEXIT((*benderscutexit)))
 
void SCIPbenderscutSetInitsol (SCIP_BENDERSCUT *benderscut, SCIP_DECL_BENDERSCUTINITSOL((*benderscutinitsol)))
 
void SCIPbenderscutSetExitsol (SCIP_BENDERSCUT *benderscut, SCIP_DECL_BENDERSCUTEXITSOL((*benderscutexitsol)))
 
const char * SCIPbenderscutGetName (SCIP_BENDERSCUT *benderscut)
 
const char * SCIPbenderscutGetDesc (SCIP_BENDERSCUT *benderscut)
 
int SCIPbenderscutGetPriority (SCIP_BENDERSCUT *benderscut)
 
void SCIPbenderscutSetPriority (SCIP_BENDERSCUT *benderscut, int priority)
 
SCIP_Longint SCIPbenderscutGetNCalls (SCIP_BENDERSCUT *benderscut)
 
SCIP_Longint SCIPbenderscutGetNFound (SCIP_BENDERSCUT *benderscut)
 
SCIP_Bool SCIPbenderscutIsInitialized (SCIP_BENDERSCUT *benderscut)
 
SCIP_Real SCIPbenderscutGetSetupTime (SCIP_BENDERSCUT *benderscut)
 
SCIP_Real SCIPbenderscutGetTime (SCIP_BENDERSCUT *benderscut)
 
SCIP_RETCODE SCIPbenderscutGetAddedConss (SCIP_BENDERSCUT *benderscut, SCIP_CONS ***addedconss, int *naddedconss)
 
SCIP_RETCODE SCIPbenderscutGetAddedCuts (SCIP_BENDERSCUT *benderscut, SCIP_ROW ***addedcuts, int *naddedcuts)
 
SCIP_RETCODE SCIPbenderscutStoreCons (SCIP_BENDERSCUT *benderscut, SCIP_SET *set, SCIP_CONS *cons)
 
SCIP_RETCODE SCIPbenderscutStoreCut (SCIP_BENDERSCUT *benderscut, SCIP_SET *set, SCIP_ROW *cut)
 
SCIP_Bool SCIPbenderscutIsLPCut (SCIP_BENDERSCUT *benderscut)
 
void SCIPbenderscutSetEnabled (SCIP_BENDERSCUT *benderscut, SCIP_Bool enabled)
 

Macro Definition Documentation

◆ BENDERSCUT_ARRAYSIZE

#define BENDERSCUT_ARRAYSIZE   10

the initial size of the added constraints/cuts arrays

Definition at line 39 of file benderscut.c.

Referenced by SCIPbenderscutInit().

◆ SCIP_DEFAULT_ENABLED

#define SCIP_DEFAULT_ENABLED   TRUE

Definition at line 42 of file benderscut.c.

Referenced by SCIPbenderscutCreate().

Function Documentation

◆ SCIP_DECL_PARAMCHGD()

static SCIP_DECL_PARAMCHGD ( paramChgdBenderscutPriority  )
static

method to call, when the priority of a compression was changed

Definition at line 64 of file benderscut.c.

References NULL, SCIP_CALL, SCIP_OKAY, SCIPparamGetData(), SCIPparamGetInt(), and SCIPsetBenderscutPriority().

◆ SCIPbenderscutCopyInclude()

SCIP_RETCODE SCIPbenderscutCopyInclude ( SCIP_BENDERS benders,
SCIP_BENDERSCUT benderscut,
SCIP_SET set 
)

copies the given Benders' decomposition cut to a new scip

Parameters
bendersthe Benders' decomposition that the cuts are copied to
benderscutBenders' decomposition cut
setSCIP_SET of SCIP to copy to

Definition at line 78 of file benderscut.c.

References NULL, SCIP_CALL, SCIP_OKAY, SCIPbenderscutGetName(), and SCIPsetDebugMsg.

Referenced by SCIPbendersCopyInclude().

◆ SCIPbenderscutCreate()

SCIP_RETCODE SCIPbenderscutCreate ( SCIP_BENDERS benders,
SCIP_BENDERSCUT **  benderscut,
SCIP_SET set,
SCIP_MESSAGEHDLR messagehdlr,
BMS_BLKMEM blkmem,
const char *  name,
const char *  desc,
int  priority,
SCIP_Bool  islpcut,
SCIP_DECL_BENDERSCUTCOPY((*benderscutcopy))  ,
SCIP_DECL_BENDERSCUTFREE((*benderscutfree))  ,
SCIP_DECL_BENDERSCUTINIT((*benderscutinit))  ,
SCIP_DECL_BENDERSCUTEXIT((*benderscutexit))  ,
SCIP_DECL_BENDERSCUTINITSOL((*benderscutinitsol))  ,
SCIP_DECL_BENDERSCUTEXITSOL((*benderscutexitsol))  ,
SCIP_DECL_BENDERSCUTEXEC((*benderscutexec))  ,
SCIP_BENDERSCUTDATA benderscutdata 
)

creates a Benders' decomposition cut

Parameters
bendersBenders' decomposition
benderscutpointer to the Benders' decomposition cut data structure
setglobal SCIP settings
messagehdlrmessage handler
blkmemblock memory for parameter settings
namename of the Benders' decomposition cut
descdescription of the Benders' decomposition cut
prioritypriority of the the Benders' decomposition cut
islpcutindicates whether the cut is generated from the LP solution
benderscutdataBenders' decomposition cut data

Definition at line 98 of file benderscut.c.

References BMSallocMemory, BMSduplicateMemoryArray, FALSE, NULL, SCIP_ALLOC, SCIP_CALL, SCIP_CLOCKTYPE_DEFAULT, SCIP_DEFAULT_ENABLED, SCIP_MAXSTRLEN, SCIP_OKAY, SCIPbendersGetName(), SCIPclockCreate(), SCIPsetAddBoolParam(), SCIPsetAddIntParam(), SCIPsnprintf(), and TRUE.

Referenced by SCIPincludeBenderscut(), and SCIPincludeBenderscutBasic().

◆ SCIPbenderscutFree()

SCIP_RETCODE SCIPbenderscutFree ( SCIP_BENDERSCUT **  benderscut,
SCIP_SET set 
)

calls destructor and frees memory of the Benders' decomposition cut

Parameters
benderscutpointer to the Benders' decomposition cut data structure
setglobal SCIP settings

Definition at line 167 of file benderscut.c.

References BMSfreeMemory, BMSfreeMemoryArray, NULL, SCIP_CALL, SCIP_OKAY, and SCIPclockFree().

Referenced by SCIPbendersFree().

◆ SCIPbenderscutInit()

◆ SCIPbenderscutExit()

◆ SCIPbenderscutInitsol()

SCIP_RETCODE SCIPbenderscutInitsol ( SCIP_BENDERSCUT benderscut,
SCIP_SET set 
)

informs Benders' cut that the branch and bound process is being started

Parameters
benderscutBenders' decomposition cut
setglobal SCIP settings

Definition at line 295 of file benderscut.c.

References NULL, SCIP_CALL, SCIP_OKAY, SCIPclockStart(), SCIPclockStop(), and SCIP_Benderscut::setuptime.

Referenced by SCIPbendersInitsol().

◆ SCIPbenderscutExitsol()

SCIP_RETCODE SCIPbenderscutExitsol ( SCIP_BENDERSCUT benderscut,
SCIP_SET set 
)

informs Benders' decomposition that the branch and bound process data is being freed

Parameters
benderscutBenders' decomposition
setglobal SCIP settings

Definition at line 319 of file benderscut.c.

References NULL, SCIP_CALL, SCIP_OKAY, SCIPclockStart(), SCIPclockStop(), and SCIP_Benderscut::setuptime.

Referenced by SCIPbendersExitsol().

◆ SCIPbenderscutExec()

SCIP_RETCODE SCIPbenderscutExec ( SCIP_BENDERSCUT benderscut,
SCIP_SET set,
SCIP_BENDERS benders,
SCIP_SOL sol,
int  probnumber,
SCIP_BENDERSENFOTYPE  type,
SCIP_RESULT result 
)

calls execution method of the Benders' decomposition cut

Parameters
benderscutBenders' decomposition cut
setglobal SCIP settings
bendersBenders' decomposition
solprimal CIP solution
probnumberthe number of the subproblem for which the cut is generated
typethe enforcement type calling this function
resultpointer to store the result of the callback method

Definition at line 343 of file benderscut.c.

References SCIP_Benderscut::benderscutclock, SCIP_Benderscut::enabled, SCIP_Benderscut::name, SCIP_Benderscut::ncalls, SCIP_Benderscut::nfound, NULL, SCIP_CALL, SCIP_CONSADDED, SCIP_DIDNOTFIND, SCIP_DIDNOTRUN, SCIP_FEASIBLE, SCIP_INVALIDRESULT, SCIP_OKAY, SCIP_SEPARATED, SCIPclockStart(), SCIPclockStop(), SCIPerrorMessage, and SCIPsetDebugMsg.

Referenced by generateBendersCuts().

◆ SCIPbenderscutSetCopy()

void SCIPbenderscutSetCopy ( SCIP_BENDERSCUT benderscut,
SCIP_DECL_BENDERSCUTCOPY((*benderscutcopy))   
)

sets copy callback of the Benders' decomposition cut

Parameters
benderscutBenders' decomposition cut

Definition at line 423 of file benderscut.c.

References NULL.

Referenced by SCIPsetBenderscutCopy().

◆ SCIPbenderscutSetFree()

void SCIPbenderscutSetFree ( SCIP_BENDERSCUT benderscut,
SCIP_DECL_BENDERSCUTFREE((*benderscutfree))   
)

sets destructor callback of the Benders' decomposition cut

Parameters
benderscutBenders' decomposition cut

Definition at line 434 of file benderscut.c.

References NULL.

Referenced by SCIPsetBenderscutFree().

◆ SCIPbenderscutSetInit()

void SCIPbenderscutSetInit ( SCIP_BENDERSCUT benderscut,
SCIP_DECL_BENDERSCUTINIT((*benderscutinit))   
)

sets initialization callback of the Benders' decomposition cut

Parameters
benderscutBenders' decomposition cut

Definition at line 445 of file benderscut.c.

References NULL.

Referenced by SCIPsetBenderscutInit().

◆ SCIPbenderscutSetExit()

void SCIPbenderscutSetExit ( SCIP_BENDERSCUT benderscut,
SCIP_DECL_BENDERSCUTEXIT((*benderscutexit))   
)

sets deinitialization callback of the Benders' decomposition cut

Parameters
benderscutBenders' decomposition cut

Definition at line 456 of file benderscut.c.

References NULL.

Referenced by SCIPsetBenderscutExit().

◆ SCIPbenderscutSetInitsol()

void SCIPbenderscutSetInitsol ( SCIP_BENDERSCUT benderscut,
SCIP_DECL_BENDERSCUTINITSOL((*benderscutinitsol))   
)

sets solving process initialization callback of the Benders' decomposition cut

Parameters
benderscutBenders' decomposition cut

Definition at line 467 of file benderscut.c.

References NULL.

Referenced by SCIPsetBenderscutInitsol().

◆ SCIPbenderscutSetExitsol()

void SCIPbenderscutSetExitsol ( SCIP_BENDERSCUT benderscut,
SCIP_DECL_BENDERSCUTEXITSOL((*benderscutexitsol))   
)

sets solving process deinitialization callback of Benders' decomposition cut

Parameters
benderscutBenders' decomposition cut

Definition at line 478 of file benderscut.c.

References NULL.

Referenced by SCIPsetBenderscutExitsol().

◆ SCIPbenderscutSetPriority()

void SCIPbenderscutSetPriority ( SCIP_BENDERSCUT benderscut,
int  priority 
)

sets priority of the Benders' decomposition cut

Parameters
benderscutBenders' decomposition cut
prioritynew priority of the Benders' decomposition cut

Definition at line 519 of file benderscut.c.

References NULL, and SCIP_Benderscut::priority.

Referenced by SCIPsetBenderscutPriority().

◆ SCIPbenderscutStoreCons()

SCIP_RETCODE SCIPbenderscutStoreCons ( SCIP_BENDERSCUT benderscut,
SCIP_SET set,
SCIP_CONS cons 
)

adds the generated constraint to the Benders' cut storage

Parameters
benderscutBenders' decomposition cut
setglobal SCIP settings
consthe constraint to be added to the Benders' cut storage

Definition at line 616 of file benderscut.c.

References SCIP_Benderscut::addedconss, SCIP_Benderscut::addedconsssize, BMSreallocBlockMemoryArray, SCIP_Benderscut::naddedconss, NULL, SCIP_ALLOC, SCIP_OKAY, SCIPblkmem(), and SCIPsetCalcMemGrowSize().

Referenced by SCIPstoreBenderscutCons().

◆ SCIPbenderscutStoreCut()

SCIP_RETCODE SCIPbenderscutStoreCut ( SCIP_BENDERSCUT benderscut,
SCIP_SET set,
SCIP_ROW cut 
)

adds the generated cuts to the Benders' cut storage

Parameters
benderscutBenders' decomposition cut
setglobal SCIP settings
cutthe cut to be added to the Benders' cut storage

Definition at line 646 of file benderscut.c.

References SCIP_Benderscut::addedcuts, SCIP_Benderscut::addedcutssize, BMSreallocBlockMemoryArray, SCIP_Benderscut::naddedcuts, NULL, SCIP_ALLOC, SCIP_OKAY, SCIPblkmem(), and SCIPsetCalcMemGrowSize().

Referenced by SCIPstoreBenderscutCut().