SCIP Doxygen Documentation
Loading...
Searching...
No Matches
conflict_general.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-2026 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_general.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 * SCIP contains two kinds of conflict analysis:
36 * - In graph based conflict analysis, the graph consisting of derived
37 * is analysed. Code and documentation is available in conflict_graphanalysis.h
38 * - In dual proof analysis, an infeasible LP relaxation is analysed.
39 * Using the dual solution, a valid constraint is derived that is violated
40 * by all values in the domain. This constraint is added to the problem
41 * and can then be used for domain propagation.
42 * Code is available in conflict_dualproofanalysis.h
43 * This file contains the methods that are shared by both kinds of conflict analysis.
44 */
45
46/*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
47
48#ifndef __SCIP_CONFLICT_GENERAL_H__
49#define __SCIP_CONFLICT_GENERAL_H__
50
51
53#include "scip/def.h"
54#include "scip/type_branch.h"
55#include "scip/type_conflict.h"
57#include "scip/type_event.h"
58#include "scip/type_cuts.h"
59#include "lpi/type_lpi.h"
60#include "scip/type_implics.h"
61#include "scip/type_lp.h"
62#include "scip/type_prob.h"
63#include "scip/type_reopt.h"
64#include "scip/type_retcode.h"
65#include "scip/type_set.h"
66#include "scip/type_stat.h"
67#include "scip/type_tree.h"
68#include "scip/type_var.h"
69#include "scip/type_cons.h"
70
71#ifdef __cplusplus
72extern "C" {
73#endif
74
75/*
76 * Conflict Analysis
77 */
78
79/** return TRUE if conflict analysis is applicable; In case the function return FALSE there is no need to initialize the
80 * conflict analysis since it will not be applied
81 */
83 SCIP_SET* set /**< global SCIP settings */
84 );
85
86/** creates conflict analysis data for propagation conflicts */
88 SCIP_CONFLICT** conflict, /**< pointer to conflict analysis data */
89 BMS_BLKMEM* blkmem, /**< block memory of transformed problem */
90 SCIP_SET* set /**< global SCIP settings */
91 );
92
93/** frees conflict analysis data for propagation conflicts */
95 SCIP_CONFLICT** conflict, /**< pointer to conflict analysis data */
96 BMS_BLKMEM* blkmem /**< block memory of transformed problem */
97 );
98
99/** clears conflict analysis bound changes queues for propagation conflicts */
101 SCIP_CONFLICT* conflict /**< pointer to conflict analysis data */
102 );
103
104/** analyzes conflicting bound changes that were added with calls to SCIPconflictAddBound() and
105 * SCIPconflictAddRelaxedBound(), and on success, calls the conflict handlers to create a conflict constraint out of
106 * the resulting conflict set; updates statistics for propagation conflict analysis
107 */
109 SCIP_CONFLICT* conflict, /**< conflict analysis data */
110 BMS_BLKMEM* blkmem, /**< block memory of transformed problem */
111 SCIP_SET* set, /**< global SCIP settings */
112 SCIP_STAT* stat, /**< problem statistics */
113 SCIP_PROB* prob, /**< problem data */
114 SCIP_TREE* tree, /**< branch and bound tree */
115 int validdepth, /**< minimal depth level at which the initial conflict set is valid */
116 SCIP_Bool* success /**< pointer to store whether a conflict constraint was created, or NULL */
117 );
118
119/** analyzes conflicting bound changes that were added with calls to SCIPconflictAddBound(), and on success,
120 * creates a linear constraint that explains the infeasibility
121 */
123 SCIP_CONFLICT* conflict, /**< conflict analysis data */
124 BMS_BLKMEM* blkmem, /**< block memory of transformed problem */
125 SCIP_SET* set, /**< global SCIP settings */
126 SCIP_STAT* stat, /**< problem statistics */
127 SCIP_PROB* transprob, /**< transformed problem */
128 SCIP_PROB* origprob, /**< original problem */
129 SCIP_TREE* tree, /**< branch and bound tree */
130 SCIP_REOPT* reopt, /**< reoptimization data structure */
131 SCIP_LP* lp, /**< LP data */
132 SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
133 SCIP_EVENTQUEUE* eventqueue, /**< event queue */
134 SCIP_EVENTFILTER* eventfilter, /**< global event filter */
135 SCIP_CLIQUETABLE* cliquetable, /**< clique table data structure */
136 SCIP_ROW* initialconflictrow, /**< row of constraint that detected the conflict */
137 int validdepth, /**< minimal depth level at which the initial conflict set is valid */
138 SCIP_Bool* success /**< pointer to store whether a conflict constraint was created, or NULL */
139 );
140
141/** adds the collected conflict constraints to the corresponding nodes; the best set->conf_maxconss conflict constraints
142 * are added to the node of their validdepth; additionally (if not yet added, and if repropagation is activated), the
143 * conflict constraint that triggers the earliest repropagation is added to the node of its validdepth
144 */
146 SCIP_CONFLICT* conflict, /**< conflict analysis data */
147 BMS_BLKMEM* blkmem, /**< block memory of transformed problem */
148 SCIP_SET* set, /**< global SCIP settings */
149 SCIP_STAT* stat, /**< dynamic problem statistics */
150 SCIP_PROB* transprob, /**< transformed problem */
151 SCIP_PROB* origprob, /**< original problem */
152 SCIP_TREE* tree, /**< branch and bound tree */
153 SCIP_REOPT* reopt, /**< reoptimization data structure */
154 SCIP_LP* lp, /**< current LP data */
155 SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
156 SCIP_EVENTQUEUE* eventqueue, /**< event queue */
157 SCIP_EVENTFILTER* eventfilter, /**< global event filter */
158 SCIP_CLIQUETABLE* cliquetable /**< clique table data structure */
159 );
160
161/** returns the current number of conflict sets in the conflict set storage */
163 SCIP_CONFLICT* conflict /**< conflict analysis data */
164 );
165
166/** returns the total number of conflict constraints that were added to the problem */
168 SCIP_CONFLICT* conflict /**< conflict analysis data */
169 );
170
171/** returns the total number of resolution conflict constraints that were added to the problem */
173 SCIP_CONFLICT* conflict /**< conflict analysis data */
174 );
175
176/** returns the total number of literals in conflict constraints that were added to the problem */
178 SCIP_CONFLICT* conflict /**< conflict analysis data */
179 );
180
181/** returns the total number of global bound changes applied by the conflict analysis */
183 SCIP_CONFLICT* conflict /**< conflict analysis data */
184 );
185
186/** returns the total number of conflict constraints that were added globally to the problem */
188 SCIP_CONFLICT* conflict /**< conflict analysis data */
189 );
190
191/** returns the total number of literals in conflict constraints that were added globally to the problem */
193 SCIP_CONFLICT* conflict /**< conflict analysis data */
194 );
195
196/** returns the total number of local bound changes applied by the conflict analysis */
198 SCIP_CONFLICT* conflict /**< conflict analysis data */
199 );
200
201/** returns the total number of conflict constraints that were added locally to the problem */
203 SCIP_CONFLICT* conflict /**< conflict analysis data */
204 );
205
206/** returns the total number of literals in conflict constraints that were added locally to the problem */
208 SCIP_CONFLICT* conflict /**< conflict analysis data */
209 );
210
211/** gets time in seconds used for preprocessing global conflict constraint before appliance */
213 SCIP_CONFLICT* conflict /**< conflict analysis data */
214 );
215
216/** gets time in seconds used for analyzing propagation conflicts */
218 SCIP_CONFLICT* conflict /**< conflict analysis data */
219 );
220
221/** gets time in seconds used for analyzing propagation conflicts with generalized resolution*/
223 SCIP_CONFLICT* conflict /**< conflict analysis data */
224 );
225
226/** gets number of calls to propagation conflict analysis */
228 SCIP_CONFLICT* conflict /**< conflict analysis data */
229 );
230
231/** gets number of calls to propagation conflict analysis that yield at least one conflict constraint */
233 SCIP_CONFLICT* conflict /**< conflict analysis data */
234 );
235
236/** gets number of conflict constraints detected in propagation conflict analysis */
238 SCIP_CONFLICT* conflict /**< conflict analysis data */
239 );
240
241/** gets total number of literals in conflict constraints created in propagation conflict analysis */
243 SCIP_CONFLICT* conflict /**< conflict analysis data */
244 );
245
246/** gets total number of variables in resolution conflict constraints created in propagation conflict analysis */
248 SCIP_CONFLICT* conflict /**< conflict analysis data */
249 );
250
251/** gets number of reconvergence constraints detected in propagation conflict analysis */
253 SCIP_CONFLICT* conflict /**< conflict analysis data */
254 );
255
256/** gets total number of literals in reconvergence constraints created in propagation conflict analysis */
258 SCIP_CONFLICT* conflict /**< conflict analysis data */
259 );
260
261/*
262 * Infeasible LP Conflict Analysis
263 */
264
265/** analyzes an infeasible or bound exceeding LP to find out the bound changes on variables that were responsible for the
266 * infeasibility or for exceeding the primal bound;
267 * on success, calls standard conflict analysis with the responsible variables as starting conflict set, thus creating
268 * a conflict constraint out of the resulting conflict set;
269 * updates statistics for infeasible or bound exceeding LP conflict analysis
270 */
272 SCIP_CONFLICT* conflict, /**< conflict analysis data */
273 SCIP_CONFLICTSTORE* conflictstore, /**< conflict store */
274 BMS_BLKMEM* blkmem, /**< block memory of transformed problem */
275 SCIP_SET* set, /**< global SCIP settings */
276 SCIP_STAT* stat, /**< problem statistics */
277 SCIP_PROB* transprob, /**< transformed problem */
278 SCIP_PROB* origprob, /**< original problem */
279 SCIP_TREE* tree, /**< branch and bound tree */
280 SCIP_REOPT* reopt, /**< reoptimization data structure */
281 SCIP_LP* lp, /**< LP data */
282 SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
283 SCIP_EVENTQUEUE* eventqueue, /**< event queue */
284 SCIP_EVENTFILTER* eventfilter, /**< global event filter */
285 SCIP_CLIQUETABLE* cliquetable, /**< clique table data structure */
286 SCIP_Bool* success /**< pointer to store whether a conflict constraint was created, or NULL */
287 );
288
289/** gets time in seconds used for analyzing infeasible LP conflicts */
291 SCIP_CONFLICT* conflict /**< conflict analysis data */
292 );
293
294/** gets number of calls to infeasible LP conflict analysis */
296 SCIP_CONFLICT* conflict /**< conflict analysis data */
297 );
298
299/** gets number of calls to infeasible LP conflict analysis that yield at least one conflict constraint */
301 SCIP_CONFLICT* conflict /**< conflict analysis data */
302 );
303
304/** gets number of conflict constraints detected in infeasible LP conflict analysis */
306 SCIP_CONFLICT* conflict /**< conflict analysis data */
307 );
308
309/** gets total number of literals in conflict constraints created in infeasible LP conflict analysis */
311 SCIP_CONFLICT* conflict /**< conflict analysis data */
312 );
313
314/** gets number of reconvergence constraints detected in infeasible LP conflict analysis */
316 SCIP_CONFLICT* conflict /**< conflict analysis data */
317 );
318
319/** gets total number of literals in reconvergence constraints created in infeasible LP conflict analysis */
321 SCIP_CONFLICT* conflict /**< conflict analysis data */
322 );
323
324/** gets number of LP iterations in infeasible LP conflict analysis */
326 SCIP_CONFLICT* conflict /**< conflict analysis data */
327 );
328
329/** gets time in seconds used for analyzing bound exceeding LP conflicts */
331 SCIP_CONFLICT* conflict /**< conflict analysis data */
332 );
333
334/** gets number of calls to bound exceeding LP conflict analysis */
336 SCIP_CONFLICT* conflict /**< conflict analysis data */
337 );
338
339/** gets number of calls to bound exceeding LP conflict analysis that yield at least one conflict constraint */
341 SCIP_CONFLICT* conflict /**< conflict analysis data */
342 );
343
344/** gets number of conflict constraints detected in bound exceeding LP conflict analysis */
346 SCIP_CONFLICT* conflict /**< conflict analysis data */
347 );
348
349/** gets total number of literals in conflict constraints created in bound exceeding LP conflict analysis */
351 SCIP_CONFLICT* conflict /**< conflict analysis data */
352 );
353
354/** gets number of reconvergence constraints detected in bound exceeding LP conflict analysis */
356 SCIP_CONFLICT* conflict /**< conflict analysis data */
357 );
358
359/** gets total number of literals in reconvergence constraints created in bound exceeding LP conflict analysis */
361 SCIP_CONFLICT* conflict /**< conflict analysis data */
362 );
363
364/** gets number of LP iterations in bound exceeding LP conflict analysis */
366 SCIP_CONFLICT* conflict /**< conflict analysis data */
367 );
368
369
370
371
372/*
373 * infeasible strong branching conflict analysis
374 */
375
376/** analyses infeasible strong branching sub problems for conflicts */
378 SCIP_CONFLICT* conflict, /**< conflict analysis data */
379 SCIP_CONFLICTSTORE* conflictstore, /**< conflict store */
380 BMS_BLKMEM* blkmem, /**< block memory buffers */
381 SCIP_SET* set, /**< global SCIP settings */
382 SCIP_STAT* stat, /**< dynamic problem statistics */
383 SCIP_PROB* transprob, /**< transformed problem */
384 SCIP_PROB* origprob, /**< original problem */
385 SCIP_TREE* tree, /**< branch and bound tree */
386 SCIP_REOPT* reopt, /**< reoptimization data structure */
387 SCIP_LP* lp, /**< LP data */
388 SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
389 SCIP_EVENTQUEUE* eventqueue, /**< event queue */
390 SCIP_EVENTFILTER* eventfilter, /**< global event filter */
391 SCIP_CLIQUETABLE* cliquetable, /**< clique table data structure */
392 SCIP_COL* col, /**< LP column with at least one infeasible strong branching subproblem */
393 SCIP_Bool* downconflict, /**< pointer to store whether a conflict constraint was created for an
394 * infeasible downwards branch, or NULL */
395 SCIP_Bool* upconflict /**< pointer to store whether a conflict constraint was created for an
396 * infeasible upwards branch, or NULL */
397 );
398
399/** gets time in seconds used for analyzing infeasible strong branching conflicts */
401 SCIP_CONFLICT* conflict /**< conflict analysis data */
402 );
403
404/** gets number of successful calls to dual proof analysis derived from infeasible LPs */
406 SCIP_CONFLICT* conflict /**< conflict analysis data */
407 );
408
409/** gets number of globally valid dual proof constraints derived from infeasible LPs */
411 SCIP_CONFLICT* conflict /**< conflict analysis data */
412 );
413
414/** gets number of locally valid dual proof constraints derived from infeasible LPs */
416 SCIP_CONFLICT* conflict /**< conflict analysis data */
417 );
418
419/** gets average length of dual proof constraints derived from infeasible LPs */
421 SCIP_CONFLICT* conflict /**< conflict analysis data */
422 );
423
424/** gets number of successfully analyzed dual proofs derived from bound exceeding LPs */
426 SCIP_CONFLICT* conflict /**< conflict analysis data */
427 );
428
429/** gets number of globally applied dual proofs derived from bound exceeding LPs */
431 SCIP_CONFLICT* conflict /**< conflict analysis data */
432 );
433
434/** gets number of locally applied dual proofs derived from bound exceeding LPs */
436 SCIP_CONFLICT* conflict /**< conflict analysis data */
437 );
438
439/** gets average length of dual proofs derived from bound exceeding LPs */
441 SCIP_CONFLICT* conflict /**< conflict analysis data */
442 );
443
444/** gets number of calls to infeasible strong branching conflict analysis */
446 SCIP_CONFLICT* conflict /**< conflict analysis data */
447 );
448
449/** gets number of calls to infeasible strong branching conflict analysis that yield at least one conflict constraint */
451 SCIP_CONFLICT* conflict /**< conflict analysis data */
452 );
453
454/** gets number of conflict constraints detected in infeasible strong branching conflict analysis */
456 SCIP_CONFLICT* conflict /**< conflict analysis data */
457 );
458
459/** gets total number of literals in conflict constraints created in infeasible strong branching conflict analysis */
461 SCIP_CONFLICT* conflict /**< conflict analysis data */
462 );
463
464/** gets number of reconvergence constraints detected in infeasible strong branching conflict analysis */
466 SCIP_CONFLICT* conflict /**< conflict analysis data */
467 );
468
469/** gets total number of literals in reconvergence constraints created in infeasible strong branching conflict analysis */
471 SCIP_CONFLICT* conflict /**< conflict analysis data */
472 );
473
474/** gets number of LP iterations in infeasible strong branching conflict analysis */
476 SCIP_CONFLICT* conflict /**< conflict analysis data */
477 );
478
479
480
481
482/*
483 * pseudo solution conflict analysis
484 */
485
486/** analyzes a pseudo solution with objective value exceeding the current cutoff to find out the bound changes on
487 * variables that were responsible for the objective value degradation;
488 * on success, calls standard conflict analysis with the responsible variables as starting conflict set, thus creating
489 * a conflict constraint out of the resulting conflict set;
490 * updates statistics for pseudo solution conflict analysis
491 */
493 SCIP_CONFLICT* conflict, /**< conflict analysis data */
494 BMS_BLKMEM* blkmem, /**< block memory of transformed problem */
495 SCIP_SET* set, /**< global SCIP settings */
496 SCIP_STAT* stat, /**< problem statistics */
497 SCIP_PROB* transprob, /**< transformed problem */
498 SCIP_PROB* origprob, /**< original problem */
499 SCIP_TREE* tree, /**< branch and bound tree */
500 SCIP_REOPT* reopt, /**< reoptimization data structure */
501 SCIP_LP* lp, /**< LP data */
502 SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
503 SCIP_EVENTQUEUE* eventqueue, /**< event queue */
504 SCIP_EVENTFILTER* eventfilter, /**< global event filter */
505 SCIP_CLIQUETABLE* cliquetable, /**< clique table data structure */
506 SCIP_Bool* success /**< pointer to store whether a conflict constraint was created, or NULL */
507 );
508
509/** gets time in seconds used for analyzing pseudo solution conflicts */
511 SCIP_CONFLICT* conflict /**< conflict analysis data */
512 );
513
514/** gets number of calls to pseudo solution conflict analysis */
516 SCIP_CONFLICT* conflict /**< conflict analysis data */
517 );
518
519/** gets number of calls to pseudo solution conflict analysis that yield at least one conflict constraint */
521 SCIP_CONFLICT* conflict /**< conflict analysis data */
522 );
523
524/** gets number of conflict constraints detected in pseudo solution conflict analysis */
526 SCIP_CONFLICT* conflict /**< conflict analysis data */
527 );
528
529/** gets total number of literals in conflict constraints created in pseudo solution conflict analysis */
531 SCIP_CONFLICT* conflict /**< conflict analysis data */
532 );
533
534/** gets number of reconvergence constraints detected in pseudo solution conflict analysis */
536 SCIP_CONFLICT* conflict /**< conflict analysis data */
537 );
538
539/** gets total number of literals in reconvergence constraints created in pseudo solution conflict analysis */
541 SCIP_CONFLICT* conflict /**< conflict analysis data */
542 );
543
544/** enables or disables all clocks of \p conflict, depending on the value of the flag */
546 SCIP_CONFLICT* conflict, /**< the conflict analysis data for which all clocks should be enabled or disabled */
547 SCIP_Bool enable /**< should the clocks of the conflict analysis data be enabled? */
548 );
549
550/** analyzes conflicting bound changes that were added with calls to SCIPconflictAddBound() and
551 * SCIPconflictAddRelaxedBound(), and on success, calls the conflict handlers to create a conflict constraint out of
552 * the resulting conflict set; afterwards the conflict queue and the conflict set is cleared
553 */
555 SCIP_CONFLICT* conflict, /**< conflict analysis data */
556 BMS_BLKMEM* blkmem, /**< block memory of transformed problem */
557 SCIP_SET* set, /**< global SCIP settings */
558 SCIP_STAT* stat, /**< problem statistics */
559 SCIP_PROB* prob, /**< problem data */
560 SCIP_TREE* tree, /**< branch and bound tree */
561 SCIP_Bool diving, /**< are we in strong branching or diving mode? */
562 int validdepth, /**< minimal depth level at which the initial conflict set is valid */
563 SCIP_Bool mustresolve, /**< should the conflict set only be used, if a resolution was applied? */
564 int* nconss, /**< pointer to store the number of generated conflict constraints */
565 int* nliterals, /**< pointer to store the number of literals in generated conflict constraints */
566 int* nreconvconss, /**< pointer to store the number of generated reconvergence constraints */
567 int* nreconvliterals /**< pointer to store the number of literals generated reconvergence constraints */
568 );
569
570/** Analyzes conflicting bound changes added via SCIPconflictAddBound().
571 * This function performs generalized resolution conflict analysis by iteratively aggregating the
572 * infeasible conflict row (conflictrow) with the reason row (reasonrow) that propagated the bound change.
573 * In each iteration, the coefficient of the resolving variable is cancelled. If the aggregation does not
574 * yield an infeasible row, MIR reduction is applied to the reason row and the aggregation is retried,
575 * continuing until a first unique implication point (FUIP) is reached. On success, a linear conflict
576 * constraint that explains the infeasibility is added to the problem.
577 */
579 SCIP_CONFLICT* conflict, /**< conflict analysis data */
580 BMS_BLKMEM* blkmem, /**< block memory of transformed problem */
581 SCIP_SET* set, /**< global SCIP settings */
582 SCIP_STAT* stat, /**< problem statistics */
583 SCIP_PROB* transprob, /**< transformed problem */
584 SCIP_PROB* origprob, /**< original problem */
585 SCIP_TREE* tree, /**< branch and bound tree */
586 SCIP_REOPT* reopt, /**< reoptimization data structure */
587 SCIP_LP* lp, /**< LP data */
588 SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
589 SCIP_EVENTQUEUE* eventqueue, /**< event queue */
590 SCIP_EVENTFILTER* eventfilter, /**< global event filter */
591 SCIP_CLIQUETABLE* cliquetable, /**< clique table data structure */
592 SCIP_ROW* initialconflictrow, /**< row of constraint that detected the conflict */
593 int validdepth, /**< minimal depth level at which the initial conflict set is valid */
594 int* nconss, /**< pointer to store the number of generated conflict constraints */
595 int* nconfvars /**< pointer to store the number of variables in generated conflict constraints */
596 );
597
598/** calculates a Farkas proof from the current dual LP solution */
600 SCIP_SET* set, /**< global SCIP settings */
601 SCIP_PROB* prob, /**< transformed problem */
602 SCIP_LP* lp, /**< LP data */
603 SCIP_LPI* lpi, /**< LPI data */
604 SCIP_TREE* tree, /**< tree data */
605 SCIP_AGGRROW* farkasrow, /**< aggregated row representing the proof */
606 SCIP_Real* farkasact, /**< maximal activity of the proof constraint */
607 int* validdepth, /**< pointer to store the valid depth of the proof constraint */
608 SCIP_Real* curvarlbs, /**< current lower bounds of active problem variables */
609 SCIP_Real* curvarubs, /**< current upper bounds of active problem variables */
610 SCIP_Bool* valid /**< pointer store whether the proof constraint is valid */
611 );
612
613/** calculates a dual proof from the current dual LP solution */
615 SCIP_SET* set, /**< global SCIP settings */
616 SCIP_PROB* transprob, /**< transformed problem */
617 SCIP_LP* lp, /**< LP data */
618 SCIP_LPI* lpi, /**< LPI data */
619 SCIP_TREE* tree, /**< tree data */
620 SCIP_AGGRROW* farkasrow, /**< aggregated row representing the proof */
621 SCIP_Real* farkasact, /**< maximal activity of the proof constraint */
622 int* validdepth, /**< pointer to store the valid depth of the proof constraint */
623 SCIP_Real* curvarlbs, /**< current lower bounds of active problem variables */
624 SCIP_Real* curvarubs, /**< current upper bounds of active problem variables */
625 SCIP_Bool* valid /**< pointer store whether the proof constraint is valid */
626 );
627
628/** calculates the minimal activity of a given aggregation row
629 *
630 * @note in exact solving mode, this returns a safe underestimation of the minimal activity
631 */
633 SCIP_SET* set, /**< global SCIP settings */
634 SCIP_PROB* transprob, /**< transformed problem data */
635 SCIP_AGGRROW* aggrrow, /**< aggregation row */
636 SCIP_Real* curvarlbs, /**< current lower bounds of active problem variables (or NULL for global bounds) */
637 SCIP_Real* curvarubs, /**< current upper bounds of active problem variables (or NULL for global bounds) */
638 SCIP_Bool* infdelta /**< pointer to store whether at least one variable contributes with an infinite value */
639 );
640#ifdef __cplusplus
641}
642#endif
643
644#endif
int SCIPconflictGetNConflicts(SCIP_CONFLICT *conflict)
SCIP_Longint SCIPconflictGetNAppliedGlobalConss(SCIP_CONFLICT *conflict)
SCIP_Longint SCIPconflictGetNDualproofsInfLocal(SCIP_CONFLICT *conflict)
SCIP_Longint SCIPconflictGetNAppliedLocalLiterals(SCIP_CONFLICT *conflict)
SCIP_Longint SCIPconflictGetNResConflictVars(SCIP_CONFLICT *conflict)
SCIP_Longint SCIPconflictGetNPropCalls(SCIP_CONFLICT *conflict)
SCIP_Longint SCIPconflictGetNDualproofsInfNonzeros(SCIP_CONFLICT *conflict)
SCIP_Longint SCIPconflictGetNStrongbranchIterations(SCIP_CONFLICT *conflict)
SCIP_Real SCIPconflictGetInfeasibleLPTime(SCIP_CONFLICT *conflict)
SCIP_Longint SCIPconflictGetNInfeasibleLPCalls(SCIP_CONFLICT *conflict)
SCIP_RETCODE SCIPgetFarkasProof(SCIP_SET *set, SCIP_PROB *prob, SCIP_LP *lp, SCIP_LPI *lpi, SCIP_TREE *tree, SCIP_AGGRROW *farkasrow, SCIP_Real *farkasact, int *validdepth, SCIP_Real *curvarlbs, SCIP_Real *curvarubs, SCIP_Bool *valid)
SCIP_RETCODE SCIPconflictCreate(SCIP_CONFLICT **conflict, BMS_BLKMEM *blkmem, SCIP_SET *set)
SCIP_Real SCIPconflictGetGlobalApplTime(SCIP_CONFLICT *conflict)
SCIP_RETCODE SCIPgetDualProof(SCIP_SET *set, SCIP_PROB *transprob, SCIP_LP *lp, SCIP_LPI *lpi, SCIP_TREE *tree, SCIP_AGGRROW *farkasrow, SCIP_Real *farkasact, int *validdepth, SCIP_Real *curvarlbs, SCIP_Real *curvarubs, SCIP_Bool *valid)
SCIP_Longint SCIPconflictGetNInfeasibleLPSuccess(SCIP_CONFLICT *conflict)
SCIP_Longint SCIPconflictGetNBoundexceedingLPReconvergenceConss(SCIP_CONFLICT *conflict)
SCIP_Longint SCIPconflictGetNGlobalChgBds(SCIP_CONFLICT *conflict)
SCIP_RETCODE SCIPconflictClearQueues(SCIP_CONFLICT *conflict)
SCIP_Longint SCIPconflictGetNAppliedLiterals(SCIP_CONFLICT *conflict)
SCIP_RETCODE SCIPconflictAnalyzeLP(SCIP_CONFLICT *conflict, SCIP_CONFLICTSTORE *conflictstore, 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 *success)
SCIP_Longint SCIPconflictGetNPropConflictLiterals(SCIP_CONFLICT *conflict)
SCIP_Longint SCIPconflictGetNAppliedConss(SCIP_CONFLICT *conflict)
SCIP_Longint SCIPconflictGetNInfeasibleLPConflictConss(SCIP_CONFLICT *conflict)
SCIP_Longint SCIPconflictGetNBoundexceedingLPConflictConss(SCIP_CONFLICT *conflict)
SCIP_RETCODE conflictAnalyzeResolution(SCIP_CONFLICT *conflict, 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_ROW *initialconflictrow, int validdepth, int *nconss, int *nconfvars)
SCIP_Longint SCIPconflictGetNBoundexceedingLPSuccess(SCIP_CONFLICT *conflict)
SCIP_Longint SCIPconflictGetNStrongbranchCalls(SCIP_CONFLICT *conflict)
SCIP_Longint SCIPconflictGetNInfeasibleLPReconvergenceLiterals(SCIP_CONFLICT *conflict)
SCIP_Longint SCIPconflictGetNPropReconvergenceConss(SCIP_CONFLICT *conflict)
SCIP_Real SCIPconflictGetBoundexceedingLPTime(SCIP_CONFLICT *conflict)
SCIP_RETCODE SCIPconflictAnalyze(SCIP_CONFLICT *conflict, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_TREE *tree, int validdepth, SCIP_Bool *success)
SCIP_Longint SCIPconflictGetNStrongbranchReconvergenceLiterals(SCIP_CONFLICT *conflict)
SCIP_Real SCIPconflictGetPseudoTime(SCIP_CONFLICT *conflict)
SCIP_Longint SCIPconflictGetNPseudoReconvergenceLiterals(SCIP_CONFLICT *conflict)
SCIP_Longint SCIPconflictGetNPropReconvergenceLiterals(SCIP_CONFLICT *conflict)
SCIP_Bool SCIPconflictApplicable(SCIP_SET *set)
SCIP_Longint SCIPconflictGetNInfeasibleLPReconvergenceConss(SCIP_CONFLICT *conflict)
SCIP_Longint SCIPconflictGetNAppliedLocalConss(SCIP_CONFLICT *conflict)
SCIP_RETCODE SCIPconflictAnalyzeStrongbranch(SCIP_CONFLICT *conflict, SCIP_CONFLICTSTORE *conflictstore, 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_COL *col, SCIP_Bool *downconflict, SCIP_Bool *upconflict)
SCIP_Longint SCIPconflictGetNStrongbranchReconvergenceConss(SCIP_CONFLICT *conflict)
SCIP_Longint SCIPconflictGetNBoundexceedingLPConflictLiterals(SCIP_CONFLICT *conflict)
SCIP_RETCODE SCIPconflictAnalyzePseudo(SCIP_CONFLICT *conflict, 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 *success)
SCIP_Real SCIPconflictGetStrongbranchTime(SCIP_CONFLICT *conflict)
SCIP_Longint SCIPconflictGetNPseudoSuccess(SCIP_CONFLICT *conflict)
SCIP_Longint SCIPconflictGetNInfeasibleLPConflictLiterals(SCIP_CONFLICT *conflict)
SCIP_Real SCIPaggrRowGetMinActivity(SCIP_SET *set, SCIP_PROB *transprob, SCIP_AGGRROW *aggrrow, SCIP_Real *curvarlbs, SCIP_Real *curvarubs, SCIP_Bool *infdelta)
SCIP_Longint SCIPconflictGetNPseudoConflictLiterals(SCIP_CONFLICT *conflict)
SCIP_RETCODE conflictAnalyze(SCIP_CONFLICT *conflict, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_TREE *tree, SCIP_Bool diving, int validdepth, SCIP_Bool mustresolve, int *nconss, int *nliterals, int *nreconvconss, int *nreconvliterals)
SCIP_Longint SCIPconflictGetNLocalChgBds(SCIP_CONFLICT *conflict)
SCIP_Longint SCIPconflictGetNDualproofsBndSuccess(SCIP_CONFLICT *conflict)
SCIP_Longint SCIPconflictGetNPropSuccess(SCIP_CONFLICT *conflict)
SCIP_Longint SCIPconflictGetNDualproofsInfSuccess(SCIP_CONFLICT *conflict)
SCIP_Longint SCIPconflictGetNBoundexceedingLPCalls(SCIP_CONFLICT *conflict)
SCIP_Longint SCIPconflictGetNPropConflictConss(SCIP_CONFLICT *conflict)
SCIP_Longint SCIPconflictGetNStrongbranchSuccess(SCIP_CONFLICT *conflict)
SCIP_Real SCIPconflictGetResTime(SCIP_CONFLICT *conflict)
SCIP_Longint SCIPconflictGetNDualproofsBndGlobal(SCIP_CONFLICT *conflict)
SCIP_Longint SCIPconflictGetNPseudoReconvergenceConss(SCIP_CONFLICT *conflict)
SCIP_Longint SCIPconflictGetNAppliedGlobalLiterals(SCIP_CONFLICT *conflict)
SCIP_Longint SCIPconflictGetNDualproofsBndLocal(SCIP_CONFLICT *conflict)
SCIP_RETCODE SCIPconflictAnalyzeResolution(SCIP_CONFLICT *conflict, 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_ROW *initialconflictrow, int validdepth, SCIP_Bool *success)
SCIP_Longint SCIPconflictGetNPseudoCalls(SCIP_CONFLICT *conflict)
SCIP_Longint SCIPconflictGetNAppliedResConss(SCIP_CONFLICT *conflict)
void SCIPconflictEnableOrDisableClocks(SCIP_CONFLICT *conflict, SCIP_Bool enable)
SCIP_Real SCIPconflictGetPropTime(SCIP_CONFLICT *conflict)
SCIP_Longint SCIPconflictGetNBoundexceedingLPIterations(SCIP_CONFLICT *conflict)
SCIP_Longint SCIPconflictGetNStrongbranchConflictLiterals(SCIP_CONFLICT *conflict)
SCIP_Longint SCIPconflictGetNPseudoConflictConss(SCIP_CONFLICT *conflict)
SCIP_Longint SCIPconflictGetNDualproofsBndNonzeros(SCIP_CONFLICT *conflict)
SCIP_Longint SCIPconflictGetNDualproofsInfGlobal(SCIP_CONFLICT *conflict)
SCIP_RETCODE SCIPconflictFlushConss(SCIP_CONFLICT *conflict, 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_Longint SCIPconflictGetNBoundexceedingLPReconvergenceLiterals(SCIP_CONFLICT *conflict)
SCIP_RETCODE SCIPconflictFree(SCIP_CONFLICT **conflict, BMS_BLKMEM *blkmem)
SCIP_Longint SCIPconflictGetNStrongbranchConflictConss(SCIP_CONFLICT *conflict)
SCIP_Longint SCIPconflictGetNInfeasibleLPIterations(SCIP_CONFLICT *conflict)
common defines and data types used in all packages of SCIP
#define SCIP_Longint
Definition def.h:148
#define SCIP_Bool
Definition def.h:98
#define SCIP_Real
Definition def.h:163
memory allocation routines
struct BMS_BlkMem BMS_BLKMEM
Definition memory.h:437
type definitions for branching rules
struct SCIP_BranchCand SCIP_BRANCHCAND
Definition type_branch.h:55
type definitions for conflict analysis
struct SCIP_Conflict SCIP_CONFLICT
type definitions for conflict store
struct SCIP_ConflictStore SCIP_CONFLICTSTORE
type definitions for constraints and constraint handlers
type definitions for cuts
struct SCIP_AggrRow SCIP_AGGRROW
Definition type_cuts.h:37
type definitions for managing events
struct SCIP_EventFilter SCIP_EVENTFILTER
Definition type_event.h:180
struct SCIP_EventQueue SCIP_EVENTQUEUE
Definition type_event.h:181
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:105
struct SCIP_Lp SCIP_LP
Definition type_lp.h:111
struct SCIP_Col SCIP_COL
Definition type_lp.h:99
type definitions for specific LP solvers interface
struct SCIP_LPi SCIP_LPI
Definition type_lpi.h:106
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 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:66
type definitions for branch and bound tree
struct SCIP_Tree SCIP_TREE
Definition type_tree.h:65
type definitions for problem variables