Scippy

    SCIP

    Solving Constraint Integer Programs

    Detailed Description

    dks primal heuristic

    Author
    Adrian Göß
    Dieter Weninger

    Primal heuristic based on ideas published in the paper "Exploiting user-supplied Decompositions inside Heuristics" by Katrin Halbig, Adrian Göß and Dieter Weninger.

    Definition in file heur_dks.c.

    #include "scip/pub_lp.h"
    #include "blockmemshell/memory.h"
    #include "scip/cons_linear.h"
    #include "scip/debug.h"
    #include "scip/heuristics.h"
    #include "scip/pub_cons.h"
    #include "scip/pub_event.h"
    #include "scip/pub_fileio.h"
    #include "scip/pub_tree.h"
    #include "scip/pub_heur.h"
    #include "scip/pub_message.h"
    #include "scip/pub_misc.h"
    #include "scip/pub_misc_select.h"
    #include "scip/pub_sol.h"
    #include "scip/pub_var.h"
    #include "scip/scipdefplugins.h"
    #include "scip/scip_branch.h"
    #include "scip/scip_cons.h"
    #include "scip/scip_copy.h"
    #include "scip/scip_dcmp.h"
    #include "scip/scip_event.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_nodesel.h"
    #include "scip/scip_numerics.h"
    #include "scip/scip_param.h"
    #include "scip/scip_prob.h"
    #include "scip/scip_randnumgen.h"
    #include "scip/scip_sol.h"
    #include "scip/scip_solve.h"
    #include "scip/scip_solvingstats.h"
    #include "scip/scip_table.h"
    #include "scip/scip_timing.h"
    #include "scip/scip_tree.h"
    #include "scip/scip_var.h"
    #include "scip/sol.h"
    #include "scip/heur_dks.h"

    Go to the source code of this file.

    Data Structures

    struct  Bucket
     
    struct  Bucketlist
     

    Macros

    #define HEUR_NAME   "dks"
     
    #define HEUR_DESC   "decomposition kernel search"
     
    #define HEUR_DISPCHAR   'D'
     
    #define HEUR_PRIORITY   -1102500
     
    #define HEUR_FREQ   -1
     
    #define HEUR_FREQOFS   0
     
    #define HEUR_MAXDEPTH   0
     
    #define HEUR_TIMING   SCIP_HEURTIMING_AFTERLPNODE
     
    #define HEUR_USESSUBSCIP   TRUE
     
    #define DEFAULT_MAXBUCKS   20
     
    #define DEFAULT_KERNELSIZEFACTOR   2.0
     
    #define DEFAULT_ADDUSECONSS   TRUE
     
    #define DEFAULT_LINKBUCKSIZE   TRUE
     
    #define DEFAULT_TRANSLBKERNEL   TRUE
     
    #define DEFAULT_LESSLOCKSKERNEL   FALSE
     
    #define DEFAULT_USETRANSPROB   TRUE
     
    #define DEFAULT_BUCKMAXGAP   0.01
     
    #define DEFAULT_MAXLINKSCORE   1.0
     
    #define DEFAULT_MAXBUCKFRAC   0.10
     
    #define DEFAULT_MAXNODES   5000LL
     
    #define DEFAULT_USETWOLEVEL   TRUE
     
    #define DEFAULT_USEDECOMP   TRUE
     
    #define DEFAULT_USEBESTSOL   TRUE
     
    #define DEFAULT_REDCOSTSORT   TRUE
     
    #define DEFAULT_PRIMALONLY   FALSE
     
    #define DEFAULT_REDCOSTLOGSORT   TRUE
     
    #define DEFAULT_OBJCUTOFF   TRUE
     
    #define DEFAULT_RUNBINPROBSONLY   FALSE
     

    Typedefs

    typedef struct Bucketlist BUCKETLIST
     
    typedef struct Bucket BUCKET
     

    Functions

    static SCIP_RETCODE getLinkingScoreAndBlocklabels (int *blocklabels, int *varlabels, int *conslabels, SCIP_Real *linkscore, int *nblocklabels, int nblocks, int nvars, int nconss)
     
    static SCIP_RETCODE countKernelVariables (SCIP *scip, SCIP_VAR **vars, SCIP_SOL *bestcurrsol, SCIP_HASHMAP *lbvarmap, SCIP_Bool twolevel, SCIP_Bool usebestsol, SCIP_Bool usetransprob, SCIP_Bool usetranslb, int *bw_ncontkernelvars, int *bw_ncontnonkernelvars, int *bw_nkernelvars, int *bw_nnonkernelvars, int *bw_nintkernelvars, int *bw_nintnonkernelvars, int *ncontkernelvars, int *ncontnonkernelvars, int *nkernelvars, int *nnonkernelvars, int *nintkernelvars, int *nintnonkernelvars, int *block2index, int *varlabels, int blklbl_offset, int nvars)
     
    static SCIP_RETCODE fillKernels (SCIP *scip, SCIP_VAR **vars, SCIP_VAR **binintvars, SCIP_VAR ***bw_contkernelvars, SCIP_VAR ***bw_contnonkernelvars, SCIP_VAR ***bw_kernelvars, SCIP_VAR ***bw_nonkernelvars, SCIP_VAR ***bw_intkernelvars, SCIP_VAR ***bw_intnonkernelvars, SCIP_SOL *bestcurrsol, SCIP_HASHMAP *lbvarmap, SCIP_Bool twolevel, SCIP_Bool usebestsol, SCIP_Bool usetransprob, SCIP_Bool usetranslb, int *bw_contkernelcount, int *bw_contnonkernelcount, int *bw_kernelcount, int *bw_nonkernelcount, int *bw_intkernelcount, int *bw_intnonkernelcount, int *bw_ncontkernelvars, int *bw_ncontnonkernelvars, int *bw_nkernelvars, int *bw_nnonkernelvars, int *bw_nintkernelvars, int *bw_nintnonkernelvars, int *block2index, int *varlabels, int blklbl_offset, int nvars)
     
    static SCIP_RETCODE reducedCostSort (SCIP *scip, SCIP_VAR ***bw_contnonkernelvars, SCIP_VAR ***bw_nonkernelvars, SCIP_VAR ***bw_intnonkernelvars, SCIP_Real ***bw_cont_redcost, SCIP_Real ***bw_redcost, SCIP_Real ***bw_int_redcost, int *bw_ncontnonkernelvars, int *bw_nnonkernelvars, int *bw_nintnonkernelvars, SCIP_Bool twolevel, int nblocks)
     
    static SCIP_RETCODE freeRedcostArrays (SCIP *scip, SCIP_Real ***bw_cont_redcost, SCIP_Real ***bw_redcost, SCIP_Real ***bw_int_redcost, int nblocks)
     
    static SCIP_Bool isInCurrentLogBucket (SCIP *scip, SCIP_Real base, SCIP_Real redcost, SCIP_Real redcostmin, int currentindex, int nbuckets)
     
    static SCIP_RETCODE fillBuckets (SCIP *scip, BUCKETLIST **bucketlist, SCIP_VAR ***bw_contnonkernelvars, SCIP_VAR ***bw_nonkernelvars, SCIP_VAR ***bw_intnonkernelvars, int *bw_ncontnonkernelvars, int *bw_nnonkernelvars, int *bw_nintnonkernelvars, SCIP_Real **bw_cont_redcost, SCIP_Real **bw_redcost, SCIP_Real **bw_int_redcost, SCIP_Bool twolevel, SCIP_Bool redcostlogsort, int nbuckets, int nblocks)
     
    static SCIP_RETCODE freeBucketArrays (SCIP *scip, BUCKET *bucket, SCIP_Bool twolevel)
     
    static SCIP_RETCODE initBucket (BUCKETLIST *bucketlist)
     
    static SCIP_RETCODE freeBucket (SCIP *scip, BUCKET *bucket)
     
    static SCIP_RETCODE initBucketlist (SCIP *scip, BUCKETLIST **bucketlist, int nbuckets)
     
    static SCIP_RETCODE freeBucketlist (BUCKETLIST **bucketlist, int nbuckets)
     
    static SCIP_RETCODE bucketCreateSubscip (BUCKET *bucket, SCIP_Bool usetransprob, SCIP_Bool *success)
     
    static SCIP_RETCODE createBucketlistAndBuckets (SCIP *scip, SCIP_Bool usetransprob, int nbuckets, BUCKETLIST **bucketlist, SCIP_Bool *success)
     
    static SCIP_RETCODE searchKernelAndBucket (BUCKET *bucket, SCIP_VAR **contkernelvars, int ncontkernelvars, SCIP_VAR **kernelvars, int nkernelvars, SCIP_VAR **intkernelvars, int nintkernelvars, SCIP_VAR *var, SCIP_Bool *found)
     
    static SCIP_RETCODE adjustKernelVars (SCIP *scip, BUCKET *bucket, SCIP_VAR ***contkernelvars, int *ncontkernelvars, int maxcontkernelsize, SCIP_VAR ***kernelvars, int *nkernelvars, int maxkernelsize, SCIP_VAR ***intkernelvars, int *nintkernelvars, int maxintkernelsize, SCIP_Bool twolevel)
     
    static SCIP_RETCODE addUseConstraint (BUCKET *bucket)
     
    static SCIP_DECL_HEURCOPY (heurCopyDKS)
     
    static SCIP_DECL_HEURFREE (heurFreeDKS)
     
    static SCIP_DECL_HEUREXEC (heurExecDKS)
     
    SCIP_RETCODE SCIPincludeHeurDKS (SCIP *scip)
     

    Macro Definition Documentation

    ◆ HEUR_NAME

    #define HEUR_NAME   "dks"

    Definition at line 79 of file heur_dks.c.

    ◆ HEUR_DESC

    #define HEUR_DESC   "decomposition kernel search"

    Definition at line 80 of file heur_dks.c.

    ◆ HEUR_DISPCHAR

    #define HEUR_DISPCHAR   'D'

    Definition at line 81 of file heur_dks.c.

    ◆ HEUR_PRIORITY

    #define HEUR_PRIORITY   -1102500

    Definition at line 82 of file heur_dks.c.

    ◆ HEUR_FREQ

    #define HEUR_FREQ   -1

    Definition at line 83 of file heur_dks.c.

    ◆ HEUR_FREQOFS

    #define HEUR_FREQOFS   0

    Definition at line 84 of file heur_dks.c.

    ◆ HEUR_MAXDEPTH

    #define HEUR_MAXDEPTH   0

    Definition at line 85 of file heur_dks.c.

    ◆ HEUR_TIMING

    #define HEUR_TIMING   SCIP_HEURTIMING_AFTERLPNODE

    Definition at line 86 of file heur_dks.c.

    ◆ HEUR_USESSUBSCIP

    #define HEUR_USESSUBSCIP   TRUE

    does the heuristic use a secondary SCIP instance?

    Definition at line 87 of file heur_dks.c.

    ◆ DEFAULT_MAXBUCKS

    #define DEFAULT_MAXBUCKS   20

    default value for the number of buckets to investigate

    Definition at line 89 of file heur_dks.c.

    ◆ DEFAULT_KERNELSIZEFACTOR

    #define DEFAULT_KERNELSIZEFACTOR   2.0

    default value for the maximal growing of the kernel size

    Definition at line 90 of file heur_dks.c.

    ◆ DEFAULT_ADDUSECONSS

    #define DEFAULT_ADDUSECONSS   TRUE

    default value to add a use constraint

    Definition at line 91 of file heur_dks.c.

    ◆ DEFAULT_LINKBUCKSIZE

    #define DEFAULT_LINKBUCKSIZE   TRUE

    default value to respect kernel linking vars for the bucket size

    Definition at line 92 of file heur_dks.c.

    ◆ DEFAULT_TRANSLBKERNEL

    #define DEFAULT_TRANSLBKERNEL   TRUE

    default value to respect the diff of var lb in trans and orig prob

    Definition at line 93 of file heur_dks.c.

    ◆ DEFAULT_LESSLOCKSKERNEL

    #define DEFAULT_LESSLOCKSKERNEL   FALSE

    default value to respect <= 1 up- & downlock in kernel construction

    Definition at line 94 of file heur_dks.c.

    ◆ DEFAULT_USETRANSPROB

    #define DEFAULT_USETRANSPROB   TRUE

    default value to use the original or transformed problem

    Definition at line 95 of file heur_dks.c.

    ◆ DEFAULT_BUCKMAXGAP

    #define DEFAULT_BUCKMAXGAP   0.01

    default value for the maximal mip gap of a bucket

    Definition at line 96 of file heur_dks.c.

    ◆ DEFAULT_MAXLINKSCORE

    #define DEFAULT_MAXLINKSCORE   1.0

    default value for the maximal linking score of an instance

    Definition at line 97 of file heur_dks.c.

    ◆ DEFAULT_MAXBUCKFRAC

    #define DEFAULT_MAXBUCKFRAC   0.10

    default value to respect buckets with <= this share of bin/int vars

    Definition at line 98 of file heur_dks.c.

    ◆ DEFAULT_MAXNODES

    #define DEFAULT_MAXNODES   5000LL

    default node limit of the heuristic

    Definition at line 99 of file heur_dks.c.

    ◆ DEFAULT_USETWOLEVEL

    #define DEFAULT_USETWOLEVEL   TRUE

    default value to use a two level structure for the buckets

    Definition at line 100 of file heur_dks.c.

    ◆ DEFAULT_USEDECOMP

    #define DEFAULT_USEDECOMP   TRUE

    default value to use the decomp if given

    Definition at line 101 of file heur_dks.c.

    ◆ DEFAULT_USEBESTSOL

    #define DEFAULT_USEBESTSOL   TRUE

    default value to use the best existing solution or the lp solution

    Definition at line 102 of file heur_dks.c.

    ◆ DEFAULT_REDCOSTSORT

    #define DEFAULT_REDCOSTSORT   TRUE

    default value to sort the non kernel vars before bucket split

    Definition at line 103 of file heur_dks.c.

    ◆ DEFAULT_PRIMALONLY

    #define DEFAULT_PRIMALONLY   FALSE

    default value to kill dks after the first primal solution is found

    Definition at line 104 of file heur_dks.c.

    ◆ DEFAULT_REDCOSTLOGSORT

    #define DEFAULT_REDCOSTLOGSORT   TRUE

    default value to sort non kernel vars logarithmically by redcost

    Definition at line 105 of file heur_dks.c.

    ◆ DEFAULT_OBJCUTOFF

    #define DEFAULT_OBJCUTOFF   TRUE

    default value to add an objective cutoff

    Definition at line 106 of file heur_dks.c.

    ◆ DEFAULT_RUNBINPROBSONLY

    #define DEFAULT_RUNBINPROBSONLY   FALSE

    default value to run only for bin or bin + int only problems

    Definition at line 107 of file heur_dks.c.

    Typedef Documentation

    ◆ BUCKETLIST

    typedef struct Bucketlist BUCKETLIST

    data related to one bucket list, details see below

    Definition at line 114 of file heur_dks.c.

    ◆ BUCKET

    typedef struct Bucket BUCKET

    data related to one bucket

    Function Documentation

    ◆ getLinkingScoreAndBlocklabels()

    static SCIP_RETCODE getLinkingScoreAndBlocklabels ( int *  blocklabels,
    int *  varlabels,
    int *  conslabels,
    SCIP_Real linkscore,
    int *  nblocklabels,
    int  nblocks,
    int  nvars,
    int  nconss 
    )
    static

    calculate the linking score of a given decomposition

    Parameters
    blocklabelsint array to store the different block labels
    varlabelsarray of variable labels
    conslabelsarray of constraint labels
    linkscorelinking score to return
    nblocklabelsnumber of block labels to return
    nblocksnumber of blocks
    nvarsnumber of variables
    nconssnumber of constraints

    Definition at line 174 of file heur_dks.c.

    References b, FALSE, NULL, SCIP_Bool, SCIP_DECOMP_LINKCONS, SCIP_DECOMP_LINKVAR, SCIP_OKAY, SCIP_Real, and TRUE.

    Referenced by SCIP_DECL_HEUREXEC().

    ◆ countKernelVariables()

    static SCIP_RETCODE countKernelVariables ( SCIP scip,
    SCIP_VAR **  vars,
    SCIP_SOL bestcurrsol,
    SCIP_HASHMAP lbvarmap,
    SCIP_Bool  twolevel,
    SCIP_Bool  usebestsol,
    SCIP_Bool  usetransprob,
    SCIP_Bool  usetranslb,
    int *  bw_ncontkernelvars,
    int *  bw_ncontnonkernelvars,
    int *  bw_nkernelvars,
    int *  bw_nnonkernelvars,
    int *  bw_nintkernelvars,
    int *  bw_nintnonkernelvars,
    int *  ncontkernelvars,
    int *  ncontnonkernelvars,
    int *  nkernelvars,
    int *  nnonkernelvars,
    int *  nintkernelvars,
    int *  nintnonkernelvars,
    int *  block2index,
    int *  varlabels,
    int  blklbl_offset,
    int  nvars 
    )
    static

    count of potential kernel variables for one level or two level structure

    Parameters
    scipmain SCIP data structure
    varsarray of variables
    bestcurrsolbest current solution
    lbvarmaporiginal lower bound of transformed variables
    twolevelusage of one or two level structure
    usebestsolusage of best or lp solution
    usetransprobusage of transformed or original problem
    usetranslbusage of transformed lb in comparison to original lb
    bw_ncontkernelvarsblockwise number of continuous kernel variables
    bw_ncontnonkernelvarsblockwise number of continuous non-kernel variables
    bw_nkernelvarsblockwise number of (binary) kernel variables
    bw_nnonkernelvarsblockwise number of (binary) non-kernel variables
    bw_nintkernelvarsblockwise number of integer kernel variables
    bw_nintnonkernelvarsblockwise number of integer non-kernel variables
    ncontkernelvarsnumber of continuous kernel variables
    ncontnonkernelvarsnumber of continuous non-kernel variables
    nkernelvarsnumber of (binary) kernel variables
    nnonkernelvarsnumber of (binary) non-kernel variables
    nintkernelvarsnumber of integer kernel variables
    nintnonkernelvarsnumber of integer non-kernel variables
    block2indexmapping of block labels to block index
    varlabelsarray of variable labels
    blklbl_offsetoptional offset for the blocklabels, if it exists a block 0
    nvarsnumber of variables

    Definition at line 240 of file heur_dks.c.

    References MAX, NULL, SCIP_OKAY, SCIP_Real, SCIP_VARTYPE_BINARY, SCIP_VARTYPE_CONTINUOUS, SCIP_VARTYPE_INTEGER, SCIPgetSolVal(), SCIPhashmapGetImageReal(), SCIPisEQ(), SCIPisGT(), SCIPvarGetLbLocal(), SCIPvarGetLbOriginal(), SCIPvarGetLPSol(), and SCIPvarGetType().

    Referenced by SCIP_DECL_HEUREXEC().

    ◆ fillKernels()

    static SCIP_RETCODE fillKernels ( SCIP scip,
    SCIP_VAR **  vars,
    SCIP_VAR **  binintvars,
    SCIP_VAR ***  bw_contkernelvars,
    SCIP_VAR ***  bw_contnonkernelvars,
    SCIP_VAR ***  bw_kernelvars,
    SCIP_VAR ***  bw_nonkernelvars,
    SCIP_VAR ***  bw_intkernelvars,
    SCIP_VAR ***  bw_intnonkernelvars,
    SCIP_SOL bestcurrsol,
    SCIP_HASHMAP lbvarmap,
    SCIP_Bool  twolevel,
    SCIP_Bool  usebestsol,
    SCIP_Bool  usetransprob,
    SCIP_Bool  usetranslb,
    int *  bw_contkernelcount,
    int *  bw_contnonkernelcount,
    int *  bw_kernelcount,
    int *  bw_nonkernelcount,
    int *  bw_intkernelcount,
    int *  bw_intnonkernelcount,
    int *  bw_ncontkernelvars,
    int *  bw_ncontnonkernelvars,
    int *  bw_nkernelvars,
    int *  bw_nnonkernelvars,
    int *  bw_nintkernelvars,
    int *  bw_nintnonkernelvars,
    int *  block2index,
    int *  varlabels,
    int  blklbl_offset,
    int  nvars 
    )
    static

    fill the blockwise kernels with the respective variables

    Parameters
    scipmain SCIP data structure
    varsarray of variables
    binintvarsarray of binary and integer variables
    bw_contkernelvarsblockwise array of continuous kernel variables
    bw_contnonkernelvarsblockwise array of continuous non-kernel variables
    bw_kernelvarsblockwise array of (binary) kernel variables
    bw_nonkernelvarsblockwise array of (binary) non-kernel variables
    bw_intkernelvarsblockwise array of integer kernel variables
    bw_intnonkernelvarsblockwise array of integer non-kernel variables
    bestcurrsolbest current solution
    lbvarmaporiginal lower bound of transformed variables
    twolevelusage of one or two level structure
    usebestsolusage of best or lp solution
    usetransprobusage of transformed or original problem
    usetranslbusage of transformed lb in comparison to original lb
    bw_contkernelcountblockwise counter of continuous kernel variables
    bw_contnonkernelcountblockwise counter of continuous non-kernel variables
    bw_kernelcountblockwise counter of (binary) kernel variables
    bw_nonkernelcountblockwise counter of (binary) non-kernel variables
    bw_intkernelcountblockwise counter of integer kernel variables
    bw_intnonkernelcountblockwise counter of integer non-kernel variables
    bw_ncontkernelvarsblockwise number of continuous kernel variables
    bw_ncontnonkernelvarsblockwise number of continuous non-kernel variables
    bw_nkernelvarsblockwise number of (binary) kernel variables
    bw_nnonkernelvarsblockwise number of (binary) non-kernel variables
    bw_nintkernelvarsblockwise number of integer kernel variables
    bw_nintnonkernelvarsblockwise number of integer non-kernel variables
    block2indexmapping of block labels to block index
    varlabelsarray of variable labels
    blklbl_offsetoptional offset for the blocklabels, if it exists a block 0
    nvarsnumber of variables

    Definition at line 369 of file heur_dks.c.

    References MAX, NULL, SCIP_OKAY, SCIP_Real, SCIP_VARTYPE_BINARY, SCIP_VARTYPE_CONTINUOUS, SCIP_VARTYPE_INTEGER, SCIPgetSolVal(), SCIPhashmapGetImageReal(), SCIPisEQ(), SCIPisGT(), SCIPvarGetLbLocal(), SCIPvarGetLbOriginal(), SCIPvarGetLPSol(), and SCIPvarGetType().

    Referenced by SCIP_DECL_HEUREXEC().

    ◆ reducedCostSort()

    static SCIP_RETCODE reducedCostSort ( SCIP scip,
    SCIP_VAR ***  bw_contnonkernelvars,
    SCIP_VAR ***  bw_nonkernelvars,
    SCIP_VAR ***  bw_intnonkernelvars,
    SCIP_Real ***  bw_cont_redcost,
    SCIP_Real ***  bw_redcost,
    SCIP_Real ***  bw_int_redcost,
    int *  bw_ncontnonkernelvars,
    int *  bw_nnonkernelvars,
    int *  bw_nintnonkernelvars,
    SCIP_Bool  twolevel,
    int  nblocks 
    )
    static

    calculation of reduced costs and non-decreasing sorting

    Parameters
    scipmain SCIP data structure
    bw_contnonkernelvarsarray pointer of continuous, non-kernel variables
    bw_nonkernelvarsarray pointer of (binary,) non-kernel variables
    bw_intnonkernelvarsarray pointer of integer, non-kernel variables
    bw_cont_redcostarray pointer with reduced costs for continuous variables
    bw_redcostarray pointer with reduced costs for (binary) variables
    bw_int_redcostarray pointer with reduced costs for integer variables
    bw_ncontnonkernelvarsblockwise number of continuous, non-kernel variables
    bw_nnonkernelvarsblockwise number of (binary,) non-kernel variables
    bw_nintnonkernelvarsblockwise number of integer, non-kernel variables
    twolevelusage of one or two level structure
    nblocksnumber of blocks

    Definition at line 544 of file heur_dks.c.

    References b, SCIP_CALL, SCIP_INVALID, SCIP_OKAY, SCIPallocBufferArray, SCIPgetVarRedcost(), and SCIPsortRealPtr().

    Referenced by SCIP_DECL_HEUREXEC().

    ◆ freeRedcostArrays()

    static SCIP_RETCODE freeRedcostArrays ( SCIP scip,
    SCIP_Real ***  bw_cont_redcost,
    SCIP_Real ***  bw_redcost,
    SCIP_Real ***  bw_int_redcost,
    int  nblocks 
    )
    static

    free memory of reduced cost arrays

    Parameters
    scipmain SCIP data structure
    bw_cont_redcostarray pointer with reduced costs for continuous variables
    bw_redcostarray pointer with reduced costs for (binary) variables
    bw_int_redcostarray pointer with reduced costs for integer variables
    nblocksnumber of blocks

    Definition at line 613 of file heur_dks.c.

    References b, NULL, SCIP_OKAY, and SCIPfreeBufferArray.

    Referenced by SCIP_DECL_HEUREXEC().

    ◆ isInCurrentLogBucket()

    static SCIP_Bool isInCurrentLogBucket ( SCIP scip,
    SCIP_Real  base,
    SCIP_Real  redcost,
    SCIP_Real  redcostmin,
    int  currentindex,
    int  nbuckets 
    )
    static

    determines affiliation to a redcost (logsorted) bucket, avoiding inf to inf comparison

    Parameters
    scipSCIP data structure
    basethe nbuckets-th-root of the shifted max red costs in current bucket
    redcostthe reduced cost of the current variable
    redcostminthe minimal reduced cost of the current block for shifting
    currentindexcurrent iteration index
    nbucketsnumber of buckets

    Definition at line 662 of file heur_dks.c.

    References SCIP_Bool, SCIP_Real, SCIPisGT(), SCIPisInfinity(), and SCIPisLE().

    Referenced by fillBuckets().

    ◆ fillBuckets()

    static SCIP_RETCODE fillBuckets ( SCIP scip,
    BUCKETLIST **  bucketlist,
    SCIP_VAR ***  bw_contnonkernelvars,
    SCIP_VAR ***  bw_nonkernelvars,
    SCIP_VAR ***  bw_intnonkernelvars,
    int *  bw_ncontnonkernelvars,
    int *  bw_nnonkernelvars,
    int *  bw_nintnonkernelvars,
    SCIP_Real **  bw_cont_redcost,
    SCIP_Real **  bw_redcost,
    SCIP_Real **  bw_int_redcost,
    SCIP_Bool  twolevel,
    SCIP_Bool  redcostlogsort,
    int  nbuckets,
    int  nblocks 
    )
    static

    fill bucket with its variables

    Parameters
    scipmain SCIP data structure
    bucketlistarray pointer of buckets to fill
    bw_contnonkernelvarsarray of continuous, non-kernel variables
    bw_nonkernelvarsarray of (binary,) non-kernel variables
    bw_intnonkernelvarsarray of integer, non-kernel variables
    bw_ncontnonkernelvarsblockwise number of continuous, non-kernel variables
    bw_nnonkernelvarsblockwise number of (binary,) non-kernel variables
    bw_nintnonkernelvarsblockwise number of integer, non-kernel variables
    bw_cont_redcostblockwise reduced costs of continuous, non-kernel variables
    bw_redcostblockwise reduced costs of (binary,) non-kernel variables
    bw_int_redcostblockwise reduced costs of integer, non-kernel variables
    twolevelusage of one or two level structure
    redcostlogsortfilling the buckets by logarithmically reduced cost sort
    nbucketsnumber of buckets
    nblocksnumber of blocks

    Definition at line 699 of file heur_dks.c.

    References b, Bucket::bucketvars, Bucket::contbucketvars, Bucket::intbucketvars, isInCurrentLogBucket(), Bucket::nbucketvars, Bucket::ncontbucketvars, Bucket::nintbucketvars, NULL, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPallocBufferArray, SCIPceil(), SCIPfreeBufferArray, and SCIPisInfinity().

    Referenced by SCIP_DECL_HEUREXEC().

    ◆ freeBucketArrays()

    static SCIP_RETCODE freeBucketArrays ( SCIP scip,
    BUCKET bucket,
    SCIP_Bool  twolevel 
    )
    static

    release memory of bucket arrays

    Parameters
    scipmain SCIP data structure
    bucketbucket to free the arrays from
    twolevelusage of one or two level structure

    Definition at line 944 of file heur_dks.c.

    References Bucket::bucketvars, Bucket::contbucketvars, Bucket::intbucketvars, NULL, SCIP_OKAY, and SCIPfreeBufferArray.

    Referenced by SCIP_DECL_HEUREXEC().

    ◆ initBucket()

    ◆ freeBucket()

    static SCIP_RETCODE freeBucket ( SCIP scip,
    BUCKET bucket 
    )
    static

    free bucket structure

    Parameters
    scipSCIP data structure
    bucketbucket structure to free

    Definition at line 993 of file heur_dks.c.

    References NULL, Bucket::scip2sub, SCIP_CALL, SCIP_OKAY, SCIPfree(), SCIPfreeBufferArrayNull, Bucket::sub2scip, and Bucket::subscip.

    Referenced by SCIP_DECL_HEUREXEC().

    ◆ initBucketlist()

    static SCIP_RETCODE initBucketlist ( SCIP scip,
    BUCKETLIST **  bucketlist,
    int  nbuckets 
    )
    static

    initialize the bucketlist

    Parameters
    scipSCIP data structure
    bucketlistpointer to bucketlist
    nbucketsnumber of buckets

    Definition at line 1015 of file heur_dks.c.

    References NULL, SCIP_CALL, SCIP_MAXSTRLEN, SCIP_OKAY, SCIPallocBlockMemory, SCIPallocBlockMemoryArray, SCIPdebugMessage, SCIPgetProbName(), and SCIPsnprintf().

    Referenced by createBucketlistAndBuckets().

    ◆ freeBucketlist()

    static SCIP_RETCODE freeBucketlist ( BUCKETLIST **  bucketlist,
    int  nbuckets 
    )
    static

    free bucketlist structure

    Parameters
    bucketlistpointer to bucketlist to free
    nbucketsnumber of buckets to free

    Definition at line 1043 of file heur_dks.c.

    References NULL, SCIP_OKAY, SCIPfreeBlockMemory, and SCIPfreeBlockMemoryArray.

    Referenced by SCIP_DECL_HEUREXEC().

    ◆ bucketCreateSubscip()

    static SCIP_RETCODE bucketCreateSubscip ( BUCKET bucket,
    SCIP_Bool  usetransprob,
    SCIP_Bool success 
    )
    static

    ◆ createBucketlistAndBuckets()

    static SCIP_RETCODE createBucketlistAndBuckets ( SCIP scip,
    SCIP_Bool  usetransprob,
    int  nbuckets,
    BUCKETLIST **  bucketlist,
    SCIP_Bool success 
    )
    static

    create bucketlist and initialize buckets

    Parameters
    scipSCIP data structure
    usetransprobindication whether to use the transformed problem (or the original)
    nbucketsnumber of buckets (without kernel only)
    bucketlistpointer to store bucketlist structure
    successpointer to store if the creation process was successfull

    Definition at line 1262 of file heur_dks.c.

    References b, bucketCreateSubscip(), initBucket(), initBucketlist(), NULL, SCIP_CALL, SCIP_OKAY, and TRUE.

    Referenced by SCIP_DECL_HEUREXEC().

    ◆ searchKernelAndBucket()

    static SCIP_RETCODE searchKernelAndBucket ( BUCKET bucket,
    SCIP_VAR **  contkernelvars,
    int  ncontkernelvars,
    SCIP_VAR **  kernelvars,
    int  nkernelvars,
    SCIP_VAR **  intkernelvars,
    int  nintkernelvars,
    SCIP_VAR var,
    SCIP_Bool found 
    )
    static

    search variable in kernel and bucket

    Parameters
    bucketbucket to be solved next
    contkernelvarscontinuous variables in the latest kernel
    ncontkernelvarsamount of continuous variables in the latest kernel
    kernelvarsvariables in the kernel
    nkernelvarsamount of variables in the kernel
    intkernelvarsvariables in the integer kernel, if 2-level buckets are present
    nintkernelvarsamount of variables in the integer kernel
    varvariable to search for in the kernel/buckets
    foundis the variable present in the current bucket or the kernel?

    Definition at line 1301 of file heur_dks.c.

    References Bucket::bucketvars, Bucket::contbucketvars, FALSE, Bucket::intbucketvars, Bucket::nbucketvars, Bucket::ncontbucketvars, Bucket::nintbucketvars, NULL, SCIP_OKAY, SCIP_VARTYPE_CONTINUOUS, SCIPvarGetType(), and TRUE.

    Referenced by SCIP_DECL_HEUREXEC().

    ◆ adjustKernelVars()

    static SCIP_RETCODE adjustKernelVars ( SCIP scip,
    BUCKET bucket,
    SCIP_VAR ***  contkernelvars,
    int *  ncontkernelvars,
    int  maxcontkernelsize,
    SCIP_VAR ***  kernelvars,
    int *  nkernelvars,
    int  maxkernelsize,
    SCIP_VAR ***  intkernelvars,
    int *  nintkernelvars,
    int  maxintkernelsize,
    SCIP_Bool  twolevel 
    )
    static

    adjust the kernel variables

    Parameters
    scipcurrent scip
    bucketbucket that was solved last
    contkernelvarscont. kernelvars to adjust
    ncontkernelvarsamount of cont. kernelvars
    maxcontkernelsizemaximal size of the continuous kernel
    kernelvarskernelvars to adjust
    nkernelvarsamount of kernelvars
    maxkernelsizemaximal size of the kernel
    intkernelvarsinteger kernelvars to adjust
    nintkernelvarsamount of integer kernelvars
    maxintkernelsizemaximal size of the integer kernel
    twolevelis a twolevel structure necessary

    Definition at line 1385 of file heur_dks.c.

    References Bucket::bucketvars, Bucket::contbucketvars, Bucket::intbucketvars, Bucket::nbucketvars, Bucket::ncontbucketvars, Bucket::nintbucketvars, NULL, Bucket::scip2sub, SCIP_OKAY, SCIP_Real, SCIPgetBestSol(), SCIPgetNVars(), SCIPgetSolVal(), SCIPisEQ(), SCIPisGT(), SCIPvarGetLbLocal(), SCIPvarGetProbindex(), SCIPvarIsActive(), and Bucket::subscip.

    Referenced by SCIP_DECL_HEUREXEC().

    ◆ addUseConstraint()

    ◆ SCIP_DECL_HEURCOPY()

    static SCIP_DECL_HEURCOPY ( heurCopyDKS  )
    static

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

    Definition at line 1735 of file heur_dks.c.

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

    ◆ SCIP_DECL_HEURFREE()

    static SCIP_DECL_HEURFREE ( heurFreeDKS  )
    static

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

    Definition at line 1750 of file heur_dks.c.

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

    ◆ SCIP_DECL_HEUREXEC()

    static SCIP_DECL_HEUREXEC ( heurExecDKS  )
    static

    execution method of primal heuristic

    Definition at line 1768 of file heur_dks.c.

    References addUseConstraint(), adjustKernelVars(), b, Bucketlist::buckets, Bucket::bucketvars, countKernelVariables(), createBucketlistAndBuckets(), FALSE, fillBuckets(), fillKernels(), freeBucket(), freeBucketArrays(), freeBucketlist(), freeRedcostArrays(), getLinkingScoreAndBlocklabels(), MIN, Bucketlist::nbuckets, Bucket::nbucketvars, Bucket::nintbucketvars, nnodes, NULL, Bucket::number, reducedCostSort(), Bucket::scip2sub, SCIP_Bool, SCIP_CALL, SCIP_CALL_ABORT, SCIP_DIDNOTFIND, SCIP_DIDNOTRUN, SCIP_FOUNDSOL, SCIP_Longint, SCIP_LPSOLSTAT_OPTIMAL, SCIP_MAXSTRLEN, SCIP_OKAY, SCIP_Real, SCIP_STATUS_GAPLIMIT, SCIP_STATUS_INFEASIBLE, SCIP_STATUS_NODELIMIT, SCIP_STATUS_OPTIMAL, SCIP_VARTYPE_CONTINUOUS, SCIPallocBufferArray, SCIPallocClearBlockMemoryArray, SCIPallocClearBufferArray, SCIPblkmem(), SCIPceil(), SCIPconshdlrGetNConss(), SCIPdebug, SCIPdebugMsg, SCIPdecompGetConsLabels(), SCIPdecompGetNBlocks(), SCIPdecompGetVarsLabels(), SCIPduplicateBufferArray, SCIPfindConshdlr(), SCIPfixVar(), SCIPfloor(), SCIPfreeBlockMemoryArray, SCIPfreeBufferArray, SCIPfreeTransform(), SCIPgetBestSol(), SCIPgetConss(), SCIPgetCutoffbound(), SCIPgetDecomps(), SCIPgetLPSolstat(), SCIPgetMemExternEstim(), SCIPgetMemUsed(), SCIPgetNConss(), SCIPgetNNodes(), SCIPgetNOrigConss(), SCIPgetNSols(), SCIPgetOrigConss(), SCIPgetOrigVars(), SCIPgetOrigVarsData(), SCIPgetRealParam(), SCIPgetSolOrigObj(), SCIPgetSolvingTime(), SCIPgetStatus(), SCIPgetTotalTime(), SCIPgetVarsData(), SCIPhashmapCreate(), SCIPhashmapFree(), SCIPhashmapSetImageReal(), SCIPheurGetData(), SCIPinfinity(), SCIPisGT(), SCIPisInfinity(), SCIPprintSol(), SCIPsetLongintParam(), SCIPsetObjlimit(), SCIPsetRealParam(), SCIPsnprintf(), SCIPsolve(), SCIPsortInt(), SCIPtranslateSubSol(), SCIPtrySolFree(), SCIPvarGetLbLocal(), SCIPvarGetLbOriginal(), SCIPvarGetOrigvarSum(), SCIPvarGetProbindex(), SCIPvarGetType(), SCIPvarGetUbLocal(), SCIPvarIsActive(), SCIPwriteOrigProblem(), SCIPwriteTransProblem(), searchKernelAndBucket(), Bucket::subscip, and TRUE.