Scippy

SCIP

Solving Constraint Integer Programs

Detailed Description

fullstrong branching on fractional and multi-aggregated variables

Author
Anna Melchiori
Gerald Gamrath

This branching rule uses all fractional binary and integer variables as candidates, as well as fractional multiaggregated binary and integer variables. Although not directly contained in the presolved problem anymore, the multi-aggregation provides an affine linear sum of integer variables, on which branching can be performed.

For more details, see G.Gamrath, A.Melchiori, T.Berthold, A.M.Gleixner, D.Salvagnin: Branching on Multi-aggregated Variables (http://dx.doi.org/10.1007/978-3-319-18008-3_10)

Definition in file branch_multaggr.c.

#include "blockmemshell/memory.h"
#include "scip/branch_fullstrong.h"
#include "scip/branch_multaggr.h"
#include "scip/cons_linear.h"
#include "scip/pub_branch.h"
#include "scip/pub_cons.h"
#include "scip/pub_message.h"
#include "scip/pub_tree.h"
#include "scip/pub_var.h"
#include "scip/scip_branch.h"
#include "scip/scip_cons.h"
#include "scip/scip_general.h"
#include "scip/scip_lp.h"
#include "scip/scip_mem.h"
#include "scip/scip_message.h"
#include "scip/scip_numerics.h"
#include "scip/scip_param.h"
#include "scip/scip_prob.h"
#include "scip/scip_probing.h"
#include "scip/scip_solvingstats.h"
#include "scip/scip_timing.h"
#include "scip/scip_tree.h"
#include "scip/scip_var.h"
#include "scip/set.h"
#include "scip/struct_scip.h"
#include "scip/var.h"
#include <string.h>

Go to the source code of this file.

Macros

#define BRANCHRULE_NAME   "multaggr"
 
#define BRANCHRULE_DESC   "fullstrong branching on fractional and multi-aggregated variables"
 
#define BRANCHRULE_PRIORITY   0
 
#define BRANCHRULE_MAXDEPTH   -1
 
#define BRANCHRULE_MAXBOUNDDIST   1.0
 
#define DEFAULT_REEVALAGE   0LL
 
#define DEFAULT_MAXPROPROUNDS   0
 
#define DEFAULT_PROBINGBOUNDS   TRUE
 

Functions

static SCIP_RETCODE selectVarMultAggrBranching (SCIP *scip, SCIP_VAR **bestcand, SCIP_Real *bestscore, SCIP_Real *bestsol, SCIP_Real *bestdown, SCIP_Real *bestup, SCIP_Bool *bestdownvalid, SCIP_Bool *bestupvalid, SCIP_Real *provedbound, SCIP_Real *estimatedown, SCIP_Real *estimateup, SCIP_RESULT *result)
 
static SCIP_DECL_BRANCHCOPY (branchCopyMultAggr)
 
static SCIP_DECL_BRANCHFREE (branchFreeMultAggr)
 
static SCIP_DECL_BRANCHINIT (branchInitMultAggr)
 
static SCIP_DECL_BRANCHEXIT (branchExitMultAggr)
 
static SCIP_DECL_BRANCHEXECLP (branchExeclpMultAggr)
 
SCIP_RETCODE SCIPincludeBranchruleMultAggr (SCIP *scip)
 

Macro Definition Documentation

◆ BRANCHRULE_NAME

#define BRANCHRULE_NAME   "multaggr"

Definition at line 69 of file branch_multaggr.c.

◆ BRANCHRULE_DESC

#define BRANCHRULE_DESC   "fullstrong branching on fractional and multi-aggregated variables"

Definition at line 70 of file branch_multaggr.c.

◆ BRANCHRULE_PRIORITY

#define BRANCHRULE_PRIORITY   0

Definition at line 71 of file branch_multaggr.c.

◆ BRANCHRULE_MAXDEPTH

#define BRANCHRULE_MAXDEPTH   -1

Definition at line 72 of file branch_multaggr.c.

◆ BRANCHRULE_MAXBOUNDDIST

#define BRANCHRULE_MAXBOUNDDIST   1.0

Definition at line 73 of file branch_multaggr.c.

◆ DEFAULT_REEVALAGE

#define DEFAULT_REEVALAGE   0LL

number of intermediate LPs solved to trigger reevaluation of strong branching value for a variable that was already evaluated at the current node

Definition at line 77 of file branch_multaggr.c.

◆ DEFAULT_MAXPROPROUNDS

#define DEFAULT_MAXPROPROUNDS   0

maximum number of propagation rounds to be performed during multaggr branching before solving the LP (-1: no limit, -2: parameter settings)

Definition at line 79 of file branch_multaggr.c.

◆ DEFAULT_PROBINGBOUNDS

#define DEFAULT_PROBINGBOUNDS   TRUE

should valid bounds be identified in a probing-like fashion during multi-aggr branching (only with propagation)?

Definition at line 81 of file branch_multaggr.c.

Function Documentation

◆ selectVarMultAggrBranching()

static SCIP_RETCODE selectVarMultAggrBranching ( SCIP scip,
SCIP_VAR **  bestcand,
SCIP_Real bestscore,
SCIP_Real bestsol,
SCIP_Real bestdown,
SCIP_Real bestup,
SCIP_Bool bestdownvalid,
SCIP_Bool bestupvalid,
SCIP_Real provedbound,
SCIP_Real estimatedown,
SCIP_Real estimateup,
SCIP_RESULT result 
)
static
Parameters
sciporiginal SCIP data structure
bestcandthe best candidate variable selected by strong branching
bestscorescore of the best branching candidate
bestsolsolution value of the best branching candidate
bestdownobjective value of the down node when branching on bestcand
bestupobjective value of the up node when branching on bestcand
bestdownvalidis bestdown a valid dual bound for the down branch?
bestupvalidis bestup a valid dual bound for the up branch?
provedboundproved dual bound for the current subtree
estimatedownpointer to store the down child nodes estimate
estimateuppointer to store the up child nodes estimate
resultpointer to store results of branching

Definition at line 167 of file branch_multaggr.c.

References BRANCHRULE_NAME, FALSE, MAX, MIN, NULL, SCIP_Bool, SCIP_CALL, SCIP_CONSADDED, SCIP_CUTOFF, SCIP_DIDNOTRUN, SCIP_LPSOLSTAT_INFEASIBLE, SCIP_LPSOLSTAT_ITERLIMIT, SCIP_LPSOLSTAT_NOTSOLVED, SCIP_LPSOLSTAT_OBJLIMIT, SCIP_LPSOLSTAT_TIMELIMIT, SCIP_LPSOLSTAT_UNBOUNDEDRAY, SCIP_MAXTREEDEPTH, SCIP_OKAY, SCIP_Real, SCIP_VARSTATUS_MULTAGGR, SCIP_VARTYPE_BINARY, SCIP_VARTYPE_INTEGER, SCIPaddConsNode(), SCIPallColsInLP(), SCIPallocBufferArray, SCIPbacktrackProbing(), SCIPbranchruleGetData(), SCIPconsGetName(), SCIPcreateConsLinear(), SCIPdebugMsg, SCIPendProbing(), SCIPfeasCeil(), SCIPfeasFloor(), SCIPfindBranchrule(), SCIPfreeBufferArray, SCIPgetBranchScore(), SCIPgetCurrentNode(), SCIPgetCutoffbound(), SCIPgetDepth(), SCIPgetFixedVars(), SCIPgetLPBranchCands(), SCIPgetLPObjval(), SCIPgetLPSolstat(), SCIPgetNFixedVars(), SCIPinfinity(), SCIPinfoMessage(), SCIPisExactSolve(), SCIPisFeasIntegral(), SCIPisGE(), SCIPnewProbingNode(), SCIPnodeGetLowerbound(), SCIPprintCons(), SCIPreleaseCons(), SCIPsetFeasCeil(), SCIPsetFeasFloor(), SCIPsolveProbingLP(), SCIPstartProbing(), SCIPstatistic, SCIPvarGetLPSol(), SCIPvarGetMultaggrConstant(), SCIPvarGetMultaggrNVars(), SCIPvarGetMultaggrScalars(), SCIPvarGetMultaggrVars(), SCIPvarGetName(), SCIPvarGetPseudocost(), SCIPvarGetStatus(), SCIPvarGetType(), and TRUE.

Referenced by SCIP_DECL_BRANCHEXECLP().

◆ SCIP_DECL_BRANCHCOPY()

static SCIP_DECL_BRANCHCOPY ( branchCopyMultAggr  )
static

copy method for branchrule plugins (called when SCIP copies plugins)

Definition at line 574 of file branch_multaggr.c.

References BRANCHRULE_NAME, NULL, SCIP_CALL, SCIP_OKAY, SCIPbranchruleGetName(), and SCIPincludeBranchruleMultAggr().

◆ SCIP_DECL_BRANCHFREE()

static SCIP_DECL_BRANCHFREE ( branchFreeMultAggr  )
static

destructor of branching rule to free user data (called when SCIP is exiting)

Definition at line 588 of file branch_multaggr.c.

References NULL, SCIP_OKAY, SCIPbranchruleGetData(), SCIPbranchruleSetData(), SCIPfreeBlockMemory, SCIPfreeBlockMemoryArrayNull, and SCIPstatistic.

◆ SCIP_DECL_BRANCHINIT()

static SCIP_DECL_BRANCHINIT ( branchInitMultAggr  )
static

initialization method of branching rule (called after problem was transformed)

Definition at line 608 of file branch_multaggr.c.

References BMSclearMemoryArray, FALSE, NULL, SCIP_CALL, SCIP_OKAY, SCIPallocBlockMemoryArray, SCIPbranchruleGetData(), SCIPcreateClock(), and SCIPstatistic.

◆ SCIP_DECL_BRANCHEXIT()

static SCIP_DECL_BRANCHEXIT ( branchExitMultAggr  )
static

deinitialization method of branching rule (called before transformed problem is freed)

Definition at line 645 of file branch_multaggr.c.

References NULL, SCIP_CALL, SCIP_OKAY, SCIP_VERBLEVEL_NORMAL, SCIPbranchruleGetData(), SCIPfreeBlockMemoryArray, SCIPfreeBlockMemoryArrayNull, SCIPfreeClock(), SCIPgetClockTime(), SCIPstatistic, and SCIPverbMessage().

◆ SCIP_DECL_BRANCHEXECLP()