Scippy

    SCIP

    Solving Constraint Integer Programs

    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_certificate.h"
    #include "scip/scip_copy.h"
    #include "scip/scip_exact.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   SCIP_HEURDISPCHAR_ITERATIVE
     
    #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_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"

    Definition at line 63 of file heur_oneopt.c.

    ◆ HEUR_DESC

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

    Definition at line 64 of file heur_oneopt.c.

    ◆ HEUR_DISPCHAR

    #define HEUR_DISPCHAR   SCIP_HEURDISPCHAR_ITERATIVE

    Definition at line 65 of file heur_oneopt.c.

    ◆ HEUR_PRIORITY

    #define HEUR_PRIORITY   -20000

    Definition at line 66 of file heur_oneopt.c.

    ◆ HEUR_FREQ

    #define HEUR_FREQ   1

    Definition at line 67 of file heur_oneopt.c.

    ◆ HEUR_FREQOFS

    #define HEUR_FREQOFS   0

    Definition at line 68 of file heur_oneopt.c.

    ◆ HEUR_MAXDEPTH

    #define HEUR_MAXDEPTH   -1

    Definition at line 69 of file heur_oneopt.c.

    ◆ HEUR_TIMING

    Definition at line 70 of file heur_oneopt.c.

    ◆ HEUR_USESSUBSCIP

    #define HEUR_USESSUBSCIP   FALSE

    does the heuristic use a secondary SCIP instance?

    Definition at line 71 of file heur_oneopt.c.

    ◆ DEFAULT_WEIGHTEDOBJ

    #define DEFAULT_WEIGHTEDOBJ   TRUE

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

    Definition at line 73 of file heur_oneopt.c.

    ◆ DEFAULT_DURINGROOT

    #define DEFAULT_DURINGROOT   TRUE

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

    Definition at line 74 of file heur_oneopt.c.

    ◆ DEFAULT_BEFOREPRESOL

    #define DEFAULT_BEFOREPRESOL   FALSE

    should the heuristic be called before presolving

    Definition at line 75 of file heur_oneopt.c.

    ◆ DEFAULT_FORCELPCONSTRUCTION

    #define DEFAULT_FORCELPCONSTRUCTION   FALSE

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

    Definition at line 76 of file heur_oneopt.c.

    ◆ DEFAULT_USELOOP

    #define DEFAULT_USELOOP   TRUE

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

    Definition at line 77 of file heur_oneopt.c.

    Function Documentation

    ◆ 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 100 of file heur_oneopt.c.

    References FALSE, NULL, SCIP_Bool, SCIP_Real, SCIPcolGetNLPNonz(), SCIPcolGetRows(), SCIPcolGetVals(), SCIPdebugMsg, SCIPfeasCeil(), 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 214 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 263 of file heur_oneopt.c.

    References FALSE, NULL, SCIP_CALL, SCIP_CALL_ABORT, SCIP_FOUNDSOL, SCIP_OKAY, SCIP_PARAMSETTING_OFF, SCIPblkmem(), SCIPcopy(), SCIPcopyLimits(), SCIPcreateOrigSol(), SCIPgetNVars(), SCIPgetSolVal(), SCIPhashmapCreate(), SCIPhashmapFree(), SCIPhashmapGetImage(), SCIPisParamFixed(), SCIPprintStatistics(), SCIPsetBoolParam(), SCIPsetHeuristics(), SCIPsetIntParam(), SCIPsetLongintParam(), SCIPsetPresolving(), SCIPsetSeparating(), SCIPsetSolVal(), SCIPsolve(), SCIPtransformProb(), SCIPtranslateSubSols(), 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 388 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 402 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 422 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 441 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 454 of file heur_oneopt.c.

    References NULL, SCIP_OKAY, and SCIPheurGetData().

    ◆ SCIP_DECL_HEUREXEC()

    static SCIP_DECL_HEUREXEC ( heurExecOneopt  )
    static

    execution method of primal heuristic

    Definition at line 473 of file heur_oneopt.c.

    References calcShiftVal(), FALSE, HEUR_TIMING, NULL, SCIP_Bool, SCIP_CALL, SCIP_DELAYED, SCIP_DIDNOTFIND, SCIP_DIDNOTRUN, SCIP_FOUNDSOL, SCIP_HEURTIMING_BEFORENODE, SCIP_HEURTIMING_BEFOREPRESOL, SCIP_LONGINT_FORMAT, SCIP_LPSOLSTAT_OPTIMAL, SCIP_OKAY, SCIP_Real, SCIP_VARSTATUS_COLUMN, SCIPallocBufferArray, SCIPcheckCopyLimits(), SCIPchgVarLbDive(), SCIPchgVarUbDive(), SCIPconstructLP(), SCIPcreate(), SCIPcreateSolCopy(), SCIPcutoffNode(), SCIPdebug, SCIPdebugMsg, SCIPendDive(), SCIPflushLP(), SCIPfree(), SCIPfreeBufferArray, SCIPfreeSol(), SCIPgetBestSol(), SCIPgetCurrentNode(), SCIPgetLPRowsData(), SCIPgetLPSolstat(), SCIPgetNContImplVars(), SCIPgetNContVars(), SCIPgetNLPIterations(), SCIPgetNLPRows(), SCIPgetNNodes(), SCIPgetNVars(), SCIPgetRowSolActivity(), SCIPgetSolVal(), SCIPgetVars(), SCIPhasCurrentNodeLP(), SCIPheurGetData(), SCIPheurSetTimingmask(), SCIPinDive(), SCIPisCertified(), SCIPisExact(), SCIPisFeasGE(), SCIPisFeasGT(), SCIPisFeasLE(), SCIPisFeasLT(), SCIPisFeasZero(), SCIPlinkLPSol(), SCIPprintRow(), SCIPprintSol(), SCIPreallocBufferArray, SCIProwGetLhs(), SCIProwGetLPPos(), SCIProwGetName(), SCIProwGetRhs(), SCIProwIsLocal(), SCIPsetSolVal(), SCIPsolGetIndex(), SCIPsolIsExact(), SCIPsolIsOriginal(), SCIPsolSetHeur(), SCIPsolveDiveLP(), SCIPsortRealPtr(), SCIPstartDive(), SCIPtrySol(), SCIPunlinkSol(), SCIPvarGetLbGlobal(), SCIPvarGetName(), SCIPvarGetObj(), SCIPvarGetStatus(), SCIPvarGetType(), SCIPvarGetUbGlobal(), SCIPwarningMessage(), setupAndSolveSubscipOneopt(), TRUE, and updateRowActivities().