Scippy

SCIP

Solving Constraint Integer Programs

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-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_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:141
#define SCIP_Bool
Definition: def.h:91
#define SCIP_Real
Definition: def.h:156
memory allocation routines
struct BMS_BlkMem BMS_BLKMEM
Definition: memory.h:437
Definition: heur_padm.c:135
type definitions for branching rules
type definitions for conflict analysis
type definitions for conflict store
type definitions for constraints and constraint handlers
type definitions for cuts
type definitions for managing events
type definitions for implications, variable bounds, and cliques
type definitions for LP management
type definitions for specific LP solvers interface
type definitions for storing and manipulating the main problem
type definitions for collecting reoptimization information
type definitions for return codes for SCIP methods
enum SCIP_Retcode SCIP_RETCODE
Definition: type_retcode.h:63
type definitions for global SCIP settings
type definitions for problem statistics
type definitions for branch and bound tree
type definitions for problem variables