1 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2 /*                                                                           */
3 /*                  This file is part of the program and library             */
4 /*         SCIP --- Solving Constraint Integer Programs                      */
5 /*                                                                           */
6 /*    Copyright (C) 2002-2021 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   struct_sepa.h
17  * @ingroup INTERNALAPI
18  * @brief  datastructures for separators
19  * @author Tobias Achterberg
20  */
21 
22 /*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
23 
24 #ifndef __SCIP_STRUCT_SEPA_H__
25 #define __SCIP_STRUCT_SEPA_H__
26 
27 
28 #include "scip/def.h"
29 #include "scip/type_clock.h"
30 #include "scip/type_sepa.h"
31 
32 #ifdef __cplusplus
33 extern "C" {
34 #endif
35 
36 /** separators data */
37 struct SCIP_Sepa
38 {
39    SCIP_Longint          lastsepanode;       /**< last (total) node where this separator was called */
40    SCIP_Longint          ncalls;             /**< number of times, this separator was called */
41    SCIP_Longint          ncutoffs;           /**< number of cutoffs found so far by this separator */
42    SCIP_Longint          ncutsfound;         /**< number of cutting planes found so far by this separator */
43    SCIP_Longint          ncutsapplied;       /**< number of cutting planes applied to LP */
44    SCIP_Longint          nconssfound;        /**< number of additional constraints added by this separator */
45    SCIP_Longint          ndomredsfound;      /**< number of domain reductions found so far by this separator */
46    SCIP_Real             maxbounddist;       /**< maximal relative distance from current node's dual bound to primal bound compared
47                                               *   to best node's dual bound for applying separation */
48    char*                 name;               /**< name of separator */
49    char*                 desc;               /**< description of separator */
50    SCIP_DECL_SEPACOPY    ((*sepacopy));      /**< copy method of separator or NULL if you don't want to copy your plugin into sub-SCIPs */
51    SCIP_DECL_SEPAFREE    ((*sepafree));      /**< destructor of separator */
52    SCIP_DECL_SEPAINIT    ((*sepainit));      /**< initialize separator */
53    SCIP_DECL_SEPAEXIT    ((*sepaexit));      /**< deinitialize separator */
54    SCIP_DECL_SEPAINITSOL ((*sepainitsol));   /**< solving process initialization method of separator */
55    SCIP_DECL_SEPAEXITSOL ((*sepaexitsol));   /**< solving process deinitialization method of separator */
56    SCIP_DECL_SEPAEXECLP  ((*sepaexeclp));    /**< LP solution separation method of separator */
57    SCIP_DECL_SEPAEXECSOL ((*sepaexecsol));   /**< arbitrary primal solution separation method of separator */
58    SCIP_SEPADATA*        sepadata;           /**< separators local data */
59    SCIP_CLOCK*           setuptime;          /**< time spend for setting up this separator for the next stages */
60    SCIP_CLOCK*           sepaclock;          /**< separation time */
61    int                   priority;           /**< priority of the separator */
62    int                   freq;               /**< frequency for calling separator */
63    int                   ncallsatnode;       /**< number of times, this separator was called at the current node */
64    int                   ncutsfoundatnode;   /**< number of cutting planes found at the current node */
65    int                   expbackoff;         /**< base for exponential increase of frequency at which the separator is called */
66    SCIP_Bool             usessubscip;        /**< does the separator use a secondary SCIP instance? */
67    SCIP_Bool             delay;              /**< should separator be delayed, if other separators found cuts? */
68    SCIP_Bool             lpwasdelayed;       /**< was the LP separation delayed at the last call? */
69    SCIP_Bool             solwasdelayed;      /**< was the solution separation delayed at the last call? */
70    SCIP_Bool             initialized;        /**< is separator initialized? */
71 };
72 
73 #ifdef __cplusplus
74 }
75 #endif
76 
77 #endif
78