Scippy

SCIP

Solving Constraint Integer Programs

conflict_graphanalysis.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 conflict_graphanalysis.h
26 * @ingroup OTHER_CFILES
27 * @brief methods and datastructures for conflict analysis
28 * @author Tobias Achterberg
29 * @author Timo Berthold
30 * @author Stefan Heinz
31 * @author Marc Pfetsch
32 * @author Michael Winkler
33 * @author Jakob Witzig
34 *
35 * This file implements a conflict analysis method like the one used in modern
36 * SAT solvers like zchaff. The algorithm works as follows:
37 *
38 * Given is a set of bound changes that are not allowed being applied simultaneously, because they
39 * render the current node infeasible (e.g. because a single constraint is infeasible in the these
40 * bounds, or because the LP relaxation is infeasible). The goal is to deduce a clause on variables
41 * -- a conflict clause -- representing the "reason" for this conflict, i.e., the branching decisions
42 * or the deductions (applied e.g. in domain propagation) that lead to the conflict. This clause can
43 * then be added to the constraint set to help cutting off similar parts of the branch and bound
44 * tree, that would lead to the same conflict. A conflict clause can also be generated, if the
45 * conflict was detected by a locally valid constraint. In this case, the resulting conflict clause
46 * is also locally valid in the same depth as the conflict detecting constraint. If all involved
47 * variables are binary, a linear (set covering) constraint can be generated, otherwise a bound
48 * disjunction constraint is generated. Details are given in
49 *
50 * Tobias Achterberg, Conflict Analysis in Mixed Integer Programming@n
51 * Discrete Optimization, 4, 4-20 (2007)
52 *
53 * See also @ref CONF. Here is an outline of the algorithm:
54 *
55 * -# Put all the given bound changes to a priority queue, which is ordered,
56 * such that the bound change that was applied last due to branching or deduction
57 * is at the top of the queue. The variables in the queue are always active
58 * problem variables. Because binary variables are preferred over general integer
59 * variables, integer variables are put on the priority queue prior to the binary
60 * variables. Create an empty conflict set.
61 * -# Remove the top bound change b from the priority queue.
62 * -# Perform the following case distinction:
63 * -# If the remaining queue is non-empty, and bound change b' (the one that is now
64 * on the top of the queue) was applied at the same depth level as b, and if
65 * b was a deduction with known inference reason, and if the inference constraint's
66 * valid depth is smaller or equal to the conflict detecting constraint's valid
67 * depth:
68 * - Resolve bound change b by asking the constraint that inferred the
69 * bound change to put all the bound changes on the priority queue, that
70 * lead to the deduction of b.
71 * Note that these bound changes have at most the same inference depth
72 * level as b, and were deduced earlier than b.
73 * -# Otherwise, the bound change b was a branching decision or a deduction with
74 * missing inference reason, or the inference constraint's validity is more local
75 * than the one of the conflict detecting constraint.
76 * - If a the bound changed corresponds to a binary variable, add it or its
77 * negation to the conflict set, depending on which of them is currently fixed to
78 * FALSE (i.e., the conflict set consists of literals that cannot be FALSE
79 * altogether at the same time).
80 * - Otherwise put the bound change into the conflict set.
81 * Note that if the bound change was a branching, all deduced bound changes
82 * remaining in the priority queue have smaller inference depth level than b,
83 * since deductions are always applied after the branching decisions. However,
84 * there is the possibility, that b was a deduction, where the inference
85 * reason was not given or the inference constraint was too local.
86 * With this lack of information, we must treat the deduced bound change like
87 * a branching, and there may exist other deduced bound changes of the same
88 * inference depth level in the priority queue.
89 * -# If priority queue is non-empty, goto step 2.
90 * -# The conflict set represents the conflict clause saying that at least one
91 * of the conflict variables must take a different value. The conflict set is then passed
92 * to the conflict handlers, that may create a corresponding constraint (e.g. a logicor
93 * constraint or bound disjunction constraint) out of these conflict variables and
94 * add it to the problem.
95 *
96 * If all deduced bound changes come with (global) inference information, depending on
97 * the conflict analyzing strategy, the resulting conflict set has the following property:
98 * - 1-FirstUIP: In the depth level where the conflict was found, at most one variable
99 * assigned at that level is member of the conflict set. This conflict variable is the
100 * first unique implication point of its depth level (FUIP).
101 * - All-FirstUIP: For each depth level, at most one variable assigned at that level is
102 * member of the conflict set. This conflict variable is the first unique implication
103 * point of its depth level (FUIP).
104 *
105 * The user has to do the following to get the conflict analysis running in its
106 * current implementation:
107 * - A constraint handler or propagator supporting the conflict analysis must implement
108 * the CONSRESPROP/PROPRESPROP call, that processes a bound change inference b and puts all
109 * the reason bounds leading to the application of b with calls to
110 * SCIPaddConflictBound() on the conflict queue (algorithm step 3.(a)).
111 * - If the current bounds lead to a deduction of a bound change (e.g. in domain
112 * propagation), a constraint handler should call SCIPinferVarLbCons() or
113 * SCIPinferVarUbCons(), thus providing the constraint that inferred the bound change.
114 * A propagator should call SCIPinferVarLbProp() or SCIPinferVarUbProp() instead,
115 * thus providing a pointer to itself.
116 * - If (in the current bounds) an infeasibility is detected, the constraint handler or
117 * propagator should
118 * 1. call SCIPinitConflictAnalysis() to initialize the conflict queue,
119 * 2. call SCIPaddConflictBound() for each bound that lead to the conflict,
120 * 3. call SCIPanalyzeConflictCons() or SCIPanalyzeConflict() to analyze the conflict
121 * and add an appropriate conflict constraint.
122 */
123
124/*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
125
126#ifndef __SCIP_CONFLICT_GRAPHANALYSIS_H__
127#define __SCIP_CONFLICT_GRAPHANALYSIS_H__
128
129#include "scip/def.h"
130#include "scip/type_cuts.h"
131#include "scip/type_conflict.h"
132#include "scip/type_reopt.h"
133#include "scip/type_implics.h"
134#include "scip/type_set.h"
135#include "scip/type_stat.h"
136#include "scip/type_lp.h"
137#include "lpi/type_lpi.h"
138#include "scip/type_branch.h"
139#include "scip/type_mem.h"
140#include "scip/type_var.h"
141#include "scip/type_prob.h"
142#include "scip/type_event.h"
143#include "scip/type_message.h"
144#include <string.h>
145#ifndef _WIN32
146#include <strings.h> /*lint --e{766}*/
147#endif
148
149#ifdef __cplusplus
150extern "C" {
151#endif
152
153/** creates an empty conflict set */
155 SCIP_CONFLICTSET** conflictset, /**< pointer to store the conflict set */
156 BMS_BLKMEM* blkmem /**< block memory of transformed problem */
157 );
158
159/** frees a conflict set */
161 SCIP_CONFLICTSET** conflictset, /**< pointer to the conflict set */
162 BMS_BLKMEM* blkmem /**< block memory of transformed problem */
163 );
164
165/** copies the given conflict handler to a new scip */
167 SCIP_CONFLICTHDLR* conflicthdlr, /**< conflict handler */
168 SCIP_SET* set /**< SCIP_SET of SCIP to copy to */
169 );
170
171/** creates a conflict handler */
173 SCIP_CONFLICTHDLR** conflicthdlr, /**< pointer to conflict handler data structure */
174 SCIP_SET* set, /**< global SCIP settings */
175 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
176 BMS_BLKMEM* blkmem, /**< block memory for parameter settings */
177 const char* name, /**< name of conflict handler */
178 const char* desc, /**< description of conflict handler */
179 int priority, /**< priority of the conflict handler */
180 SCIP_DECL_CONFLICTCOPY((*conflictcopy)), /**< copy method of conflict handler or NULL if you don't want to copy your plugin into sub-SCIPs */
181 SCIP_DECL_CONFLICTFREE((*conflictfree)), /**< destructor of conflict handler */
182 SCIP_DECL_CONFLICTINIT((*conflictinit)), /**< initialize conflict handler */
183 SCIP_DECL_CONFLICTEXIT((*conflictexit)), /**< deinitialize conflict handler */
184 SCIP_DECL_CONFLICTINITSOL((*conflictinitsol)),/**< solving process initialization method of conflict handler */
185 SCIP_DECL_CONFLICTEXITSOL((*conflictexitsol)),/**< solving process deinitialization method of conflict handler */
186 SCIP_DECL_CONFLICTEXEC((*conflictexec)), /**< conflict processing method of conflict handler */
187 SCIP_CONFLICTHDLRDATA* conflicthdlrdata /**< conflict handler data */
188 );
189
190/** calls destructor and frees memory of conflict handler */
192 SCIP_CONFLICTHDLR** conflicthdlr, /**< pointer to conflict handler data structure */
193 SCIP_SET* set /**< global SCIP settings */
194 );
195
196/** calls init method of conflict handler */
198 SCIP_CONFLICTHDLR* conflicthdlr, /**< conflict handler */
199 SCIP_SET* set /**< global SCIP settings */
200 );
201
202/** calls exit method of conflict handler */
204 SCIP_CONFLICTHDLR* conflicthdlr, /**< conflict handler */
205 SCIP_SET* set /**< global SCIP settings */
206 );
207
208/** informs conflict handler that the branch and bound process is being started */
210 SCIP_CONFLICTHDLR* conflicthdlr, /**< conflict handler */
211 SCIP_SET* set /**< global SCIP settings */
212 );
213
214/** informs conflict handler that the branch and bound process data is being freed */
216 SCIP_CONFLICTHDLR* conflicthdlr, /**< conflict handler */
217 SCIP_SET* set /**< global SCIP settings */
218 );
219
220/** calls execution method of conflict handler */
222 SCIP_CONFLICTHDLR* conflicthdlr, /**< conflict handler */
223 SCIP_SET* set, /**< global SCIP settings */
224 SCIP_NODE* node, /**< node to add conflict constraint to */
225 SCIP_NODE* validnode, /**< node at which the constraint is valid */
226 SCIP_BDCHGINFO** bdchginfos, /**< bound change resembling the conflict set */
227 SCIP_Real* relaxedbds, /**< array with relaxed bounds which are efficient to create a valid conflict */
228 int nbdchginfos, /**< number of bound changes in the conflict set */
229 SCIP_CONFTYPE conftype, /**< type of the conflict */
230 SCIP_Bool usescutoffbound, /**< depends the conflict on the cutoff bound? */
231 SCIP_Bool resolved, /**< was the conflict set already used to create a constraint? */
232 SCIP_RESULT* result /**< pointer to store the result of the callback method */
233 );
234
235/** sets priority of conflict handler */
237 SCIP_CONFLICTHDLR* conflicthdlr, /**< conflict handler */
238 SCIP_SET* set, /**< global SCIP settings */
239 int priority /**< new priority of the conflict handler */
240 );
241
242/** set copy method of conflict handler */
244 SCIP_CONFLICTHDLR* conflicthdlr, /**< conflict handler */
245 SCIP_DECL_CONFLICTCOPY((*conflictcopy)) /**< copy method of the conflict handler */
246 );
247
248/** set destructor of conflict handler */
250 SCIP_CONFLICTHDLR* conflicthdlr, /**< conflict handler */
251 SCIP_DECL_CONFLICTFREE((*conflictfree)) /**< destructor of conflict handler */
252 );
253
254/** set initialization method of conflict handler */
256 SCIP_CONFLICTHDLR* conflicthdlr, /**< conflict handler */
257 SCIP_DECL_CONFLICTINIT((*conflictinit)) /**< initialization method conflict handler */
258 );
259
260/** set deinitialization method of conflict handler */
262 SCIP_CONFLICTHDLR* conflicthdlr, /**< conflict handler */
263 SCIP_DECL_CONFLICTEXIT((*conflictexit)) /**< deinitialization method conflict handler */
264 );
265
266/** set solving process initialization method of conflict handler */
268 SCIP_CONFLICTHDLR* conflicthdlr, /**< conflict handler */
269 SCIP_DECL_CONFLICTINITSOL((*conflictinitsol))/**< solving process initialization method of conflict handler */
270 );
271
272/** set solving process deinitialization method of conflict handler */
274 SCIP_CONFLICTHDLR* conflicthdlr, /**< conflict handler */
275 SCIP_DECL_CONFLICTEXITSOL((*conflictexitsol))/**< solving process deinitialization method of conflict handler */
276 );
277
278/** enables or disables all clocks of \p conflicthdlr, depending on the value of the flag */
280 SCIP_CONFLICTHDLR* conflicthdlr, /**< the conflict handler for which all clocks should be enabled or disabled */
281 SCIP_Bool enable /**< should the clocks of the conflict handler be enabled? */
282 );
283
284/** return TRUE if conflict graph analysis is applicable */
286 SCIP_SET* set /**< global SCIP settings */
287 );
288
289/** creates a temporary bound change information object that is destroyed after the conflict sets are flushed */
291 SCIP_CONFLICT* conflict, /**< conflict analysis data */
292 BMS_BLKMEM* blkmem, /**< block memory */
293 SCIP_SET* set, /**< global SCIP settings */
294 SCIP_VAR* var, /**< active variable that changed the bounds */
295 SCIP_BOUNDTYPE boundtype, /**< type of bound for var: lower or upper bound */
296 SCIP_Real oldbound, /**< old value for bound */
297 SCIP_Real newbound, /**< new value for bound */
298 SCIP_BDCHGINFO** bdchginfo /**< pointer to store bound change information */
299 );
300
301
302/*
303 * Conflict LP Bound Changes
304 */
305
306
307/** calculates the maximal size of conflict sets to be used */
309 SCIP_SET* set, /**< global SCIP settings */
310 SCIP_PROB* prob /**< problem data */
311 );
312
313/** undoes bound changes on variables, still leaving the given infeasibility proof valid */
315 SCIP_SET* set, /**< global SCIP settings */
316 SCIP_PROB* prob, /**< problem data */
317 int currentdepth, /**< current depth in the tree */
318 SCIP_Real* proofcoefs, /**< coefficients in infeasibility proof */
319 SCIP_Real prooflhs, /**< left hand side of proof */
320 SCIP_Real* proofact, /**< current activity of proof */
321 SCIP_Real* curvarlbs, /**< current lower bounds of active problem variables */
322 SCIP_Real* curvarubs, /**< current upper bounds of active problem variables */
323 int* lbchginfoposs, /**< positions of currently active lower bound change information in variables' arrays */
324 int* ubchginfoposs, /**< positions of currently active upper bound change information in variables' arrays */
325 SCIP_LPBDCHGS* oldlpbdchgs, /**< old LP bound changes used for reset the LP bound change, or NULL */
326 SCIP_LPBDCHGS* relaxedlpbdchgs, /**< relaxed LP bound changes used for reset the LP bound change, or NULL */
327 SCIP_Bool* resolve, /**< pointer to store whether the changed LP should be resolved again, or NULL */
328 SCIP_LPI* lpi /**< pointer to LPi to access infinity of LP solver; necessary to set correct values */
329 );
330
331/** applies conflict analysis starting with given bound changes, that could not be undone during previous
332 * infeasibility analysis
333 */
335 SCIP_CONFLICT* conflict, /**< conflict analysis data */
336 BMS_BLKMEM* blkmem, /**< block memory of transformed problem */
337 SCIP_SET* set, /**< global SCIP settings */
338 SCIP_STAT* stat, /**< problem statistics */
339 SCIP_PROB* prob, /**< problem data */
340 SCIP_TREE* tree, /**< branch and bound tree */
341 SCIP_Bool diving, /**< are we in strong branching or diving mode? */
342 int* lbchginfoposs, /**< positions of currently active lower bound change information in variables' arrays */
343 int* ubchginfoposs, /**< positions of currently active upper bound change information in variables' arrays */
344 int* nconss, /**< pointer to store the number of generated conflict constraints */
345 int* nliterals, /**< pointer to store the number of literals in generated conflict constraints */
346 int* nreconvconss, /**< pointer to store the number of generated reconvergence constraints */
347 int* nreconvliterals /**< pointer to store the number of literals generated reconvergence constraints */
348 );
349
350/** initializes propagation and resolution conflict analysis by clearing the conflict candidate queues */
352 SCIP_CONFLICT* conflict, /**< conflict analysis data */
353 SCIP_SET* set, /**< global SCIP settings */
354 SCIP_STAT* stat, /**< problem statistics */
355 SCIP_PROB* prob, /**< problem data */
356 SCIP_CONFTYPE conftype, /**< type of the conflict */
357 SCIP_Bool usescutoffbound /**< depends the conflict on a cutoff bound? */
358 );
359
360/** adds variable's bound to conflict candidate queue */
362 SCIP_CONFLICT* conflict, /**< conflict analysis data */
363 BMS_BLKMEM* blkmem, /**< block memory */
364 SCIP_SET* set, /**< global SCIP settings */
365 SCIP_STAT* stat, /**< dynamic problem statistics */
366 SCIP_VAR* var, /**< problem variable */
367 SCIP_BOUNDTYPE boundtype, /**< type of bound that was changed: lower or upper bound */
368 SCIP_BDCHGIDX* bdchgidx /**< bound change index (time stamp of bound change), or NULL for current time */
369 );
370
371/** adds variable's bound to conflict candidate queue with the additional information of a relaxed bound */
373 SCIP_CONFLICT* conflict, /**< conflict analysis data */
374 BMS_BLKMEM* blkmem, /**< block memory */
375 SCIP_SET* set, /**< global SCIP settings */
376 SCIP_STAT* stat, /**< dynamic problem statistics */
377 SCIP_VAR* var, /**< problem variable */
378 SCIP_BOUNDTYPE boundtype, /**< type of bound that was changed: lower or upper bound */
379 SCIP_BDCHGIDX* bdchgidx, /**< bound change index (time stamp of bound change), or NULL for current time */
380 SCIP_Real relaxedbd /**< the relaxed bound */
381 );
382
383/** checks if the given variable is already part of the current conflict set or queued for resolving with the same or
384 * even stronger bound
385 */
387 SCIP_CONFLICT* conflict, /**< conflict analysis data */
388 SCIP_VAR* var, /**< problem variable */
389 SCIP_SET* set, /**< global SCIP settings */
390 SCIP_BOUNDTYPE boundtype, /**< type of bound for which the score should be increased */
391 SCIP_BDCHGIDX* bdchgidx, /**< bound change index (time stamp of bound change), or NULL for current time */
392 SCIP_Bool* used /**< pointer to store if the variable is already used */
393 );
394
395/** returns the conflict lower bound if the variable is present in the current conflict set; otherwise the global lower
396 * bound
397 */
399 SCIP_CONFLICT* conflict, /**< conflict analysis data */
400 SCIP_VAR* var /**< problem variable */
401 );
402
403/** returns the conflict upper bound if the variable is present in the current conflict set; otherwise the global upper
404 * bound
405 */
407 SCIP_CONFLICT* conflict, /**< conflict analysis data */
408 SCIP_VAR* var /**< problem variable */
409 );
410
411/** try to find a subset of changed bounds leading to an infeasible LP
412 *
413 * 1. call undoBdchgsDualfarkas() or undoBdchgsDualsol()
414 * -> update lb/ubchginfoposs arrays
415 * -> store additional changes in bdchg and curvarlbs/ubs arrays
416 * -> apply additional changes to the LPI
417 * 2. (optional) if additional bound changes were undone:
418 * -> resolve LP
419 * -> goto 1.
420 * 3. redo all bound changes in the LPI to restore the LPI to its original state
421 * 4. analyze conflict
422 * -> put remaining changed bounds (see lb/ubchginfoposs arrays) into starting conflict set
423 */
425 SCIP_CONFLICT* conflict, /**< conflict data */
426 SCIP_SET* set, /**< global SCIP settings */
427 SCIP_STAT* stat, /**< problem statistics */
428 SCIP_PROB* origprob, /**< original problem */
429 SCIP_PROB* transprob, /**< transformed problem */
430 SCIP_TREE* tree, /**< branch and bound tree */
431 SCIP_REOPT* reopt, /**< reoptimization data */
432 SCIP_LP* lp, /**< LP data */
433 SCIP_LPI* lpi, /**< LPI data */
434 SCIP_EVENTFILTER* eventfilter, /**< global event filter */
435 BMS_BLKMEM* blkmem, /**< block memory */
436 SCIP_Real* proofcoefs, /**< coefficients in the proof constraint */
437 SCIP_Real* prooflhs, /**< lhs of the proof constraint */
438 SCIP_Real* proofactivity, /**< maximal activity of the proof constraint */
439 SCIP_Real* curvarlbs, /**< current lower bounds of active problem variables */
440 SCIP_Real* curvarubs, /**< current upper bounds of active problem variables */
441 int* lbchginfoposs, /**< positions of currently active lower bound change information in variables' arrays */
442 int* ubchginfoposs, /**< positions of currently active upper bound change information in variables' arrays */
443 int* iterations, /**< pointer to store the total number of LP iterations used */
444 SCIP_Bool marklpunsolved, /**< whether LP should be marked unsolved after analysis (needed for strong branching) */
445 SCIP_Bool* dualproofsuccess, /**< pointer to store success result of dual proof analysis */
446 SCIP_Bool* valid /**< pointer to store whether the result is still a valid proof */
447 );
448
450 SCIP_CONFLICTSET* conflictset /**< conflict set */
451 );
452
454 SCIP_CONFLICT* conflict, /**< conflict analysis data */
455 SCIP_BDCHGINFO* bdchginfo /**< bound change information */
456 );
457
458#ifdef __cplusplus
459}
460#endif
461
462#endif
void SCIPconflictsetFree(SCIP_CONFLICTSET **conflictset, BMS_BLKMEM *blkmem)
SCIP_Bool SCIPconflictGraphApplicable(SCIP_SET *set)
void conflictsetPrint(SCIP_CONFLICTSET *conflictset)
void SCIPconflicthdlrEnableOrDisableClocks(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_Bool enable)
SCIP_RETCODE conflictCreateTmpBdchginfo(SCIP_CONFLICT *conflict, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_VAR *var, SCIP_BOUNDTYPE boundtype, SCIP_Real oldbound, SCIP_Real newbound, SCIP_BDCHGINFO **bdchginfo)
SCIP_RETCODE SCIPconflictAnalyzeRemainingBdchgs(SCIP_CONFLICT *conflict, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_TREE *tree, SCIP_Bool diving, int *lbchginfoposs, int *ubchginfoposs, int *nconss, int *nliterals, int *nreconvconss, int *nreconvliterals)
SCIP_RETCODE SCIPrunBoundHeuristic(SCIP_CONFLICT *conflict, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *origprob, SCIP_PROB *transprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_LPI *lpi, SCIP_EVENTFILTER *eventfilter, BMS_BLKMEM *blkmem, SCIP_Real *proofcoefs, SCIP_Real *prooflhs, SCIP_Real *proofactivity, SCIP_Real *curvarlbs, SCIP_Real *curvarubs, int *lbchginfoposs, int *ubchginfoposs, int *iterations, SCIP_Bool marklpunsolved, SCIP_Bool *dualproofsuccess, SCIP_Bool *valid)
SCIP_RETCODE SCIPconflicthdlrCreate(SCIP_CONFLICTHDLR **conflicthdlr, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem, const char *name, const char *desc, int priority, SCIP_DECL_CONFLICTCOPY((*conflictcopy)), SCIP_DECL_CONFLICTFREE((*conflictfree)), SCIP_DECL_CONFLICTINIT((*conflictinit)), SCIP_DECL_CONFLICTEXIT((*conflictexit)), SCIP_DECL_CONFLICTINITSOL((*conflictinitsol)), SCIP_DECL_CONFLICTEXITSOL((*conflictexitsol)), SCIP_DECL_CONFLICTEXEC((*conflictexec)), SCIP_CONFLICTHDLRDATA *conflicthdlrdata)
SCIP_RETCODE SCIPconflicthdlrExit(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_SET *set)
void SCIPconflicthdlrSetInit(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_DECL_CONFLICTINIT((*conflictinit)))
int conflictCalcMaxsize(SCIP_SET *set, SCIP_PROB *prob)
void SCIPconflicthdlrSetPriority(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_SET *set, int priority)
SCIP_RETCODE SCIPconflictAddBound(SCIP_CONFLICT *conflict, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_VAR *var, SCIP_BOUNDTYPE boundtype, SCIP_BDCHGIDX *bdchgidx)
SCIP_RETCODE SCIPconflicthdlrFree(SCIP_CONFLICTHDLR **conflicthdlr, SCIP_SET *set)
SCIP_RETCODE SCIPconflicthdlrExitsol(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_SET *set)
SCIP_RETCODE SCIPconflictAddRelaxedBound(SCIP_CONFLICT *conflict, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_VAR *var, SCIP_BOUNDTYPE boundtype, SCIP_BDCHGIDX *bdchgidx, SCIP_Real relaxedbd)
void SCIPconflicthdlrSetFree(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_DECL_CONFLICTFREE((*conflictfree)))
void SCIPconflicthdlrSetExitsol(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_DECL_CONFLICTEXITSOL((*conflictexitsol)))
SCIP_Real SCIPconflictGetVarUb(SCIP_CONFLICT *conflict, SCIP_VAR *var)
SCIP_RETCODE SCIPconflicthdlrCopyInclude(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_SET *set)
void SCIPconflicthdlrSetExit(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_DECL_CONFLICTEXIT((*conflictexit)))
SCIP_RETCODE SCIPundoBdchgsProof(SCIP_SET *set, SCIP_PROB *prob, int currentdepth, SCIP_Real *proofcoefs, SCIP_Real prooflhs, SCIP_Real *proofact, SCIP_Real *curvarlbs, SCIP_Real *curvarubs, int *lbchginfoposs, int *ubchginfoposs, SCIP_LPBDCHGS *oldlpbdchgs, SCIP_LPBDCHGS *relaxedlpbdchgs, SCIP_Bool *resolve, SCIP_LPI *lpi)
void SCIPconflicthdlrSetCopy(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_DECL_CONFLICTCOPY((*conflictcopy)))
SCIP_RETCODE SCIPconflictIsVarUsed(SCIP_CONFLICT *conflict, SCIP_VAR *var, SCIP_SET *set, SCIP_BOUNDTYPE boundtype, SCIP_BDCHGIDX *bdchgidx, SCIP_Bool *used)
SCIP_RETCODE SCIPconflictsetCreate(SCIP_CONFLICTSET **conflictset, BMS_BLKMEM *blkmem)
SCIP_RETCODE SCIPconflictInit(SCIP_CONFLICT *conflict, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_CONFTYPE conftype, SCIP_Bool usescutoffbound)
SCIP_RETCODE SCIPconflicthdlrExec(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_SET *set, SCIP_NODE *node, SCIP_NODE *validnode, SCIP_BDCHGINFO **bdchginfos, SCIP_Real *relaxedbds, int nbdchginfos, SCIP_CONFTYPE conftype, SCIP_Bool usescutoffbound, SCIP_Bool resolved, SCIP_RESULT *result)
SCIP_RETCODE SCIPconflicthdlrInitsol(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_SET *set)
SCIP_RETCODE SCIPconflicthdlrInit(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_SET *set)
void SCIPconflicthdlrSetInitsol(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_DECL_CONFLICTINITSOL((*conflictinitsol)))
SCIP_Real SCIPconflictGetVarLb(SCIP_CONFLICT *conflict, SCIP_VAR *var)
SCIP_Bool bdchginfoIsInvalid(SCIP_CONFLICT *conflict, SCIP_BDCHGINFO *bdchginfo)
common defines and data types used in all packages of SCIP
#define SCIP_Bool
Definition: def.h:91
#define SCIP_Real
Definition: def.h:156
struct BMS_BlkMem BMS_BLKMEM
Definition: memory.h:437
Definition: heur_padm.c:135
type definitions for branching rules
type definitions for conflict analysis
#define SCIP_DECL_CONFLICTEXIT(x)
#define SCIP_DECL_CONFLICTCOPY(x)
Definition: type_conflict.h:89
#define SCIP_DECL_CONFLICTEXEC(x)
#define SCIP_DECL_CONFLICTINITSOL(x)
#define SCIP_DECL_CONFLICTFREE(x)
Definition: type_conflict.h:97
#define SCIP_DECL_CONFLICTINIT(x)
enum SCIP_ConflictType SCIP_CONFTYPE
Definition: type_conflict.h:68
struct SCIP_ConflicthdlrData SCIP_CONFLICTHDLRDATA
Definition: type_conflict.h:50
#define SCIP_DECL_CONFLICTEXITSOL(x)
type definitions for cuts
type definitions for managing events
type definitions for implications, variable bounds, and cliques
type definitions for LP management
enum SCIP_BoundType SCIP_BOUNDTYPE
Definition: type_lp.h:60
type definitions for specific LP solvers interface
type definitions for block memory pools and memory buffers
type definitions for message output methods
type definitions for storing and manipulating the main problem
type definitions for collecting reoptimization information
enum SCIP_Result SCIP_RESULT
Definition: type_result.h:61
enum SCIP_Retcode SCIP_RETCODE
Definition: type_retcode.h:63
type definitions for global SCIP settings
type definitions for problem statistics
type definitions for problem variables