Scippy

SCIP

Solving Constraint Integer Programs

pub_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-2022 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 visit scipopt.org. */
13 /* */
14 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
15 
16 /**@file pub_heur.h
17  * @ingroup PUBLICCOREAPI
18  * @brief public methods for primal heuristics
19  * @author Tobias Achterberg
20  */
21 
22 /*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
23 
24 #ifndef __SCIP_PUB_HEUR_H__
25 #define __SCIP_PUB_HEUR_H__
26 
27 #include "scip/def.h"
28 #include "scip/type_heur.h"
29 #include "scip/type_misc.h"
30 #include "scip/type_retcode.h"
31 #include "scip/type_scip.h"
32 #include "scip/type_sol.h"
33 #include "scip/type_timing.h"
34 #include "scip/type_var.h"
35 
36 #ifdef __cplusplus
37 extern "C" {
38 #endif
39 
40 /**@addtogroup PublicHeuristicMethods
41  *
42  * @{
43  */
44 
45 
46 
47 /** compares two heuristics w.r.t. to their delay positions and priorities */
48 SCIP_EXPORT
49 SCIP_DECL_SORTPTRCOMP(SCIPheurComp);
50 
51 /** compares two heuristics w.r.t. to their priority values */
52 SCIP_EXPORT
53 SCIP_DECL_SORTPTRCOMP(SCIPheurCompPriority);
54 
55 /** comparison method for sorting heuristics w.r.t. to their name */
56 SCIP_EXPORT
57 SCIP_DECL_SORTPTRCOMP(SCIPheurCompName);
58 
59 /** gets user data of primal heuristic */
60 SCIP_EXPORT
62  SCIP_HEUR* heur /**< primal heuristic */
63  );
64 
65 /** sets user data of primal heuristic; user has to free old data in advance! */
66 SCIP_EXPORT
67 void SCIPheurSetData(
68  SCIP_HEUR* heur, /**< primal heuristic */
69  SCIP_HEURDATA* heurdata /**< new primal heuristic user data */
70  );
71 
72 /** gets name of primal heuristic */
73 SCIP_EXPORT
74 const char* SCIPheurGetName(
75  SCIP_HEUR* heur /**< primal heuristic */
76  );
77 
78 /** gets description of primal heuristic */
79 SCIP_EXPORT
80 const char* SCIPheurGetDesc(
81  SCIP_HEUR* heur /**< primal heuristic */
82  );
83 
84 /** gets display character of primal heuristic */
85 SCIP_EXPORT
87  SCIP_HEUR* heur /**< primal heuristic */
88  );
89 
90 /** returns the timing mask of the heuristic */
91 SCIP_EXPORT
93  SCIP_HEUR* heur /**< primal heuristic */
94  );
95 
96 /** sets new timing mask for heuristic */
97 SCIP_EXPORT
99  SCIP_HEUR* heur, /**< primal heuristic */
100  SCIP_HEURTIMING timingmask /**< new timing mask of heuristic */
101  );
102 
103 /** does the heuristic use a secondary SCIP instance? */
104 SCIP_EXPORT
106  SCIP_HEUR* heur /**< primal heuristic */
107  );
108 
109 /** gets priority of primal heuristic */
110 SCIP_EXPORT
112  SCIP_HEUR* heur /**< primal heuristic */
113  );
114 
115 /** gets frequency of primal heuristic */
116 SCIP_EXPORT
117 int SCIPheurGetFreq(
118  SCIP_HEUR* heur /**< primal heuristic */
119  );
120 
121 /** sets frequency of primal heuristic */
122 SCIP_EXPORT
123 void SCIPheurSetFreq(
124  SCIP_HEUR* heur, /**< primal heuristic */
125  int freq /**< new frequency of heuristic */
126  );
127 
128 /** gets frequency offset of primal heuristic */
129 SCIP_EXPORT
131  SCIP_HEUR* heur /**< primal heuristic */
132  );
133 
134 /** gets maximal depth level for calling primal heuristic (returns -1, if no depth limit exists) */
135 SCIP_EXPORT
137  SCIP_HEUR* heur /**< primal heuristic */
138  );
139 
140 /** gets the number of times, the heuristic was called and tried to find a solution */
141 SCIP_EXPORT
143  SCIP_HEUR* heur /**< primal heuristic */
144  );
145 
146 /** gets the number of primal feasible solutions found by this heuristic */
147 SCIP_EXPORT
149  SCIP_HEUR* heur /**< primal heuristic */
150  );
151 
152 /** gets the number of new best primal feasible solutions found by this heuristic */
153 SCIP_EXPORT
155  SCIP_HEUR* heur /**< primal heuristic */
156  );
157 
158 /** is primal heuristic initialized? */
159 SCIP_EXPORT
161  SCIP_HEUR* heur /**< primal heuristic */
162  );
163 
164 /** gets time in seconds used in this heuristic for setting up for next stages */
165 SCIP_EXPORT
167  SCIP_HEUR* heur /**< primal heuristic */
168  );
169 
170 /** gets time in seconds used in this heuristic */
171 SCIP_EXPORT
173  SCIP_HEUR* heur /**< primal heuristic */
174  );
175 
176 /** returns array of divesets of this primal heuristic, or NULL if it has no divesets */
177 SCIP_EXPORT
179  SCIP_HEUR* heur /**< primal heuristic */
180  );
181 
182 /** returns the number of divesets of this primal heuristic */
183 SCIP_EXPORT
185  SCIP_HEUR* heur /**< primal heuristic */
186  );
187 
188 /** @} */
189 
190 /** get the heuristic to which this diving setting belongs */
191 SCIP_EXPORT
193  SCIP_DIVESET* diveset /**< diving settings */
194  );
195 
196 /** get the working solution of this dive set */
197 SCIP_EXPORT
199  SCIP_DIVESET* diveset /**< diving settings */
200  );
201 
202 /** set the working solution for this dive set */
203 SCIP_EXPORT
205  SCIP_DIVESET* diveset, /**< diving settings */
206  SCIP_SOL* sol /**< new working solution for this dive set, or NULL */
207  );
208 
209 /**@addtogroup PublicDivesetMethods
210  *
211  * @{
212  */
213 
214 /** get the name of the dive set */
215 SCIP_EXPORT
216 const char* SCIPdivesetGetName(
217  SCIP_DIVESET* diveset /**< diving settings */
218  );
219 
220 /** get the minimum relative depth of the diving settings */
221 SCIP_EXPORT
223  SCIP_DIVESET* diveset /**< diving settings */
224  );
225 
226 /** get the maximum relative depth of the diving settings */
227 SCIP_EXPORT
229  SCIP_DIVESET* diveset /**< diving settings */
230  );
231 
232 /** get the number of successful runs of the diving settings */
233 SCIP_EXPORT
235  SCIP_DIVESET* diveset, /**< diving settings */
236  SCIP_DIVECONTEXT divecontext /**< context for diving statistics */
237  );
238 
239 /** get the number of calls to this dive set */
240 SCIP_EXPORT
242  SCIP_DIVESET* diveset, /**< diving settings */
243  SCIP_DIVECONTEXT divecontext /**< context for diving statistics */
244  );
245 
246 /** get the number of calls successfully terminated at a feasible leaf node */
247 SCIP_EXPORT
249  SCIP_DIVESET* diveset, /**< diving settings */
250  SCIP_DIVECONTEXT divecontext /**< context for diving statistics */
251  );
252 
253 /** get the minimum depth reached by this dive set */
254 SCIP_EXPORT
256  SCIP_DIVESET* diveset, /**< diving settings */
257  SCIP_DIVECONTEXT divecontext /**< context for diving statistics */
258  );
259 
260 /** get the maximum depth reached by this dive set */
261 SCIP_EXPORT
263  SCIP_DIVESET* diveset, /**< diving settings */
264  SCIP_DIVECONTEXT divecontext /**< context for diving statistics */
265  );
266 
267 /** get the average depth this dive set reached during execution */
268 SCIP_EXPORT
270  SCIP_DIVESET* diveset, /**< diving settings */
271  SCIP_DIVECONTEXT divecontext /**< context for diving statistics */
272  );
273 
274 /** get the minimum depth at which this dive set found a solution */
275 SCIP_EXPORT
277  SCIP_DIVESET* diveset, /**< diving settings */
278  SCIP_DIVECONTEXT divecontext /**< context for diving statistics */
279  );
280 
281 /** get the maximum depth at which this dive set found a solution */
282 SCIP_EXPORT
284  SCIP_DIVESET* diveset, /**< diving settings */
285  SCIP_DIVECONTEXT divecontext /**< context for diving statistics */
286  );
287 
288 /** get the average depth at which this dive set found a solution */
289 SCIP_EXPORT
291  SCIP_DIVESET* diveset, /**< diving settings */
292  SCIP_DIVECONTEXT divecontext /**< context for diving statistics */
293  );
294 
295 /** get the total number of LP iterations used by this dive set */
296 SCIP_EXPORT
298  SCIP_DIVESET* diveset, /**< diving settings */
299  SCIP_DIVECONTEXT divecontext /**< context for diving statistics */
300  );
301 
302 /** get the total number of probing nodes used by this dive set */
303 SCIP_EXPORT
305  SCIP_DIVESET* diveset, /**< diving settings */
306  SCIP_DIVECONTEXT divecontext /**< context for diving statistics */
307  );
308 
309 /** get the total number of backtracks performed by this dive set */
310 SCIP_EXPORT
312  SCIP_DIVESET* diveset, /**< diving settings */
313  SCIP_DIVECONTEXT divecontext /**< context for diving statistics */
314  );
315 
316 /** get the total number of conflicts found by this dive set */
317 SCIP_EXPORT
319  SCIP_DIVESET* diveset, /**< diving settings */
320  SCIP_DIVECONTEXT divecontext /**< context for diving statistics */
321  );
322 
323 /** get the total number of solutions (leaf and rounded solutions) found by the dive set */
324 SCIP_EXPORT
326  SCIP_DIVESET* diveset, /**< diving settings */
327  SCIP_DIVECONTEXT divecontext /**< context for diving statistics */
328  );
329 
330 /** get the maximum LP iterations quotient of the diving settings */
331 SCIP_EXPORT
333  SCIP_DIVESET* diveset /**< diving settings */
334  );
335 
336 /** get the maximum LP iterations offset of the diving settings */
337 SCIP_EXPORT
339  SCIP_DIVESET* diveset /**< diving settings */
340  );
341 
342 /** get the maximum upper bound quotient parameter of the diving settings if no solution is available */
343 SCIP_EXPORT
345  SCIP_DIVESET* diveset /**< diving settings */
346  );
347 
348 /** get the average quotient parameter of the diving settings if no solution is available */
349 SCIP_EXPORT
351  SCIP_DIVESET* diveset /**< diving settings */
352  );
353 
354 /** get the maximum upper bound quotient parameter of the diving settings if an incumbent solution exists */
355 SCIP_EXPORT
357  SCIP_DIVESET* diveset /**< diving settings */
358  );
359 
360 /** get the average upper bound quotient parameter of the diving settings if an incumbent solution exists */
361 SCIP_EXPORT
363  SCIP_DIVESET* diveset /**< diving settings */
364  );
365 
366 /** should backtracking be applied? */
367 SCIP_EXPORT
369  SCIP_DIVESET* diveset /**< diving settings */
370  );
371 
372 /** returns the LP solve frequency for diving LPs (0: dynamically based on number of intermediate domain reductions) */
373 SCIP_EXPORT
375  SCIP_DIVESET* diveset /**< diving settings */
376  );
377 
378 /** returns the domain reduction quotient for triggering an immediate resolve of the diving LP (0.0: always resolve)*/
379 SCIP_EXPORT
381  SCIP_DIVESET* diveset /**< diving settings */
382  );
383 
384 /** should only LP branching candidates be considered instead of the slower but
385  * more general constraint handler diving variable selection?
386  */
387 SCIP_EXPORT
389  SCIP_DIVESET* diveset /**< diving settings */
390  );
391 
392 /** returns TRUE if dive set supports diving of the specified type */
393 SCIP_EXPORT
395  SCIP_DIVESET* diveset, /**< diving settings */
396  SCIP_DIVETYPE divetype /**< bit mask that represents the supported dive types by this dive set */
397  );
398 
399 /** returns the random number generator of this \p diveset for tie-breaking */
400 SCIP_EXPORT
402  SCIP_DIVESET* diveset /**< diving settings */
403  );
404 
405 /** is this dive set publicly available (ie., can be used by other primal heuristics?) */
406 SCIP_EXPORT
408  SCIP_DIVESET* diveset /**< diving settings */
409  );
410 
411 /** @} */
412 
413 /**@defgroup PublicVariableGraphMethods Public Variable Graph Methods
414  * @ingroup MiscellaneousMethods
415  *
416  * @brief methods to create a variable graph and perform breadth-first search
417  *
418  * @{
419  */
420 
421 /** Perform breadth-first (BFS) search on the variable constraint graph.
422  *
423  * The result of the algorithm is that the \p distances array contains the correct distances for
424  * every variable from the start variables. The distance of a variable can then be accessed through its
425  * problem index (calling SCIPvarGetProbindex()).
426  * Hence, The method assumes that the length of \p distances is at least
427  * SCIPgetNVars().
428  * Variables that are not connected through constraints to the start variables have a distance of -1.
429  *
430  * Limits can be provided to further restrict the breadth-first search. If a distance limit is given,
431  * the search will be performed until the first variable at this distance is popped from the queue, i.e.,
432  * all variables with a distance < maxdistance have been labeled by the search.
433  * If a variable limit is given, the search stops after it completes the distance level at which
434  * the limit was reached. Hence, more variables may be actually labeled.
435  * The start variables are accounted for those variable limits.
436  *
437  * If no variable variable constraint graph is provided, the method will create one and free it at the end
438  * This is useful for a single use of the variable constraint graph. For several consecutive uses,
439  * it is advised to create a variable constraint graph via SCIPvariableGraphCreate().
440  */
441 SCIP_EXPORT
443  SCIP* scip, /**< SCIP data structure */
444  SCIP_VGRAPH* vargraph, /**< pointer to the variable graph, or NULL to let the function create a local graph */
445  SCIP_VAR** startvars, /**< array of start variables to calculate distance from */
446  int nstartvars, /**< number of starting variables, at least 1 */
447  int* distances, /**< array to keep distance in vargraph from start variables for every variable */
448  int maxdistance, /**< maximum distance >= 0 from start variable (INT_MAX for complete BFS) */
449  int maxvars, /**< maximum number of variables to compute distance for */
450  int maxbinintvars /**< maximum number of binary or integer variables to compute distance for */
451  );
452 
453 /** initialization method of variable graph data structure */
454 SCIP_EXPORT
456  SCIP* scip, /**< SCIP data structure */
457  SCIP_VGRAPH** vargraph, /**< pointer to the variable graph */
458  SCIP_Bool relaxdenseconss, /**< should dense constraints (at least as dense as \p density) be
459  * ignored by connectivity graph? */
460  SCIP_Real relaxdensity, /**< density (with respect to number of variables) to relax constraint from graph */
461  int* nrelaxedconstraints /**< pointer to store the number of constraints that were relaxed, or NULL if not needed */
462  );
463 
464 /** deinitialization method of variable graph data structure */
465 SCIP_EXPORT
467  SCIP* scip, /**< SCIP data structure */
468  SCIP_VGRAPH** vargraph /**< pointer to the variable graph */
469  );
470 
471 /** @} */
472 
473 
474 #ifdef __cplusplus
475 }
476 #endif
477 
478 #endif
SCIP_HEURTIMING SCIPheurGetTimingmask(SCIP_HEUR *heur)
Definition: heur.c:1471
int SCIPdivesetGetNSolutionCalls(SCIP_DIVESET *diveset, SCIP_DIVECONTEXT divecontext)
Definition: heur.c:487
int SCIPheurGetPriority(SCIP_HEUR *heur)
Definition: heur.c:1502
SCIP_Real SCIPheurGetSetupTime(SCIP_HEUR *heur)
Definition: heur.c:1619
SCIP_Longint SCIPdivesetGetNBacktracks(SCIP_DIVESET *diveset, SCIP_DIVECONTEXT divecontext)
Definition: heur.c:604
type definitions for miscellaneous datastructures
timing definitions for SCIP
SCIP_SOL * SCIPdivesetGetWorkSolution(SCIP_DIVESET *diveset)
Definition: heur.c:413
SCIP_Bool SCIPdivesetUseBacktrack(SCIP_DIVESET *diveset)
Definition: heur.c:691
SCIP_Longint SCIPheurGetNBestSolsFound(SCIP_HEUR *heur)
Definition: heur.c:1587
void SCIPvariableGraphFree(SCIP *scip, SCIP_VGRAPH **vargraph)
Definition: heur.c:2017
unsigned int SCIP_HEURTIMING
Definition: type_timing.h:97
SCIP_Real SCIPdivesetGetUbQuot(SCIP_DIVESET *diveset)
Definition: heur.c:675
int SCIPdivesetGetMaxLPIterOffset(SCIP_DIVESET *diveset)
Definition: heur.c:652
SCIP_Longint SCIPdivesetGetNLPIterations(SCIP_DIVESET *diveset, SCIP_DIVECONTEXT divecontext)
Definition: heur.c:578
int SCIPdivesetGetNCalls(SCIP_DIVESET *diveset, SCIP_DIVECONTEXT divecontext)
Definition: heur.c:474
SCIP_DIVESET ** SCIPheurGetDivesets(SCIP_HEUR *heur)
Definition: heur.c:1639
SCIP_Real SCIPdivesetGetAvgQuotNoSol(SCIP_DIVESET *diveset)
Definition: heur.c:668
enum SCIP_Retcode SCIP_RETCODE
Definition: type_retcode.h:54
SCIP_Real SCIPdivesetGetMaxRelDepth(SCIP_DIVESET *diveset)
Definition: heur.c:452
int SCIPheurGetFreqofs(SCIP_HEUR *heur)
Definition: heur.c:1547
struct SCIP_HeurData SCIP_HEURDATA
Definition: type_heur.h:67
SCIP_Bool SCIPheurUsesSubscip(SCIP_HEUR *heur)
Definition: heur.c:1492
type definitions for return codes for SCIP methods
unsigned int SCIP_DIVETYPE
Definition: type_heur.h:54
SCIP_Real SCIPdivesetGetMinRelDepth(SCIP_DIVESET *diveset)
Definition: heur.c:444
void SCIPheurSetData(SCIP_HEUR *heur, SCIP_HEURDATA *heurdata)
Definition: heur.c:1362
SCIP_Real SCIPdivesetGetAvgSolutionDepth(SCIP_DIVESET *diveset, SCIP_DIVECONTEXT divecontext)
Definition: heur.c:565
SCIP_Longint SCIPdivesetGetNProbingNodes(SCIP_DIVESET *diveset, SCIP_DIVECONTEXT divecontext)
Definition: heur.c:591
void SCIPheurSetFreq(SCIP_HEUR *heur, int freq)
Definition: heur.c:1536
SCIP_Longint SCIPdivesetGetSolSuccess(SCIP_DIVESET *diveset, SCIP_DIVECONTEXT divecontext)
Definition: heur.c:460
SCIP_Bool SCIPdivesetUseOnlyLPBranchcands(SCIP_DIVESET *diveset)
Definition: heur.c:732
SCIP_Real SCIPdivesetGetMaxLPIterQuot(SCIP_DIVESET *diveset)
Definition: heur.c:644
SCIP_Bool SCIPdivesetIsPublic(SCIP_DIVESET *diveset)
Definition: heur.c:753
SCIP_RETCODE SCIPvariableGraphCreate(SCIP *scip, SCIP_VGRAPH **vargraph, SCIP_Bool relaxdenseconss, SCIP_Real relaxdensity, int *nrelaxedconstraints)
Definition: heur.c:1979
const char * SCIPheurGetName(SCIP_HEUR *heur)
Definition: heur.c:1441
int SCIPheurGetMaxdepth(SCIP_HEUR *heur)
Definition: heur.c:1557
type definitions for primal heuristics
SCIP_Longint SCIPdivesetGetNSols(SCIP_DIVESET *diveset, SCIP_DIVECONTEXT divecontext)
Definition: heur.c:630
type definitions for SCIP&#39;s main datastructure
SCIP_Real SCIPdivesetGetAvgQuot(SCIP_DIVESET *diveset)
Definition: heur.c:683
const char * SCIPheurGetDesc(SCIP_HEUR *heur)
Definition: heur.c:1451
int SCIPheurGetFreq(SCIP_HEUR *heur)
Definition: heur.c:1526
type definitions for problem variables
SCIP_Real SCIPdivesetGetLPResolveDomChgQuot(SCIP_DIVESET *diveset)
Definition: heur.c:720
int SCIPheurGetNDivesets(SCIP_HEUR *heur)
Definition: heur.c:1649
SCIP_HEUR * SCIPdivesetGetHeur(SCIP_DIVESET *diveset)
Definition: heur.c:405
SCIP_Longint SCIPheurGetNCalls(SCIP_HEUR *heur)
Definition: heur.c:1567
SCIP_Bool SCIPdivesetSupportsType(SCIP_DIVESET *diveset, SCIP_DIVETYPE divetype)
Definition: heur.c:742
#define SCIP_Bool
Definition: def.h:84
int SCIPdivesetGetMinDepth(SCIP_DIVESET *diveset, SCIP_DIVECONTEXT divecontext)
Definition: heur.c:500
SCIP_RETCODE SCIPvariablegraphBreadthFirst(SCIP *scip, SCIP_VGRAPH *vargraph, SCIP_VAR **startvars, int nstartvars, int *distances, int maxdistance, int maxvars, int maxbinintvars)
Definition: heur.c:1678
SCIP_Real SCIPdivesetGetUbQuotNoSol(SCIP_DIVESET *diveset)
Definition: heur.c:660
SCIP_RANDNUMGEN * SCIPdivesetGetRandnumgen(SCIP_DIVESET *diveset)
Definition: heur.c:709
void SCIPdivesetSetWorkSolution(SCIP_DIVESET *diveset, SCIP_SOL *sol)
Definition: heur.c:423
int SCIPdivesetGetMinSolutionDepth(SCIP_DIVESET *diveset, SCIP_DIVECONTEXT divecontext)
Definition: heur.c:539
type definitions for storing primal CIP solutions
enum SCIP_DiveContext SCIP_DIVECONTEXT
Definition: type_heur.h:63
SCIP_Longint SCIPdivesetGetNConflicts(SCIP_DIVESET *diveset, SCIP_DIVECONTEXT divecontext)
Definition: heur.c:617
SCIP_DECL_SORTPTRCOMP(SCIPheurComp)
Definition: heur.c:42
SCIP_Real SCIPdivesetGetAvgDepth(SCIP_DIVESET *diveset, SCIP_DIVECONTEXT divecontext)
Definition: heur.c:526
int SCIPdivesetGetMaxSolutionDepth(SCIP_DIVESET *diveset, SCIP_DIVECONTEXT divecontext)
Definition: heur.c:552
#define SCIP_Real
Definition: def.h:177
char SCIPheurGetDispchar(SCIP_HEUR *heur)
Definition: heur.c:1461
void SCIPheurSetTimingmask(SCIP_HEUR *heur, SCIP_HEURTIMING timingmask)
Definition: heur.c:1481
#define SCIP_Longint
Definition: def.h:162
SCIP_Longint SCIPheurGetNSolsFound(SCIP_HEUR *heur)
Definition: heur.c:1577
SCIP_Bool SCIPheurIsInitialized(SCIP_HEUR *heur)
Definition: heur.c:1597
common defines and data types used in all packages of SCIP
SCIP_HEURDATA * SCIPheurGetData(SCIP_HEUR *heur)
Definition: heur.c:1352
SCIP_Real SCIPheurGetTime(SCIP_HEUR *heur)
Definition: heur.c:1629
int SCIPdivesetGetMaxDepth(SCIP_DIVESET *diveset, SCIP_DIVECONTEXT divecontext)
Definition: heur.c:513
int SCIPdivesetGetLPSolveFreq(SCIP_DIVESET *diveset)
Definition: heur.c:699
const char * SCIPdivesetGetName(SCIP_DIVESET *diveset)
Definition: heur.c:434