SCIP Doxygen Documentation
 
Loading...
Searching...
No Matches
relax.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-2024 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 relax.h
26 * @ingroup INTERNALAPI
27 * @brief internal methods for relaxators
28 * @author Tobias Achterberg
29 */
30
31/*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
32
33#ifndef __SCIP_RELAX_H__
34#define __SCIP_RELAX_H__
35
36
37#include "scip/def.h"
39#include "scip/type_primal.h"
40#include "scip/type_relax.h"
41#include "scip/type_result.h"
42#include "scip/type_retcode.h"
43#include "scip/type_set.h"
44#include "scip/type_sol.h"
45#include "scip/type_stat.h"
46#include "scip/type_tree.h"
47#include "scip/type_var.h"
48#include "scip/pub_relax.h"
49
50#ifdef __cplusplus
51extern "C" {
52#endif
53
54/** copies the given relaxator to a new scip */
56 SCIP_RELAX* relax, /**< relaxator */
57 SCIP_SET* set /**< SCIP_SET of SCIP to copy to */
58 );
59
60/** creates a relaxator */
62 SCIP_RELAX** relax, /**< pointer to relaxator data structure */
63 SCIP_SET* set, /**< global SCIP settings */
64 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
65 BMS_BLKMEM* blkmem, /**< block memory for parameter settings */
66 const char* name, /**< name of relaxator */
67 const char* desc, /**< description of relaxator */
68 int priority, /**< priority of the relaxator (negative: after LP, non-negative: before LP) */
69 int freq, /**< frequency for calling relaxator */
70 SCIP_DECL_RELAXCOPY ((*relaxcopy)), /**< copy method of relaxator or NULL if you don't want to copy your plugin into sub-SCIPs */
71 SCIP_DECL_RELAXFREE ((*relaxfree)), /**< destructor of relaxator */
72 SCIP_DECL_RELAXINIT ((*relaxinit)), /**< initialize relaxator */
73 SCIP_DECL_RELAXEXIT ((*relaxexit)), /**< deinitialize relaxator */
74 SCIP_DECL_RELAXINITSOL((*relaxinitsol)), /**< solving process initialization method of relaxator */
75 SCIP_DECL_RELAXEXITSOL((*relaxexitsol)), /**< solving process deinitialization method of relaxator */
76 SCIP_DECL_RELAXEXEC ((*relaxexec)), /**< execution method of relaxator */
77 SCIP_RELAXDATA* relaxdata /**< relaxator data */
78 );
79
80/** calls destructor and frees memory of relaxator */
82 SCIP_RELAX** relax, /**< pointer to relaxator data structure */
83 SCIP_SET* set /**< global SCIP settings */
84 );
85
86/** initializes relaxator */
88 SCIP_RELAX* relax, /**< relaxator */
89 SCIP_SET* set /**< global SCIP settings */
90 );
91
92/** calls exit method of relaxator */
94 SCIP_RELAX* relax, /**< relaxator */
95 SCIP_SET* set /**< global SCIP settings */
96 );
97
98/** informs relaxator that the branch and bound process is being started */
100 SCIP_RELAX* relax, /**< relaxator */
101 SCIP_SET* set /**< global SCIP settings */
102 );
103
104/** informs relaxator that the branch and bound process data is being freed */
106 SCIP_RELAX* relax, /**< relaxator */
107 SCIP_SET* set /**< global SCIP settings */
108 );
109
110/** calls execution method of relaxator */
112 SCIP_RELAX* relax, /**< relaxator */
113 SCIP_SET* set, /**< global SCIP settings */
114 SCIP_TREE* tree, /**< branch and bound tree */
115 SCIP_STAT* stat, /**< dynamic problem statistics */
116 int depth, /**< depth of current node */
117 SCIP_Real* lowerbound, /**< pointer to lower bound computed by the relaxator */
118 SCIP_RESULT* result /**< pointer to store the result of the callback method */
119 );
120
121/** sets priority of relaxator */
123 SCIP_RELAX* relax, /**< relaxator */
124 SCIP_SET* set, /**< global SCIP settings */
125 int priority /**< new priority of the relaxator */
126 );
127
128/** set copy callback of relaxation handler */
130 SCIP_RELAX* relax, /**< relaxation handler */
131 SCIP_DECL_RELAXCOPY ((*relaxcopy)) /**< copy method of relaxation handler */
132 );
133
134/** set destructor callback of relaxation handler */
136 SCIP_RELAX* relax, /**< relaxation handler */
137 SCIP_DECL_RELAXFREE ((*relaxfree)) /**< destructor of relaxation handler */
138 );
139
140/** set initialization callback of relaxation handler */
142 SCIP_RELAX* relax, /**< relaxation handler */
143 SCIP_DECL_RELAXINIT ((*relaxinit)) /**< initialize relaxation handler */
144 );
145
146/** set deinitialization callback of relaxation handler */
148 SCIP_RELAX* relax, /**< relaxation handler */
149 SCIP_DECL_RELAXEXIT ((*relaxexit)) /**< deinitialize relaxation handler */
150 );
151
152/** set solving process initialization callback of relaxation handler */
154 SCIP_RELAX* relax, /**< relaxation handler */
155 SCIP_DECL_RELAXINITSOL((*relaxinitsol)) /**< solving process initialization method of relaxation handler */
156 );
157
158/** set solving process deinitialization callback of relaxation handler */
160 SCIP_RELAX* relax, /**< relaxation handler */
161 SCIP_DECL_RELAXEXITSOL((*relaxexitsol)) /**< solving process deinitialization callback relaxation handler */
162 );
163
164/** returns whether the relaxation was completely solved at the current node */
165SCIP_Bool SCIPrelaxIsSolved(
166 SCIP_RELAX* relax, /**< relaxator */
167 SCIP_STAT* stat /**< dynamic problem statistics */
168 );
169
170/*
171 * methods for the global relaxation data
172 */
173
174/** enables or disables all clocks of \p relax, depending on the value of the flag */
176 SCIP_RELAX* relax, /**< the relaxation handler for which all clocks should be enabled or disabled */
177 SCIP_Bool enable /**< should the clocks of the relaxation handler be enabled? */
178 );
179
180/** creates global relaxation data */
182 SCIP_RELAXATION** relaxation, /**< global relaxation data */
183 BMS_BLKMEM* blkmem, /**< block memory */
184 SCIP_SET* set, /**< global SCIP settings */
185 SCIP_STAT* stat, /**< problem statistics data */
186 SCIP_PRIMAL* primal, /**< primal data */
187 SCIP_TREE* tree /**< branch and bound tree */
188 );
189
190/** frees global relaxation data */
192 SCIP_RELAXATION** relaxation /**< global relaxation data */
193 );
194
195/** sets the relaxsolzero flag in the relaxation data to the given value */
197 SCIP_RELAXATION* relaxation, /**< global relaxation data */
198 SCIP_Bool iszero /**< are all values of the relaxation solution set to zero? */
199 );
200
201/** returns whether the global relaxation solution is cleared and all values are set to zero */
203 SCIP_RELAXATION* relaxation /**< global relaxation data */
204 );
205
206/** sets the relaxsolvalid and includeslp flags in the relaxation data to the given values */
208 SCIP_RELAXATION* relaxation, /**< global relaxation data */
209 SCIP_Bool isvalid, /**< is the stored solution valid? */
210 SCIP_Bool includeslp /**< does the relaxator contain all cuts in the LP? */
211 );
212
213/** returns whether the global relaxation solution is valid */
215 SCIP_RELAXATION* relaxation /**< global relaxation data */
216 );
217
218/** returns whether the global relaxation solution was computed by a relaxator which included all LP cuts */
220 SCIP_RELAXATION* relaxation /**< global relaxation data */
221 );
222
223/** sets the objective value of the global relaxation solution */
225 SCIP_RELAXATION* relaxation, /**< global relaxation data */
226 SCIP_Real obj /**< objective value */
227 );
228
229/** returns the objective value of the global relaxation solution w.r.t. the transformed problem */
231 SCIP_RELAXATION* relaxation /**< global relaxation data */
232 );
233
234/** adds the given value to the global relaxation solution's objective value */
236 SCIP_RELAXATION* relaxation, /**< global relaxation data */
237 SCIP_Real val /**< value to add to the objective value */
238 );
239
240/** updates objective value of current relaxation solution after change of objective coefficient */
242 SCIP_RELAXATION* relaxation, /**< global relaxation data */
243 SCIP_SET* set, /**< global SCIP settings */
244 SCIP_VAR* var, /**< variable with changed objective coefficient */
245 SCIP_Real oldobj, /**< old objective coefficient */
246 SCIP_Real newobj /**< new objective coefficient */
247 );
248
249/** store the most recent relaxation handler \p relax responsible for the solution */
251 SCIP_RELAXATION* relaxation, /**< global relaxation data */
252 SCIP_RELAX* relax /**< relaxation handler responsible for the most recent relaxation solution */
253 );
254
255/** returns the most recent relaxation handler responsible for the solution, or NULL if unspecified */
257 SCIP_RELAXATION* relaxation /**< global relaxation data */
258 );
259
260#ifdef __cplusplus
261}
262#endif
263
264#endif
common defines and data types used in all packages of SCIP
int depth
SCIP_Real obj
SCIP_VAR * var
SCIP_Real newobj
SCIP_Real oldobj
memory allocation routines
struct BMS_BlkMem BMS_BLKMEM
Definition memory.h:437
public methods for relaxation handlers
void SCIPrelaxSetInit(SCIP_RELAX *relax,)
Definition relax.c:498
SCIP_RETCODE SCIPrelaxInit(SCIP_RELAX *relax, SCIP_SET *set)
Definition relax.c:231
SCIP_Bool SCIPrelaxationIsSolZero(SCIP_RELAXATION *relaxation)
Definition relax.c:785
void SCIPrelaxSetFree(SCIP_RELAX *relax,)
Definition relax.c:487
SCIP_RETCODE SCIPrelaxCreate(SCIP_RELAX **relax, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem, const char *name, const char *desc, int priority, int freq, SCIP_DECL_RELAXCOPY((*relaxcopy)), SCIP_DECL_RELAXFREE((*relaxfree)), SCIP_DECL_RELAXINIT((*relaxinit)), SCIP_DECL_RELAXEXIT((*relaxexit)), SCIP_DECL_RELAXINITSOL((*relaxinitsol)), SCIP_DECL_RELAXEXITSOL((*relaxexitsol)), SCIP_DECL_RELAXEXEC((*relaxexec)), SCIP_RELAXDATA *relaxdata)
Definition relax.c:172
void SCIPrelaxationSetSolZero(SCIP_RELAXATION *relaxation, SCIP_Bool iszero)
Definition relax.c:774
SCIP_RETCODE SCIPrelaxExit(SCIP_RELAX *relax, SCIP_SET *set)
Definition relax.c:275
void SCIPrelaxSetInitsol(SCIP_RELAX *relax,)
Definition relax.c:520
void SCIPrelaxationUpdateVarObj(SCIP_RELAXATION *relaxation, SCIP_SET *set, SCIP_VAR *var, SCIP_Real oldobj, SCIP_Real newobj)
Definition relax.c:860
void SCIPrelaxationSetSolValid(SCIP_RELAXATION *relaxation, SCIP_Bool isvalid, SCIP_Bool includeslp)
Definition relax.c:795
SCIP_RETCODE SCIPrelaxFree(SCIP_RELAX **relax, SCIP_SET *set)
Definition relax.c:204
void SCIPrelaxSetCopy(SCIP_RELAX *relax,)
Definition relax.c:476
void SCIPrelaxationSetSolObj(SCIP_RELAXATION *relaxation, SCIP_Real obj)
Definition relax.c:828
void SCIPrelaxSetExit(SCIP_RELAX *relax,)
Definition relax.c:509
void SCIPrelaxSetExitsol(SCIP_RELAX *relax,)
Definition relax.c:531
SCIP_Real SCIPrelaxationGetSolObj(SCIP_RELAXATION *relaxation)
Definition relax.c:839
void SCIPrelaxationSolObjAdd(SCIP_RELAXATION *relaxation, SCIP_Real val)
Definition relax.c:849
SCIP_RETCODE SCIPrelaxCopyInclude(SCIP_RELAX *relax, SCIP_SET *set)
Definition relax.c:83
void SCIPrelaxationSetSolRelax(SCIP_RELAXATION *relaxation, SCIP_RELAX *relax)
Definition relax.c:880
SCIP_Bool SCIPrelaxIsSolved(SCIP_RELAX *relax, SCIP_STAT *stat)
Definition relax.c:708
SCIP_RETCODE SCIPrelaxationFree(SCIP_RELAXATION **relaxation)
Definition relax.c:762
void SCIPrelaxEnableOrDisableClocks(SCIP_RELAX *relax, SCIP_Bool enable)
Definition relax.c:606
SCIP_RETCODE SCIPrelaxationCreate(SCIP_RELAXATION **relaxation, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PRIMAL *primal, SCIP_TREE *tree)
Definition relax.c:734
SCIP_RELAX * SCIPrelaxationGetSolRelax(SCIP_RELAXATION *relaxation)
Definition relax.c:891
SCIP_RETCODE SCIPrelaxInitsol(SCIP_RELAX *relax, SCIP_SET *set)
Definition relax.c:305
SCIP_RETCODE SCIPrelaxExec(SCIP_RELAX *relax, SCIP_SET *set, SCIP_TREE *tree, SCIP_STAT *stat, int depth, SCIP_Real *lowerbound, SCIP_RESULT *result)
Definition relax.c:353
void SCIPrelaxSetPriority(SCIP_RELAX *relax, SCIP_SET *set, int priority)
Definition relax.c:572
SCIP_Bool SCIPrelaxationIsLpIncludedForSol(SCIP_RELAXATION *relaxation)
Definition relax.c:818
SCIP_Bool SCIPrelaxationIsSolValid(SCIP_RELAXATION *relaxation)
Definition relax.c:808
SCIP_RETCODE SCIPrelaxExitsol(SCIP_RELAX *relax, SCIP_SET *set)
Definition relax.c:329
type definitions for collecting primal CIP solutions and primal informations
type definitions for relaxators
#define SCIP_DECL_RELAXINIT(x)
Definition type_relax.h:72
#define SCIP_DECL_RELAXEXITSOL(x)
Definition type_relax.h:102
#define SCIP_DECL_RELAXFREE(x)
Definition type_relax.h:64
#define SCIP_DECL_RELAXINITSOL(x)
Definition type_relax.h:91
#define SCIP_DECL_RELAXCOPY(x)
Definition type_relax.h:56
#define SCIP_DECL_RELAXEXEC(x)
Definition type_relax.h:127
#define SCIP_DECL_RELAXEXIT(x)
Definition type_relax.h:80
struct SCIP_RelaxData SCIP_RELAXDATA
Definition type_relax.h:47
result codes for SCIP callback methods
enum SCIP_Result SCIP_RESULT
Definition type_result.h:61
type definitions for return codes for SCIP methods
enum SCIP_Retcode SCIP_RETCODE
type definitions for global SCIP settings
type definitions for storing primal CIP solutions
type definitions for problem statistics
type definitions for branch and bound tree
type definitions for problem variables