SCIP Doxygen Documentation
Loading...
Searching...
No Matches
sepastore.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-2025 Zuse Institute Berlin (ZIB) */
7/* */
8/* Licensed under the Apache License, Version 2.0 (the "License"); */
9/* you may not use this file except in compliance with the License. */
10/* You may obtain a copy of the License at */
11/* */
12/* http://www.apache.org/licenses/LICENSE-2.0 */
13/* */
14/* Unless required by applicable law or agreed to in writing, software */
15/* distributed under the License is distributed on an "AS IS" BASIS, */
16/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
17/* See the License for the specific language governing permissions and */
18/* limitations under the License. */
19/* */
20/* You should have received a copy of the Apache-2.0 license */
21/* along with SCIP; see the file LICENSE. If not visit scipopt.org. */
22/* */
23/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
24
25/**@file sepastore.h
26 * @ingroup INTERNALAPI
27 * @brief internal methods for storing separated cuts
28 * @author Tobias Achterberg
29 * @author Leona Gottwald
30 */
31
32/*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
33
34#ifndef __SCIP_SEPASTORE_H__
35#define __SCIP_SEPASTORE_H__
36
37
38#include "scip/def.h"
40#include "scip/type_implics.h"
41#include "scip/type_retcode.h"
42#include "scip/type_set.h"
43#include "scip/type_stat.h"
44#include "scip/type_event.h"
45#include "scip/type_lp.h"
46#include "scip/type_prob.h"
47#include "scip/type_tree.h"
48#include "scip/type_reopt.h"
49#include "scip/type_sepastore.h"
50#include "scip/type_branch.h"
51
52#ifdef __cplusplus
53extern "C" {
54#endif
55
56/** creates separation storage */
58 SCIP_SEPASTORE** sepastore, /**< pointer to store separation storage */
59 BMS_BLKMEM* blkmem, /**< block memory */
60 SCIP_SET* set /**< global SCIP settings */
61 );
62
63/** frees separation storage */
65 SCIP_SEPASTORE** sepastore, /**< pointer to store separation storage */
66 BMS_BLKMEM* blkmem /**< block memory */
67 );
68
69/** informs separation storage that the setup of the initial LP starts now */
71 SCIP_SEPASTORE* sepastore /**< separation storage */
72 );
73
74/** informs separation storage that the setup of the initial LP is now finished */
76 SCIP_SEPASTORE* sepastore /**< separation storage */
77 );
78
79/** informs separation storage that the following cuts should be used in any case */
81 SCIP_SEPASTORE* sepastore /**< separation storage */
82 );
83
84/** informs separation storage that the following cuts should no longer be used in any case */
86 SCIP_SEPASTORE* sepastore /**< separation storage */
87 );
88
89/** adds cut to separation storage and captures it */
91 SCIP_SEPASTORE* sepastore, /**< separation storage */
92 BMS_BLKMEM* blkmem, /**< block memory */
93 SCIP_SET* set, /**< global SCIP settings */
94 SCIP_STAT* stat, /**< problem statistics data */
95 SCIP_EVENTQUEUE* eventqueue, /**< event queue */
96 SCIP_EVENTFILTER* eventfilter, /**< event filter for global events */
97 SCIP_LP* lp, /**< LP data */
98 SCIP_ROW* cut, /**< separated cut */
99 SCIP_Bool forcecut, /**< should the cut be forced to enter the LP? */
100 SCIP_Bool root, /**< are we at the root node? */
101 SCIP_Bool* infeasible /**< pointer to store whether the cut is infeasible */
102 );
103
104/** adds cuts to the LP and clears separation storage */
106 SCIP_SEPASTORE* sepastore, /**< separation storage */
107 BMS_BLKMEM* blkmem, /**< block memory */
108 SCIP_SET* set, /**< global SCIP settings */
109 SCIP_STAT* stat, /**< problem statistics */
110 SCIP_PROB* transprob, /**< transformed problem */
111 SCIP_PROB* origprob, /**< original problem */
112 SCIP_TREE* tree, /**< branch and bound tree */
113 SCIP_REOPT* reopt, /**< reoptimization data structure */
114 SCIP_LP* lp, /**< LP data */
115 SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
116 SCIP_EVENTQUEUE* eventqueue, /**< event queue */
117 SCIP_EVENTFILTER* eventfilter, /**< global event filter */
118 SCIP_CLIQUETABLE* cliquetable, /**< clique table data structure */
119 SCIP_Bool root, /**< are we at the root node? */
120 SCIP_EFFICIACYCHOICE efficiacychoice, /**< type of solution to base efficiacy computation on */
121 SCIP_Bool* cutoff /**< pointer to store whether an empty domain was created */
122 );
123
124/** clears the separation storage without adding the cuts to the LP */
126 SCIP_SEPASTORE* sepastore, /**< separation storage */
127 BMS_BLKMEM* blkmem, /**< block memory */
128 SCIP_SET* set, /**< global SCIP settings */
129 SCIP_EVENTQUEUE* eventqueue, /**< event queue */
130 SCIP_EVENTFILTER* eventfilter, /**< event filter for global events */
131 SCIP_LP* lp /**< LP data */
132 );
133
134/** removes cuts that are inefficacious w.r.t. the current LP solution from separation storage without adding the cuts to the LP */
136 SCIP_SEPASTORE* sepastore, /**< separation storage */
137 BMS_BLKMEM* blkmem, /**< block memory */
138 SCIP_SET* set, /**< global SCIP settings */
139 SCIP_STAT* stat, /**< problem statistics data */
140 SCIP_EVENTQUEUE* eventqueue, /**< event queue */
141 SCIP_EVENTFILTER* eventfilter, /**< event filter for global events */
142 SCIP_LP* lp, /**< LP data */
143 SCIP_Bool root, /**< are we at the root node? */
144 SCIP_EFFICIACYCHOICE efficiacychoice /**< type of solution to base efficiacy computation on */
145 );
146
147/** indicates whether a cut is applicable
148 *
149 * A cut is applicable if it is modifiable, not a bound change, or a bound change that changes bounds by at least epsilon.
150 */
152 SCIP_SET* set, /**< global SCIP settings */
153 SCIP_ROW* cut /**< cut to check */
154 );
155
156/** get cuts in the separation storage */
158 SCIP_SEPASTORE* sepastore /**< separation storage */
159 );
160
161/** get number of cuts in the separation storage */
163 SCIP_SEPASTORE* sepastore /**< separation storage */
164 );
165
166/** gets the total number of cutting planes added to the separation storage;
167 * this is equal to the sum of added cuts directly and via the pool. */
169 SCIP_SEPASTORE* sepastore /**< separation storage */
170 );
171
172/** gets the number of cutting planes added to the separation storage from the cut pool */
174 SCIP_SEPASTORE* sepastore /**< separation storage */
175 );
176
177/** gets the number of cutting planes added to the separation storage directly */
179 SCIP_SEPASTORE* sepastore /**< separation storage */
180 );
181
182/** get number of cuts found so far in current separation round */
184 SCIP_SEPASTORE* sepastore /**< separation storage */
185 );
186
187/** gets the total number of cutting planes applied to the LP */
189 SCIP_SEPASTORE* sepastore /**< separation storage */
190 );
191
192#ifdef __cplusplus
193}
194#endif
195
196#endif
common defines and data types used in all packages of SCIP
#define SCIP_Bool
Definition def.h:91
SCIP_Bool cutoff
memory allocation routines
struct BMS_BlkMem BMS_BLKMEM
Definition memory.h:437
int SCIPsepastoreGetNCutsFoundRound(SCIP_SEPASTORE *sepastore)
Definition sepastore.c:1190
void SCIPsepastoreEndInitialLP(SCIP_SEPASTORE *sepastore)
Definition sepastore.c:144
SCIP_RETCODE SCIPsepastoreCreate(SCIP_SEPASTORE **sepastore, BMS_BLKMEM *blkmem, SCIP_SET *set)
Definition sepastore.c:87
SCIP_RETCODE SCIPsepastoreClearCuts(SCIP_SEPASTORE *sepastore, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_LP *lp)
Definition sepastore.c:1027
int SCIPsepastoreGetNCutsAddedViaPool(SCIP_SEPASTORE *sepastore)
Definition sepastore.c:1170
int SCIPsepastoreGetNCuts(SCIP_SEPASTORE *sepastore)
Definition sepastore.c:1149
SCIP_RETCODE SCIPsepastoreAddCut(SCIP_SEPASTORE *sepastore, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_LP *lp, SCIP_ROW *cut, SCIP_Bool forcecut, SCIP_Bool root, SCIP_Bool *infeasible)
Definition sepastore.c:428
void SCIPsepastoreStartForceCuts(SCIP_SEPASTORE *sepastore)
Definition sepastore.c:156
void SCIPsepastoreEndForceCuts(SCIP_SEPASTORE *sepastore)
Definition sepastore.c:167
SCIP_RETCODE SCIPsepastoreRemoveInefficaciousCuts(SCIP_SEPASTORE *sepastore, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_LP *lp, SCIP_Bool root, SCIP_EFFICIACYCHOICE efficiacychoice)
Definition sepastore.c:1073
void SCIPsepastoreStartInitialLP(SCIP_SEPASTORE *sepastore)
Definition sepastore.c:132
SCIP_RETCODE SCIPsepastoreFree(SCIP_SEPASTORE **sepastore, BMS_BLKMEM *blkmem)
Definition sepastore.c:115
SCIP_RETCODE SCIPsepastoreApplyCuts(SCIP_SEPASTORE *sepastore, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_CLIQUETABLE *cliquetable, SCIP_Bool root, SCIP_EFFICIACYCHOICE efficiacychoice, SCIP_Bool *cutoff)
Definition sepastore.c:921
int SCIPsepastoreGetNCutsApplied(SCIP_SEPASTORE *sepastore)
Definition sepastore.c:1200
SCIP_ROW ** SCIPsepastoreGetCuts(SCIP_SEPASTORE *sepastore)
Definition sepastore.c:1139
int SCIPsepastoreGetNCutsAddedDirect(SCIP_SEPASTORE *sepastore)
Definition sepastore.c:1180
SCIP_Bool SCIPsepastoreIsCutApplicable(SCIP_SET *set, SCIP_ROW *cut)
Definition sepastore.c:1130
int SCIPsepastoreGetNCutsAdded(SCIP_SEPASTORE *sepastore)
Definition sepastore.c:1160
type definitions for branching rules
struct SCIP_BranchCand SCIP_BRANCHCAND
Definition type_branch.h:55
type definitions for managing events
struct SCIP_EventFilter SCIP_EVENTFILTER
Definition type_event.h:174
struct SCIP_EventQueue SCIP_EVENTQUEUE
Definition type_event.h:175
type definitions for implications, variable bounds, and cliques
struct SCIP_CliqueTable SCIP_CLIQUETABLE
type definitions for LP management
struct SCIP_Row SCIP_ROW
Definition type_lp.h:104
struct SCIP_Lp SCIP_LP
Definition type_lp.h:110
type definitions for storing and manipulating the main problem
struct SCIP_Prob SCIP_PROB
Definition type_prob.h:52
type definitions for collecting reoptimization information
struct SCIP_Reopt SCIP_REOPT
Definition type_reopt.h:39
type definitions for return codes for SCIP methods
enum SCIP_Retcode SCIP_RETCODE
type definitions for storing separated cuts
struct SCIP_SepaStore SCIP_SEPASTORE
enum SCIP_Efficiacychoice SCIP_EFFICIACYCHOICE
type definitions for global SCIP settings
struct SCIP_Set SCIP_SET
Definition type_set.h:71
type definitions for problem statistics
struct SCIP_Stat SCIP_STAT
Definition type_stat.h:69
type definitions for branch and bound tree
struct SCIP_Tree SCIP_TREE
Definition type_tree.h:65