Scippy

SCIP

Solving Constraint Integer Programs

struct_heur.h
Go to the documentation of this file.
1 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2 /* */
3 /* This file is part of the program and library */
4 /* SCIP --- Solving Constraint Integer Programs */
5 /* */
6 /* Copyright (C) 2002-2016 Konrad-Zuse-Zentrum */
7 /* fuer Informationstechnik Berlin */
8 /* */
9 /* SCIP is distributed under the terms of the ZIB Academic License. */
10 /* */
11 /* You should have received a copy of the ZIB Academic License */
12 /* along with SCIP; see the file COPYING. If not email to scip@zib.de. */
13 /* */
14 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
15 
16 /**@file struct_heur.h
17  * @brief datastructures for primal heuristics
18  * @author Tobias Achterberg
19  */
20 
21 /*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
22 
23 #ifndef __SCIP_STRUCT_HEUR_H__
24 #define __SCIP_STRUCT_HEUR_H__
25 
26 
27 #include "scip/def.h"
28 #include "scip/type_clock.h"
29 #include "scip/type_heur.h"
30 
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
34 
35 /** common settings for diving heuristics */
37 {
38  SCIP_HEUR* heur; /**< the heuristic to which this dive set belongs */
39  char* name; /**< name of dive controller, in case that a heuristic has several */
40  SCIP_SOL* sol; /**< working solution of this dive set */
41  SCIP_Real minreldepth; /**< minimal relative depth to start diving */
42  SCIP_Real maxreldepth; /**< maximal relative depth to start diving */
43  SCIP_Real maxlpiterquot; /**< maximal fraction of diving LP iterations compared to node LP iterations */
44  SCIP_Real maxdiveubquot; /**< maximal quotient (curlowerbound - lowerbound)/(cutoffbound - lowerbound)
45  * where diving is performed (0.0: no limit) */
46  SCIP_Real maxdiveavgquot; /**< maximal quotient (curlowerbound - lowerbound)/(avglowerbound - lowerbound)
47  * where diving is performed (0.0: no limit) */
48  SCIP_Real maxdiveubquotnosol; /**< maximal UBQUOT when no solution was found yet (0.0: no limit) */
49  SCIP_Real maxdiveavgquotnosol;/**< maximal AVGQUOT when no solution was found yet (0.0: no limit) */
50  SCIP_Real lpresolvedomchgquot;/**< percentage of immediate domain changes during probing to trigger LP resolve */
51  SCIP_Longint nlpiterations; /**< LP iterations used in this dive set */
52  SCIP_Longint nlps; /**< the number of LPs solved by this dive set */
53  SCIP_Longint totaldepth; /**< the total depth used in this dive set */
54  SCIP_Longint totalsoldepth; /**< the sum of depths at which this dive set found solutions */
55  SCIP_Longint totalnnodes; /**< the total number of probing nodes explored by this dive set */
56  SCIP_Longint totalnbacktracks; /**< the total number of backtracks during the execution of this dive set */
57  SCIP_Longint nsolsfound; /**< the total number of solutions found */
58  SCIP_Longint nbestsolsfound; /**< the total number of best solutions found */
59  int maxlpiterofs; /**< additional number of allowed LP iterations */
60  int mindepth; /**< the minimum depth reached by all executions of the dive set */
61  int maxdepth; /**< the maximum depth reached by an execution of the dive set */
62  int minsoldepth; /**< the minimum depth at which this dive set found a solution */
63  int maxsoldepth; /**< the maximum depth at which this dive set found a solution */
64  int ncalls; /**< the total number of calls of this dive set */
65  int nsolcalls; /**< number of calls with a leaf solution */
66  int lpsolvefreq; /**< LP solve frequency for diving heuristics */
67  SCIP_Bool backtrack; /**< use one level of backtracking if infeasibility is encountered? */
68  SCIP_Bool onlylpbranchcands; /**< should only LP branching candidates be considered instead of the slower but
69  * more general constraint handler diving variable selection? */
70  SCIP_DIVETYPE divetypemask; /**< bit mask that represents the supported dive types by this dive set */
71  SCIP_DECL_DIVESETGETSCORE((*divesetgetscore)); /**< method for candidate score and rounding direction */
72 };
73 
74 /** primal heuristics data */
75 struct SCIP_Heur
76 {
77  SCIP_Longint ncalls; /**< number of times, this heuristic was called */
78  SCIP_Longint nsolsfound; /**< number of feasible primal solutions found so far by this heuristic */
79  SCIP_Longint nbestsolsfound; /**< number of new best primal CIP solutions found so far by this heuristic */
80  char* name; /**< name of primal heuristic */
81  char* desc; /**< description of primal heuristic */
82  SCIP_DECL_HEURCOPY ((*heurcopy)); /**< copy method of primal heuristic or NULL if you don't want to copy your plugin into sub-SCIPs */
83  SCIP_DECL_HEURFREE ((*heurfree)); /**< destructor of primal heuristic */
84  SCIP_DECL_HEURINIT ((*heurinit)); /**< initialize primal heuristic */
85  SCIP_DECL_HEUREXIT ((*heurexit)); /**< deinitialize primal heuristic */
86  SCIP_DECL_HEURINITSOL ((*heurinitsol)); /**< solving process initialization method of primal heuristic */
87  SCIP_DECL_HEUREXITSOL ((*heurexitsol)); /**< solving process deinitialization method of primal heuristic */
88  SCIP_DECL_HEUREXEC ((*heurexec)); /**< execution method of primal heuristic */
89  SCIP_HEURDATA* heurdata; /**< primal heuristics local data */
90  SCIP_DIVESET** divesets; /**< array of diving controllers of this heuristic */
91  SCIP_CLOCK* setuptime; /**< time spend for setting up this heuristic for the next stages */
92  SCIP_CLOCK* heurclock; /**< heuristic execution time */
93  int priority; /**< priority of the primal heuristic */
94  int freq; /**< frequency for calling primal heuristic */
95  int freqofs; /**< frequency offset for calling primal heuristic */
96  int maxdepth; /**< maximal depth level to call heuristic at (-1: no limit) */
97  int delaypos; /**< position in the delayed heuristics queue, or -1 if not delayed */
98  int ndivesets; /**< number of diving controllers of this heuristic */
99  unsigned int timingmask; /**< positions in the node solving loop where heuristic should be executed */
100  SCIP_Bool usessubscip; /**< does the heuristic use a secondary SCIP instance? */
101  SCIP_Bool initialized; /**< is primal heuristic initialized? */
102  char dispchar; /**< display character of primal heuristic */
103 };
104 
105 #ifdef __cplusplus
106 }
107 #endif
108 
109 #endif
SCIP_Bool onlylpbranchcands
Definition: struct_heur.h:68
SCIP_Longint totalnnodes
Definition: struct_heur.h:55
#define SCIP_DECL_HEURINITSOL(x)
Definition: type_heur.h:95
SCIP_HEUR * heur
Definition: struct_heur.h:38
SCIP_Longint totalnbacktracks
Definition: struct_heur.h:56
SCIP_DIVESET ** divesets
Definition: struct_heur.h:90
int ndivesets
Definition: struct_heur.h:98
int delaypos
Definition: struct_heur.h:97
SCIP_Real maxreldepth
Definition: struct_heur.h:42
SCIP_Bool backtrack
Definition: struct_heur.h:67
SCIP_Real maxlpiterquot
Definition: struct_heur.h:43
SCIP_Longint nsolsfound
Definition: struct_heur.h:78
SCIP_CLOCK * heurclock
Definition: struct_heur.h:92
SCIP_Longint totaldepth
Definition: struct_heur.h:53
char * name
Definition: struct_heur.h:39
#define SCIP_DECL_HEURCOPY(x)
Definition: type_heur.h:60
#define SCIP_DECL_HEUREXEC(x)
Definition: type_heur.h:126
SCIP_CLOCK * setuptime
Definition: struct_heur.h:91
struct SCIP_HeurData SCIP_HEURDATA
Definition: type_heur.h:51
char dispchar
Definition: struct_heur.h:102
unsigned int SCIP_DIVETYPE
Definition: type_heur.h:48
unsigned int timingmask
Definition: struct_heur.h:99
SCIP_Bool usessubscip
Definition: struct_heur.h:100
SCIP_Real maxdiveavgquotnosol
Definition: struct_heur.h:49
char * name
Definition: struct_heur.h:80
type definitions for primal heuristics
SCIP_SOL * sol
Definition: struct_heur.h:40
SCIP_Real lpresolvedomchgquot
Definition: struct_heur.h:50
SCIP_Real maxdiveubquot
Definition: struct_heur.h:44
SCIP_Bool initialized
Definition: struct_heur.h:101
SCIP_Longint nlpiterations
Definition: struct_heur.h:51
SCIP_Longint totalsoldepth
Definition: struct_heur.h:54
#define SCIP_Bool
Definition: def.h:53
char * desc
Definition: struct_heur.h:81
int priority
Definition: struct_heur.h:93
SCIP_DIVETYPE divetypemask
Definition: struct_heur.h:70
SCIP_HEURDATA * heurdata
Definition: struct_heur.h:89
type definitions for clocks and timing issues
SCIP_Real maxdiveavgquot
Definition: struct_heur.h:46
SCIP_Longint ncalls
Definition: struct_heur.h:77
SCIP_DECL_DIVESETGETSCORE((*divesetgetscore))
#define SCIP_DECL_HEUREXIT(x)
Definition: type_heur.h:84
SCIP_Longint nsolsfound
Definition: struct_heur.h:57
#define SCIP_DECL_HEURINIT(x)
Definition: type_heur.h:76
SCIP_Longint nbestsolsfound
Definition: struct_heur.h:79
#define SCIP_Real
Definition: def.h:127
SCIP_Longint nbestsolsfound
Definition: struct_heur.h:58
#define SCIP_DECL_HEURFREE(x)
Definition: type_heur.h:68
#define SCIP_Longint
Definition: def.h:112
SCIP_Real minreldepth
Definition: struct_heur.h:41
int maxlpiterofs
Definition: struct_heur.h:59
SCIP_Longint nlps
Definition: struct_heur.h:52
common defines and data types used in all packages of SCIP
#define SCIP_DECL_HEUREXITSOL(x)
Definition: type_heur.h:106
SCIP_Real maxdiveubquotnosol
Definition: struct_heur.h:48
int maxdepth
Definition: struct_heur.h:96
int freqofs
Definition: struct_heur.h:95