Scippy

SCIP

Solving Constraint Integer Programs

heur_oneopt.c File Reference

Detailed Description

improvement heuristic that alters single variable values

Author
Timo Berthold

Definition in file heur_oneopt.c.

#include "blockmemshell/memory.h"
#include "scip/heur_oneopt.h"
#include "scip/pub_heur.h"
#include "scip/pub_lp.h"
#include "scip/pub_message.h"
#include "scip/pub_misc.h"
#include "scip/pub_misc_sort.h"
#include "scip/pub_sol.h"
#include "scip/pub_var.h"
#include "scip/scip_copy.h"
#include "scip/scip_general.h"
#include "scip/scip_heur.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_sol.h"
#include "scip/scip_solve.h"
#include "scip/scip_solvingstats.h"
#include "scip/scip_tree.h"
#include <string.h>

Go to the source code of this file.

Macros

#define HEUR_NAME   "oneopt"
 
#define HEUR_DESC   "1-opt heuristic which tries to improve setting of single integer variables"
 
#define HEUR_DISPCHAR   'b'
 
#define HEUR_PRIORITY   -20000
 
#define HEUR_FREQ   1
 
#define HEUR_FREQOFS   0
 
#define HEUR_MAXDEPTH   -1
 
#define HEUR_TIMING   SCIP_HEURTIMING_BEFOREPRESOL | SCIP_HEURTIMING_AFTERNODE
 
#define HEUR_USESSUBSCIP   FALSE
 
#define DEFAULT_WEIGHTEDOBJ   TRUE
 
#define DEFAULT_DURINGROOT   TRUE
 
#define DEFAULT_BEFOREPRESOL   FALSE
 
#define DEFAULT_FORCELPCONSTRUCTION   FALSE
 
#define DEFAULT_USELOOP   TRUE
 

Functions

static SCIP_RETCODE createNewSol (SCIP *scip, SCIP *subscip, SCIP_VAR **subvars, SCIP_HEUR *heur, SCIP_SOL *subsol, SCIP_Bool *success)
 
static SCIP_Real calcShiftVal (SCIP *scip, SCIP_VAR *var, SCIP_Real solval, SCIP_Real *activities)
 
static SCIP_RETCODE updateRowActivities (SCIP *scip, SCIP_Real *activities, SCIP_VAR *var, SCIP_Real shiftval)
 
static SCIP_RETCODE setupAndSolveSubscipOneopt (SCIP *scip, SCIP *subscip, SCIP_HEUR *heur, SCIP_VAR **vars, SCIP_VAR **subvars, SCIP_SOL *bestsol, SCIP_RESULT *result, SCIP_Bool *valid)
 
static SCIP_DECL_HEURCOPY (heurCopyOneopt)
 
static SCIP_DECL_HEURFREE (heurFreeOneopt)
 
static SCIP_DECL_HEURINITSOL (heurInitsolOneopt)
 
static SCIP_DECL_HEUREXITSOL (heurExitsolOneopt)
 
static SCIP_DECL_HEURINIT (heurInitOneopt)
 
static SCIP_DECL_HEUREXEC (heurExecOneopt)
 
SCIP_RETCODE SCIPincludeHeurOneopt (SCIP *scip)
 

Macro Definition Documentation

◆ HEUR_NAME

#define HEUR_NAME   "oneopt"

◆ HEUR_DESC

#define HEUR_DESC   "1-opt heuristic which tries to improve setting of single integer variables"

Definition at line 52 of file heur_oneopt.c.

Referenced by SCIPincludeHeurOneopt().

◆ HEUR_DISPCHAR

#define HEUR_DISPCHAR   'b'

Definition at line 53 of file heur_oneopt.c.

Referenced by SCIPincludeHeurOneopt().

◆ HEUR_PRIORITY

#define HEUR_PRIORITY   -20000

Definition at line 54 of file heur_oneopt.c.

Referenced by SCIPincludeHeurOneopt().

◆ HEUR_FREQ

#define HEUR_FREQ   1

Definition at line 55 of file heur_oneopt.c.

Referenced by SCIPincludeHeurOneopt().

◆ HEUR_FREQOFS

#define HEUR_FREQOFS   0

Definition at line 56 of file heur_oneopt.c.

Referenced by SCIPincludeHeurOneopt().

◆ HEUR_MAXDEPTH

#define HEUR_MAXDEPTH   -1

Definition at line 57 of file heur_oneopt.c.

Referenced by SCIPincludeHeurOneopt().

◆ HEUR_TIMING

◆ HEUR_USESSUBSCIP

#define HEUR_USESSUBSCIP   FALSE

does the heuristic use a secondary SCIP instance?

Definition at line 59 of file heur_oneopt.c.

Referenced by SCIPincludeHeurOneopt().

◆ DEFAULT_WEIGHTEDOBJ

#define DEFAULT_WEIGHTEDOBJ   TRUE

should the objective be weighted with the potential shifting value when sorting the shifting candidates?

Definition at line 61 of file heur_oneopt.c.

Referenced by SCIPincludeHeurOneopt().

◆ DEFAULT_DURINGROOT

#define DEFAULT_DURINGROOT   TRUE

should the heuristic be called before and during the root node?

Definition at line 62 of file heur_oneopt.c.

Referenced by SCIPincludeHeurOneopt().

◆ DEFAULT_BEFOREPRESOL

#define DEFAULT_BEFOREPRESOL   FALSE

should the heuristic be called before presolving

Definition at line 63 of file heur_oneopt.c.

Referenced by SCIPincludeHeurOneopt().

◆ DEFAULT_FORCELPCONSTRUCTION

#define DEFAULT_FORCELPCONSTRUCTION   FALSE

should the construction of the LP be forced even if LP solving is deactivated?

Definition at line 64 of file heur_oneopt.c.

Referenced by SCIPincludeHeurOneopt().

◆ DEFAULT_USELOOP

#define DEFAULT_USELOOP   TRUE

should the heuristic continue to run as long as improvements are found?

Definition at line 65 of file heur_oneopt.c.

Referenced by SCIPincludeHeurOneopt().

Function Documentation

◆ createNewSol()

static SCIP_RETCODE createNewSol ( SCIP scip,
SCIP subscip,
SCIP_VAR **  subvars,
SCIP_HEUR heur,
SCIP_SOL subsol,
SCIP_Bool success 
)
static

creates a new solution for the original problem by copying the solution of the subproblem

Parameters
sciporiginal SCIP data structure
subscipSCIP structure of the subproblem
subvarsthe variables of the subproblem
heurzeroobj heuristic structure
subsolsolution of the subproblem
successused to store whether new solution was found or not

Definition at line 88 of file heur_oneopt.c.

References FALSE, NULL, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPallocBufferArray, SCIPcreateSol(), SCIPfreeBufferArray, SCIPgetNOrigVars(), SCIPgetSolVals(), SCIPgetVarsData(), SCIPsetSolVals(), SCIPtrySolFree(), and TRUE.

Referenced by setupAndSolveSubscipOneopt().

◆ calcShiftVal()

static SCIP_Real calcShiftVal ( SCIP scip,
SCIP_VAR var,
SCIP_Real  solval,
SCIP_Real activities 
)
static

compute value by which the solution of variable var can be shifted

Parameters
scipSCIP data structure
varvariable that should be shifted
solvalcurrent solution value
activitiesLP row activities

Definition at line 134 of file heur_oneopt.c.

References ABS, FALSE, MAX, MIN, NULL, SCIP_Bool, SCIP_Real, SCIPcolGetNLPNonz(), SCIPcolGetRows(), SCIPcolGetVals(), SCIPdebugMsg, SCIPfeasFloor(), SCIPgetNLPRows(), SCIPisFeasGE(), SCIPisFeasLE(), SCIPisInfinity(), SCIProwGetLhs(), SCIProwGetLPPos(), SCIProwGetName(), SCIProwGetRhs(), SCIProwIsInLP(), SCIProwIsLocal(), SCIPvarGetCol(), SCIPvarGetLbGlobal(), SCIPvarGetName(), SCIPvarGetObj(), SCIPvarGetUbGlobal(), and TRUE.

Referenced by SCIP_DECL_HEUREXEC().

◆ updateRowActivities()

static SCIP_RETCODE updateRowActivities ( SCIP scip,
SCIP_Real activities,
SCIP_VAR var,
SCIP_Real  shiftval 
)
static

update row activities after a variable's solution value changed

Parameters
scipSCIP data structure
activitiesLP row activities
varvariable that has been changed
shiftvalvalue that is added to variable

Definition at line 230 of file heur_oneopt.c.

References NULL, SCIP_OKAY, SCIP_Real, SCIPcolGetNLPNonz(), SCIPcolGetRows(), SCIPcolGetVals(), SCIPgetNLPRows(), SCIPinfinity(), SCIPisInfinity(), SCIProwGetLPPos(), SCIProwIsLocal(), and SCIPvarGetCol().

Referenced by SCIP_DECL_HEUREXEC().

◆ setupAndSolveSubscipOneopt()

static SCIP_RETCODE setupAndSolveSubscipOneopt ( SCIP scip,
SCIP subscip,
SCIP_HEUR heur,
SCIP_VAR **  vars,
SCIP_VAR **  subvars,
SCIP_SOL bestsol,
SCIP_RESULT result,
SCIP_Bool valid 
)
static

setup and solve oneopt sub-SCIP

Parameters
scipSCIP data structure
subscipsub-SCIP data structure
heuroneopt heuristic
varsSCIP variables
subvarssubproblem's variables
bestsolincumbent solution
resultpointer to store the result
validpointer to store the valid value

Definition at line 280 of file heur_oneopt.c.

References createNewSol(), FALSE, NULL, SCIP_CALL, SCIP_CALL_ABORT, SCIP_FOUNDSOL, SCIP_OKAY, SCIP_PARAMSETTING_OFF, SCIP_Real, SCIPallocBufferArray, SCIPblkmem(), SCIPcopy(), SCIPcopyLimits(), SCIPcreateOrigSol(), SCIPfreeBufferArray, SCIPgetNSols(), SCIPgetNVars(), SCIPgetSols(), SCIPgetSolVals(), SCIPhashmapCreate(), SCIPhashmapFree(), SCIPhashmapGetImage(), SCIPisParamFixed(), SCIPprintStatistics(), SCIPsetBoolParam(), SCIPsetHeuristics(), SCIPsetIntParam(), SCIPsetLongintParam(), SCIPsetPresolving(), SCIPsetSeparating(), SCIPsetSolVals(), SCIPsolve(), SCIPtransformProb(), SCIPtrySolFree(), SCIPunfixParam(), SCIPwarningMessage(), and TRUE.

Referenced by SCIP_DECL_HEUREXEC().

◆ SCIP_DECL_HEURCOPY()

static SCIP_DECL_HEURCOPY ( heurCopyOneopt  )
static

copy method for primal heuristic plugins (called when SCIP copies plugins)

Definition at line 419 of file heur_oneopt.c.

References HEUR_NAME, NULL, SCIP_CALL, SCIP_OKAY, SCIPheurGetName(), and SCIPincludeHeurOneopt().

◆ SCIP_DECL_HEURFREE()

static SCIP_DECL_HEURFREE ( heurFreeOneopt  )
static

destructor of primal heuristic to free user data (called when SCIP is exiting)

Definition at line 433 of file heur_oneopt.c.

References HEUR_NAME, NULL, SCIP_OKAY, SCIPfreeBlockMemory, SCIPheurGetData(), SCIPheurGetName(), and SCIPheurSetData().

◆ SCIP_DECL_HEURINITSOL()

static SCIP_DECL_HEURINITSOL ( heurInitsolOneopt  )
static

solving process initialization method of primal heuristic (called when branch and bound process is about to begin)

Definition at line 453 of file heur_oneopt.c.

References HEUR_NAME, NULL, SCIP_HEURTIMING_BEFORENODE, SCIP_HEURTIMING_DURINGLPLOOP, SCIP_OKAY, SCIPheurGetData(), SCIPheurGetFreqofs(), SCIPheurGetName(), and SCIPheurSetTimingmask().

◆ SCIP_DECL_HEUREXITSOL()

static SCIP_DECL_HEUREXITSOL ( heurExitsolOneopt  )
static

solving process deinitialization method of primal heuristic (called before branch and bound process data is freed)

Definition at line 472 of file heur_oneopt.c.

References HEUR_NAME, HEUR_TIMING, NULL, SCIP_OKAY, SCIPheurGetName(), and SCIPheurSetTimingmask().

◆ SCIP_DECL_HEURINIT()

static SCIP_DECL_HEURINIT ( heurInitOneopt  )
static

initialization method of primal heuristic (called after problem was transformed)

Definition at line 485 of file heur_oneopt.c.

References NULL, SCIP_OKAY, and SCIPheurGetData().

◆ SCIP_DECL_HEUREXEC()

static SCIP_DECL_HEUREXEC ( heurExecOneopt  )
static