Scippy

SCIP

Solving Constraint Integer Programs

conflict.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-2017 Konrad-Zuse-Zentrum */
7 /* fuer Informationstechnik Berlin */
8 /* */
9 /* SCIP is distributed under the terms of the ZIB Academic License. */
10 /* */
11 /* You should have received a copy of the ZIB Academic License */
12 /* along with SCIP; see the file COPYING. If not email to scip@zib.de. */
13 /* */
14 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
15 
16 /**@file conflict.h
17  * @ingroup INTERNALAPI
18  * @brief internal methods for conflict analysis
19  * @author Tobias Achterberg
20  */
21 
22 /*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
23 
24 #ifndef __SCIP_CONFLICT_H__
25 #define __SCIP_CONFLICT_H__
26 
27 
28 #include "scip/def.h"
29 #include "blockmemshell/memory.h"
30 #include "scip/type_retcode.h"
31 #include "scip/type_set.h"
32 #include "scip/type_stat.h"
33 #include "scip/type_lp.h"
34 #include "scip/type_var.h"
35 #include "scip/type_prob.h"
36 #include "scip/type_tree.h"
37 #include "scip/type_conflict.h"
38 #include "scip/pub_conflict.h"
39 #include "scip/conflictstore.h"
40 
41 #ifdef __cplusplus
42 extern "C" {
43 #endif
44 
45 /*
46  * Conflict Handler
47  */
48 
49 /** copies the given conflict handler to a new scip */
50 extern
52  SCIP_CONFLICTHDLR* conflicthdlr, /**< conflict handler */
53  SCIP_SET* set /**< SCIP_SET of SCIP to copy to */
54  );
55 
56 /** creates a conflict handler */
57 extern
59  SCIP_CONFLICTHDLR** conflicthdlr, /**< pointer to conflict handler data structure */
60  SCIP_SET* set, /**< global SCIP settings */
61  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
62  BMS_BLKMEM* blkmem, /**< block memory for parameter settings */
63  const char* name, /**< name of conflict handler */
64  const char* desc, /**< description of conflict handler */
65  int priority, /**< priority of the conflict handler */
66  SCIP_DECL_CONFLICTCOPY((*conflictcopy)), /**< copy method of conflict handler or NULL if you don't want to copy your plugin into sub-SCIPs */
67  SCIP_DECL_CONFLICTFREE((*conflictfree)), /**< destructor of conflict handler */
68  SCIP_DECL_CONFLICTINIT((*conflictinit)), /**< initialize conflict handler */
69  SCIP_DECL_CONFLICTEXIT((*conflictexit)), /**< deinitialize conflict handler */
70  SCIP_DECL_CONFLICTINITSOL((*conflictinitsol)),/**< solving process initialization method of conflict handler */
71  SCIP_DECL_CONFLICTEXITSOL((*conflictexitsol)),/**< solving process deinitialization method of conflict handler */
72  SCIP_DECL_CONFLICTEXEC((*conflictexec)), /**< conflict processing method of conflict handler */
73  SCIP_CONFLICTHDLRDATA* conflicthdlrdata /**< conflict handler data */
74  );
75 
76 /** calls destructor and frees memory of conflict handler */
77 extern
79  SCIP_CONFLICTHDLR** conflicthdlr, /**< pointer to conflict handler data structure */
80  SCIP_SET* set /**< global SCIP settings */
81  );
82 
83 /** calls init method of conflict handler */
84 extern
86  SCIP_CONFLICTHDLR* conflicthdlr, /**< conflict handler */
87  SCIP_SET* set /**< global SCIP settings */
88  );
89 
90 /** calls exit method of conflict handler */
91 extern
93  SCIP_CONFLICTHDLR* conflicthdlr, /**< conflict handler */
94  SCIP_SET* set /**< global SCIP settings */
95  );
96 
97 /** informs conflict handler that the branch and bound process is being started */
98 extern
100  SCIP_CONFLICTHDLR* conflicthdlr, /**< conflict handler */
101  SCIP_SET* set /**< global SCIP settings */
102  );
103 
104 /** informs conflict handler that the branch and bound process data is being freed */
105 extern
107  SCIP_CONFLICTHDLR* conflicthdlr, /**< conflict handler */
108  SCIP_SET* set /**< global SCIP settings */
109  );
110 
111 /** calls execution method of conflict handler */
112 extern
114  SCIP_CONFLICTHDLR* conflicthdlr, /**< conflict handler */
115  SCIP_SET* set, /**< global SCIP settings */
116  SCIP_NODE* node, /**< node to add conflict constraint to */
117  SCIP_NODE* validnode, /**< node at which the constraint is valid */
118  SCIP_BDCHGINFO** bdchginfos, /**< bound change resembling the conflict set */
119  SCIP_Real* relaxedbds, /**< array with relaxed bounds which are efficient to create a valid conflict */
120  int nbdchginfos, /**< number of bound changes in the conflict set */
121  SCIP_CONFTYPE conftype, /**< type of the conflict */
122  SCIP_Bool usescutoffbound, /**< depends the conflict on the cutoff bound? */
123  SCIP_Bool resolved, /**< was the conflict set already used to create a constraint? */
124  SCIP_RESULT* result /**< pointer to store the result of the callback method */
125  );
126 
127 /** sets priority of conflict handler */
128 extern
130  SCIP_CONFLICTHDLR* conflicthdlr, /**< conflict handler */
131  SCIP_SET* set, /**< global SCIP settings */
132  int priority /**< new priority of the conflict handler */
133  );
134 
135 /** set copy method of conflict handler */
136 extern
138  SCIP_CONFLICTHDLR* conflicthdlr, /**< conflict handler */
139  SCIP_DECL_CONFLICTCOPY((*conflictcopy)) /**< copy method of the conflict handler */
140  );
141 
142 /** set destructor of conflict handler */
143 extern
145  SCIP_CONFLICTHDLR* conflicthdlr, /**< conflict handler */
146  SCIP_DECL_CONFLICTFREE((*conflictfree)) /**< destructor of conflict handler */
147  );
148 
149 /** set initialization method of conflict handler */
150 extern
152  SCIP_CONFLICTHDLR* conflicthdlr, /**< conflict handler */
153  SCIP_DECL_CONFLICTINIT((*conflictinit)) /**< initialization method conflict handler */
154  );
155 
156 /** set deinitialization method of conflict handler */
157 extern
159  SCIP_CONFLICTHDLR* conflicthdlr, /**< conflict handler */
160  SCIP_DECL_CONFLICTEXIT((*conflictexit)) /**< deinitialization method conflict handler */
161  );
162 
163 /** set solving process initialization method of conflict handler */
164 extern
166  SCIP_CONFLICTHDLR* conflicthdlr, /**< conflict handler */
167  SCIP_DECL_CONFLICTINITSOL((*conflictinitsol))/**< solving process initialization method of conflict handler */
168  );
169 
170 /** set solving process deinitialization method of conflict handler */
171 extern
173  SCIP_CONFLICTHDLR* conflicthdlr, /**< conflict handler */
174  SCIP_DECL_CONFLICTEXITSOL((*conflictexitsol))/**< solving process deinitialization method of conflict handler */
175  );
176 
177 /** enables or disables all clocks of \p conflicthdlr, depending on the value of the flag */
178 extern
180  SCIP_CONFLICTHDLR* conflicthdlr, /**< the conflict handler for which all clocks should be enabled or disabled */
181  SCIP_Bool enable /**< should the clocks of the conflict handler be enabled? */
182  );
183 
184 /*
185  * Conflict Analysis
186  */
187 
188 /** return TRUE if conflict analysis is applicable; In case the function return FALSE there is no need to initialize the
189  * conflict analysis since it will not be applied
190  */
191 extern
193  SCIP_SET* set /**< global SCIP settings */
194  );
195 
196 /** creates conflict analysis data for propagation conflicts */
197 extern
199  SCIP_CONFLICT** conflict, /**< pointer to conflict analysis data */
200  BMS_BLKMEM* blkmem, /**< block memory of transformed problem */
201  SCIP_SET* set /**< global SCIP settings */
202  );
203 
204 /** frees conflict analysis data for propagation conflicts */
205 extern
207  SCIP_CONFLICT** conflict, /**< pointer to conflict analysis data */
208  BMS_BLKMEM* blkmem /**< block memory of transformed problem */
209  );
210 
211 /** initializes the propagation conflict analysis by clearing the conflict candidate queue */
212 extern
214  SCIP_CONFLICT* conflict, /**< conflict analysis data */
215  SCIP_SET* set, /**< global SCIP settings */
216  SCIP_STAT* stat, /**< problem statistics */
217  SCIP_PROB* prob, /**< problem data */
218  SCIP_CONFTYPE conftype, /**< type of the conflict */
219  SCIP_Bool usescutoffbound /**< depends the conflict on a cutoff bound? */
220  );
221 
222 /** adds variable's bound to conflict candidate queue */
223 extern
225  SCIP_CONFLICT* conflict, /**< conflict analysis data */
226  BMS_BLKMEM* blkmem, /**< block memory */
227  SCIP_SET* set, /**< global SCIP settings */
228  SCIP_STAT* stat, /**< dynamic problem statistics */
229  SCIP_VAR* var, /**< problem variable */
230  SCIP_BOUNDTYPE boundtype, /**< type of bound that was changed: lower or upper bound */
231  SCIP_BDCHGIDX* bdchgidx /**< bound change index (time stamp of bound change), or NULL for current time */
232  );
233 
234 /** adds variable's bound to conflict candidate queue with the additional information of a relaxed bound */
235 extern
237  SCIP_CONFLICT* conflict, /**< conflict analysis data */
238  BMS_BLKMEM* blkmem, /**< block memory */
239  SCIP_SET* set, /**< global SCIP settings */
240  SCIP_STAT* stat, /**< dynamic problem statistics */
241  SCIP_VAR* var, /**< problem variable */
242  SCIP_BOUNDTYPE boundtype, /**< type of bound that was changed: lower or upper bound */
243  SCIP_BDCHGIDX* bdchgidx, /**< bound change index (time stamp of bound change), or NULL for current time */
244  SCIP_Real relaxedbd /**< the relaxed bound */
245  );
246 
247 /** checks if the given variable is already part of the current conflict set or queued for resolving with the same or
248  * even stronger bound
249  */
250 extern
252  SCIP_CONFLICT* conflict, /**< conflict analysis data */
253  SCIP_VAR* var, /**< problem variable */
254  SCIP_SET* set, /**< global SCIP settings */
255  SCIP_BOUNDTYPE boundtype, /**< type of bound for which the score should be increased */
256  SCIP_BDCHGIDX* bdchgidx, /**< bound change index (time stamp of bound change), or NULL for current time */
257  SCIP_Bool* used /**< pointer to store if the variable is already used */
258  );
259 
260 /** returns the conflict lower bound if the variable is present in the current conflict set; otherwise the global lower
261  * bound
262  */
263 extern
265  SCIP_CONFLICT* conflict, /**< conflict analysis data */
266  SCIP_VAR* var /**< problem variable */
267  );
268 
269 /** returns the conflict upper bound if the variable is present in the current conflict set; otherwise the global upper
270  * bound
271  */
272 extern
274  SCIP_CONFLICT* conflict, /**< conflict analysis data */
275  SCIP_VAR* var /**< problem variable */
276  );
277 
278 /** analyzes conflicting bound changes that were added with calls to SCIPconflictAddBound() and
279  * SCIPconflictAddRelaxedBound(), and on success, calls the conflict handlers to create a conflict constraint out of
280  * the resulting conflict set; updates statistics for propagation conflict analysis
281  */
282 extern
284  SCIP_CONFLICT* conflict, /**< conflict analysis data */
285  BMS_BLKMEM* blkmem, /**< block memory of transformed problem */
286  SCIP_SET* set, /**< global SCIP settings */
287  SCIP_STAT* stat, /**< problem statistics */
288  SCIP_PROB* prob, /**< problem data */
289  SCIP_TREE* tree, /**< branch and bound tree */
290  int validdepth, /**< minimal depth level at which the initial conflict set is valid */
291  SCIP_Bool* success /**< pointer to store whether a conflict constraint was created, or NULL */
292  );
293 
294 /** adds the collected conflict constraints to the corresponding nodes; the best set->conf_maxconss conflict constraints
295  * are added to the node of their validdepth; additionally (if not yet added, and if repropagation is activated), the
296  * conflict constraint that triggers the earliest repropagation is added to the node of its validdepth
297  */
298 extern
300  SCIP_CONFLICT* conflict, /**< conflict analysis data */
301  BMS_BLKMEM* blkmem, /**< block memory of transformed problem */
302  SCIP_SET* set, /**< global SCIP settings */
303  SCIP_STAT* stat, /**< dynamic problem statistics */
304  SCIP_PROB* transprob, /**< transformed problem */
305  SCIP_PROB* origprob, /**< original problem */
306  SCIP_TREE* tree, /**< branch and bound tree */
307  SCIP_REOPT* reopt, /**< reoptimization data structure */
308  SCIP_LP* lp, /**< current LP data */
309  SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
310  SCIP_EVENTQUEUE* eventqueue, /**< event queue */
311  SCIP_CLIQUETABLE* cliquetable /**< clique table data structure */
312  );
313 
314 /** returns the current number of conflict sets in the conflict set storage */
315 extern
317  SCIP_CONFLICT* conflict /**< conflict analysis data */
318  );
319 
320 /** returns the total number of conflict constraints that were added to the problem */
321 extern
323  SCIP_CONFLICT* conflict /**< conflict analysis data */
324  );
325 
326 /** returns the total number of literals in conflict constraints that were added to the problem */
327 extern
329  SCIP_CONFLICT* conflict /**< conflict analysis data */
330  );
331 
332 /** returns the total number of global bound changes applied by the conflict analysis */
333 extern
335  SCIP_CONFLICT* conflict /**< conflict analysis data */
336  );
337 
338 /** returns the total number of conflict constraints that were added globally to the problem */
339 extern
341  SCIP_CONFLICT* conflict /**< conflict analysis data */
342  );
343 
344 /** returns the total number of literals in conflict constraints that were added globally to the problem */
345 extern
347  SCIP_CONFLICT* conflict /**< conflict analysis data */
348  );
349 
350 /** returns the total number of local bound changes applied by the conflict analysis */
351 extern
353  SCIP_CONFLICT* conflict /**< conflict analysis data */
354  );
355 
356 /** returns the total number of conflict constraints that were added locally to the problem */
357 extern
359  SCIP_CONFLICT* conflict /**< conflict analysis data */
360  );
361 
362 /** returns the total number of literals in conflict constraints that were added locally to the problem */
363 extern
365  SCIP_CONFLICT* conflict /**< conflict analysis data */
366  );
367 
368 /** gets time in seconds used for preprocessing global conflict constraint before appliance */
369 extern
371  SCIP_CONFLICT* conflict /**< conflict analysis data */
372  );
373 
374 /** gets time in seconds used for analyzing propagation conflicts */
375 extern
377  SCIP_CONFLICT* conflict /**< conflict analysis data */
378  );
379 
380 /** gets number of calls to propagation conflict analysis */
381 extern
383  SCIP_CONFLICT* conflict /**< conflict analysis data */
384  );
385 
386 /** gets number of calls to propagation conflict analysis that yield at least one conflict constraint */
387 extern
389  SCIP_CONFLICT* conflict /**< conflict analysis data */
390  );
391 
392 /** gets number of conflict constraints detected in propagation conflict analysis */
393 extern
395  SCIP_CONFLICT* conflict /**< conflict analysis data */
396  );
397 
398 /** gets total number of literals in conflict constraints created in propagation conflict analysis */
399 extern
401  SCIP_CONFLICT* conflict /**< conflict analysis data */
402  );
403 
404 /** gets number of reconvergence constraints detected in propagation conflict analysis */
405 extern
407  SCIP_CONFLICT* conflict /**< conflict analysis data */
408  );
409 
410 /** gets total number of literals in reconvergence constraints created in propagation conflict analysis */
411 extern
413  SCIP_CONFLICT* conflict /**< conflict analysis data */
414  );
415 
416 
417 
418 
419 /*
420  * Infeasible LP Conflict Analysis
421  */
422 
423 /** analyzes an infeasible or bound exceeding LP to find out the bound changes on variables that were responsible for the
424  * infeasibility or for exceeding the primal bound;
425  * on success, calls standard conflict analysis with the responsible variables as starting conflict set, thus creating
426  * a conflict constraint out of the resulting conflict set;
427  * updates statistics for infeasible or bound exceeding LP conflict analysis
428  */
429 extern
431  SCIP_CONFLICT* conflict, /**< conflict analysis data */
432  SCIP_CONFLICTSTORE* conflictstore, /**< conflict store */
433  BMS_BLKMEM* blkmem, /**< block memory of transformed problem */
434  SCIP_SET* set, /**< global SCIP settings */
435  SCIP_STAT* stat, /**< problem statistics */
436  SCIP_PROB* transprob, /**< transformed problem */
437  SCIP_PROB* origprob, /**< original problem */
438  SCIP_TREE* tree, /**< branch and bound tree */
439  SCIP_REOPT* reopt, /**< reoptimization data structure */
440  SCIP_LP* lp, /**< LP data */
441  SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
442  SCIP_EVENTQUEUE* eventqueue, /**< event queue */
443  SCIP_CLIQUETABLE* cliquetable, /**< clique table data structure */
444  SCIP_Bool* success /**< pointer to store whether a conflict constraint was created, or NULL */
445  );
446 
447 /** gets time in seconds used for analyzing infeasible LP conflicts */
448 extern
450  SCIP_CONFLICT* conflict /**< conflict analysis data */
451  );
452 
453 /** gets number of calls to infeasible LP conflict analysis */
454 extern
456  SCIP_CONFLICT* conflict /**< conflict analysis data */
457  );
458 
459 /** gets number of calls to infeasible LP conflict analysis that yield at least one conflict constraint */
460 extern
462  SCIP_CONFLICT* conflict /**< conflict analysis data */
463  );
464 
465 /** gets number of conflict constraints detected in infeasible LP conflict analysis */
466 extern
468  SCIP_CONFLICT* conflict /**< conflict analysis data */
469  );
470 
471 /** gets total number of literals in conflict constraints created in infeasible LP conflict analysis */
472 extern
474  SCIP_CONFLICT* conflict /**< conflict analysis data */
475  );
476 
477 /** gets number of reconvergence constraints detected in infeasible LP conflict analysis */
478 extern
480  SCIP_CONFLICT* conflict /**< conflict analysis data */
481  );
482 
483 /** gets total number of literals in reconvergence constraints created in infeasible LP conflict analysis */
484 extern
486  SCIP_CONFLICT* conflict /**< conflict analysis data */
487  );
488 
489 /** gets number of LP iterations in infeasible LP conflict analysis */
490 extern
492  SCIP_CONFLICT* conflict /**< conflict analysis data */
493  );
494 
495 /** gets time in seconds used for analyzing bound exceeding LP conflicts */
496 extern
498  SCIP_CONFLICT* conflict /**< conflict analysis data */
499  );
500 
501 /** gets number of calls to bound exceeding LP conflict analysis */
502 extern
504  SCIP_CONFLICT* conflict /**< conflict analysis data */
505  );
506 
507 /** gets number of calls to bound exceeding LP conflict analysis that yield at least one conflict constraint */
508 extern
510  SCIP_CONFLICT* conflict /**< conflict analysis data */
511  );
512 
513 /** gets number of conflict constraints detected in bound exceeding LP conflict analysis */
514 extern
516  SCIP_CONFLICT* conflict /**< conflict analysis data */
517  );
518 
519 /** gets total number of literals in conflict constraints created in bound exceeding LP conflict analysis */
520 extern
522  SCIP_CONFLICT* conflict /**< conflict analysis data */
523  );
524 
525 /** gets number of reconvergence constraints detected in bound exceeding LP conflict analysis */
526 extern
528  SCIP_CONFLICT* conflict /**< conflict analysis data */
529  );
530 
531 /** gets total number of literals in reconvergence constraints created in bound exceeding LP conflict analysis */
532 extern
534  SCIP_CONFLICT* conflict /**< conflict analysis data */
535  );
536 
537 /** gets number of LP iterations in bound exceeding LP conflict analysis */
538 extern
540  SCIP_CONFLICT* conflict /**< conflict analysis data */
541  );
542 
543 
544 
545 
546 /*
547  * infeasible strong branching conflict analysis
548  */
549 
550 /** analyses infeasible strong branching sub problems for conflicts */
551 extern
553  SCIP_CONFLICT* conflict, /**< conflict analysis data */
554  SCIP_CONFLICTSTORE* conflictstore, /**< conflict store */
555  BMS_BLKMEM* blkmem, /**< block memory buffers */
556  SCIP_SET* set, /**< global SCIP settings */
557  SCIP_STAT* stat, /**< dynamic problem statistics */
558  SCIP_PROB* transprob, /**< transformed problem */
559  SCIP_PROB* origprob, /**< original problem */
560  SCIP_TREE* tree, /**< branch and bound tree */
561  SCIP_REOPT* reopt, /**< reoptimization data structure */
562  SCIP_LP* lp, /**< LP data */
563  SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
564  SCIP_EVENTQUEUE* eventqueue, /**< event queue */
565  SCIP_CLIQUETABLE* cliquetable, /**< clique table data structure */
566  SCIP_COL* col, /**< LP column with at least one infeasible strong branching subproblem */
567  SCIP_Bool* downconflict, /**< pointer to store whether a conflict constraint was created for an
568  * infeasible downwards branch, or NULL */
569  SCIP_Bool* upconflict /**< pointer to store whether a conflict constraint was created for an
570  * infeasible upwards branch, or NULL */
571  );
572 
573 /** gets time in seconds used for analyzing infeasible strong branching conflicts */
574 extern
576  SCIP_CONFLICT* conflict /**< conflict analysis data */
577  );
578 
579 /** gets number of successful calls to infeasible dualray analysis */
580 extern
582  SCIP_CONFLICT* conflict /**< conflict analysis data */
583  );
584 
585 /** gets number of globally valid dualray constraints */
586 extern
588  SCIP_CONFLICT* conflict /**< conflict analysis data */
589  );
590 
591 /** gets average length of infeasible dualrays */
592 extern
594  SCIP_CONFLICT* conflict /**< conflict analysis data */
595  );
596 
597 /** gets number of calls to infeasible strong branching conflict analysis */
598 extern
600  SCIP_CONFLICT* conflict /**< conflict analysis data */
601  );
602 
603 /** gets number of calls to infeasible strong branching conflict analysis that yield at least one conflict constraint */
604 extern
606  SCIP_CONFLICT* conflict /**< conflict analysis data */
607  );
608 
609 /** gets number of conflict constraints detected in infeasible strong branching conflict analysis */
610 extern
612  SCIP_CONFLICT* conflict /**< conflict analysis data */
613  );
614 
615 /** gets total number of literals in conflict constraints created in infeasible strong branching conflict analysis */
616 extern
618  SCIP_CONFLICT* conflict /**< conflict analysis data */
619  );
620 
621 /** gets number of reconvergence constraints detected in infeasible strong branching conflict analysis */
622 extern
624  SCIP_CONFLICT* conflict /**< conflict analysis data */
625  );
626 
627 /** gets total number of literals in reconvergence constraints created in infeasible strong branching conflict analysis */
628 extern
630  SCIP_CONFLICT* conflict /**< conflict analysis data */
631  );
632 
633 /** gets number of LP iterations in infeasible strong branching conflict analysis */
634 extern
636  SCIP_CONFLICT* conflict /**< conflict analysis data */
637  );
638 
639 
640 
641 
642 /*
643  * pseudo solution conflict analysis
644  */
645 
646 /** analyzes a pseudo solution with objective value exceeding the current cutoff to find out the bound changes on
647  * variables that were responsible for the objective value degradation;
648  * on success, calls standard conflict analysis with the responsible variables as starting conflict set, thus creating
649  * a conflict constraint out of the resulting conflict set;
650  * updates statistics for pseudo solution conflict analysis
651  */
652 extern
654  SCIP_CONFLICT* conflict, /**< conflict analysis data */
655  BMS_BLKMEM* blkmem, /**< block memory of transformed problem */
656  SCIP_SET* set, /**< global SCIP settings */
657  SCIP_STAT* stat, /**< problem statistics */
658  SCIP_PROB* transprob, /**< transformed problem */
659  SCIP_PROB* origprob, /**< original problem */
660  SCIP_TREE* tree, /**< branch and bound tree */
661  SCIP_REOPT* reopt, /**< reoptimization data structure */
662  SCIP_LP* lp, /**< LP data */
663  SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
664  SCIP_EVENTQUEUE* eventqueue, /**< event queue */
665  SCIP_CLIQUETABLE* cliquetable, /**< clique table data structure */
666  SCIP_Bool* success /**< pointer to store whether a conflict constraint was created, or NULL */
667  );
668 
669 /** gets time in seconds used for analyzing pseudo solution conflicts */
670 extern
672  SCIP_CONFLICT* conflict /**< conflict analysis data */
673  );
674 
675 /** gets number of calls to pseudo solution conflict analysis */
676 extern
678  SCIP_CONFLICT* conflict /**< conflict analysis data */
679  );
680 
681 /** gets number of calls to pseudo solution conflict analysis that yield at least one conflict constraint */
682 extern
684  SCIP_CONFLICT* conflict /**< conflict analysis data */
685  );
686 
687 /** gets number of conflict constraints detected in pseudo solution conflict analysis */
688 extern
690  SCIP_CONFLICT* conflict /**< conflict analysis data */
691  );
692 
693 /** gets total number of literals in conflict constraints created in pseudo solution conflict analysis */
694 extern
696  SCIP_CONFLICT* conflict /**< conflict analysis data */
697  );
698 
699 /** gets number of reconvergence constraints detected in pseudo solution conflict analysis */
700 extern
702  SCIP_CONFLICT* conflict /**< conflict analysis data */
703  );
704 
705 /** gets total number of literals in reconvergence constraints created in pseudo solution conflict analysis */
706 extern
708  SCIP_CONFLICT* conflict /**< conflict analysis data */
709  );
710 
711 /** enables or disables all clocks of \p conflict, depending on the value of the flag */
712 extern
714  SCIP_CONFLICT* conflict, /**< the conflict analysis data for which all clocks should be enabled or disabled */
715  SCIP_Bool enable /**< should the clocks of the conflict analysis data be enabled? */
716  );
717 
718 #ifdef __cplusplus
719 }
720 #endif
721 
722 #endif
enum SCIP_Result SCIP_RESULT
Definition: type_result.h:52
enum SCIP_BoundType SCIP_BOUNDTYPE
Definition: type_lp.h:50
SCIP_Longint SCIPconflictGetNBoundexceedingLPCalls(SCIP_CONFLICT *conflict)
Definition: conflict.c:7453
SCIP_Longint SCIPconflictGetNPseudoConflictConss(SCIP_CONFLICT *conflict)
Definition: conflict.c:8062
SCIP_Longint SCIPconflictGetNPropReconvergenceLiterals(SCIP_CONFLICT *conflict)
Definition: conflict.c:4478
void SCIPconflicthdlrSetCopy(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_DECL_CONFLICTCOPY((*conflictcopy)))
Definition: conflict.c:648
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_CLIQUETABLE *cliquetable)
Definition: conflict.c:2258
SCIP_Longint SCIPconflictGetNBoundexceedingLPConflictConss(SCIP_CONFLICT *conflict)
Definition: conflict.c:7473
SCIP_Longint SCIPconflictGetNBoundexceedingLPIterations(SCIP_CONFLICT *conflict)
Definition: conflict.c:7513
SCIP_Real SCIPconflictGetGlobalApplTime(SCIP_CONFLICT *conflict)
Definition: conflict.c:4408
SCIP_Longint SCIPconflictGetNLocalChgBds(SCIP_CONFLICT *conflict)
Definition: conflict.c:2527
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)
Definition: conflict.c:3162
SCIP_Longint SCIPconflictGetNInfeasibleLPReconvergenceLiterals(SCIP_CONFLICT *conflict)
Definition: conflict.c:7423
int SCIPconflictGetNConflicts(SCIP_CONFLICT *conflict)
Definition: conflict.c:2467
SCIP_RETCODE SCIPconflicthdlrExitsol(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_SET *set)
Definition: conflict.c:555
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)
Definition: conflict.c:579
SCIP_Real SCIPconflictGetPseudoTime(SCIP_CONFLICT *conflict)
Definition: conflict.c:8032
SCIP_Longint SCIPconflictGetNPropReconvergenceConss(SCIP_CONFLICT *conflict)
Definition: conflict.c:4468
SCIP_RETCODE SCIPconflictInit(SCIP_CONFLICT *conflict, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_CONFTYPE conftype, SCIP_Bool usescutoffbound)
Definition: conflict.c:2744
SCIP_Longint SCIPconflictGetNPropCalls(SCIP_CONFLICT *conflict)
Definition: conflict.c:4428
SCIP_Longint SCIPconflictGetNPseudoSuccess(SCIP_CONFLICT *conflict)
Definition: conflict.c:8052
enum SCIP_Retcode SCIP_RETCODE
Definition: type_retcode.h:53
type definitions for global SCIP settings
SCIP_Longint SCIPconflictGetNAppliedLocalConss(SCIP_CONFLICT *conflict)
Definition: conflict.c:2537
SCIP_RETCODE SCIPconflicthdlrFree(SCIP_CONFLICTHDLR **conflicthdlr, SCIP_SET *set)
Definition: conflict.c:436
SCIP_Longint SCIPconflictGetNStrongbranchConflictLiterals(SCIP_CONFLICT *conflict)
Definition: conflict.c:7835
void SCIPconflicthdlrSetFree(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_DECL_CONFLICTFREE((*conflictfree)))
Definition: conflict.c:659
SCIP_Longint SCIPconflictGetNBoundexceedingLPReconvergenceLiterals(SCIP_CONFLICT *conflict)
Definition: conflict.c:7503
SCIP_Longint SCIPconflictGetNBoundexceedingLPConflictLiterals(SCIP_CONFLICT *conflict)
Definition: conflict.c:7483
SCIP_RETCODE SCIPconflictFree(SCIP_CONFLICT **conflict, BMS_BLKMEM *blkmem)
Definition: conflict.c:2699
SCIP_Longint SCIPconflictGetNPropSuccess(SCIP_CONFLICT *conflict)
Definition: conflict.c:4438
type definitions for return codes for SCIP methods
SCIP_Real SCIPconflictGetPropTime(SCIP_CONFLICT *conflict)
Definition: conflict.c:4418
#define SCIP_DECL_CONFLICTEXIT(x)
Definition: type_conflict.h:85
type definitions for problem statistics
void SCIPconflicthdlrSetInit(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_DECL_CONFLICTINIT((*conflictinit)))
Definition: conflict.c:670
SCIP_RETCODE SCIPconflicthdlrCopyInclude(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_SET *set)
Definition: conflict.c:364
void SCIPconflicthdlrSetExit(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_DECL_CONFLICTEXIT((*conflictexit)))
Definition: conflict.c:681
type definitions for LP management
SCIP_Longint SCIPconflictGetNAppliedLocalLiterals(SCIP_CONFLICT *conflict)
Definition: conflict.c:2547
SCIP_RETCODE SCIPconflicthdlrExit(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_SET *set)
Definition: conflict.c:500
#define SCIP_DECL_CONFLICTINITSOL(x)
Definition: type_conflict.h:96
SCIP_Longint SCIPconflictGetNPseudoReconvergenceLiterals(SCIP_CONFLICT *conflict)
Definition: conflict.c:8092
#define SCIP_DECL_CONFLICTEXEC(x)
SCIP_Longint SCIPconflictGetNPseudoCalls(SCIP_CONFLICT *conflict)
Definition: conflict.c:8042
SCIP_Longint SCIPconflictGetNAppliedGlobalConss(SCIP_CONFLICT *conflict)
Definition: conflict.c:2507
SCIP_Longint SCIPconflictGetNDualrayInfGlobal(SCIP_CONFLICT *conflict)
Definition: conflict.c:7785
SCIP_Longint SCIPconflictGetNStrongbranchIterations(SCIP_CONFLICT *conflict)
Definition: conflict.c:7865
SCIP_Longint SCIPconflictGetNBoundexceedingLPReconvergenceConss(SCIP_CONFLICT *conflict)
Definition: conflict.c:7493
struct SCIP_ConflicthdlrData SCIP_CONFLICTHDLRDATA
Definition: type_conflict.h:40
internal methods for storing conflicts
type definitions for problem variables
#define SCIP_DECL_CONFLICTCOPY(x)
Definition: type_conflict.h:61
SCIP_Longint SCIPconflictGetNPseudoConflictLiterals(SCIP_CONFLICT *conflict)
Definition: conflict.c:8072
void SCIPconflicthdlrEnableOrDisableClocks(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_Bool enable)
Definition: conflict.c:768
type definitions for conflict analysis
SCIP_Longint SCIPconflictGetNStrongbranchReconvergenceLiterals(SCIP_CONFLICT *conflict)
Definition: conflict.c:7855
SCIP_Longint SCIPconflictGetNInfeasibleLPConflictConss(SCIP_CONFLICT *conflict)
Definition: conflict.c:7393
#define SCIP_Bool
Definition: def.h:61
SCIP_Longint SCIPconflictGetNPseudoReconvergenceConss(SCIP_CONFLICT *conflict)
Definition: conflict.c:8082
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_CLIQUETABLE *cliquetable, SCIP_COL *col, SCIP_Bool *downconflict, SCIP_Bool *upconflict)
Definition: conflict.c:7530
SCIP_Longint SCIPconflictGetNDualrayInfSuccess(SCIP_CONFLICT *conflict)
Definition: conflict.c:7775
SCIP_Real SCIPconflictGetVarLb(SCIP_CONFLICT *conflict, SCIP_VAR *var)
Definition: conflict.c:3386
SCIP_Real SCIPconflictGetBoundexceedingLPTime(SCIP_CONFLICT *conflict)
Definition: conflict.c:7443
SCIP_Longint SCIPconflictGetNBoundexceedingLPSuccess(SCIP_CONFLICT *conflict)
Definition: conflict.c:7463
type definitions for branch and bound tree
SCIP_Real SCIPconflictGetStrongbranchTime(SCIP_CONFLICT *conflict)
Definition: conflict.c:7765
type definitions for storing and manipulating the main problem
SCIP_RETCODE SCIPconflictIsVarUsed(SCIP_CONFLICT *conflict, SCIP_VAR *var, SCIP_SET *set, SCIP_BOUNDTYPE boundtype, SCIP_BDCHGIDX *bdchgidx, SCIP_Bool *used)
Definition: conflict.c:3326
SCIP_RETCODE SCIPconflictAddBound(SCIP_CONFLICT *conflict, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_VAR *var, SCIP_BOUNDTYPE boundtype, SCIP_BDCHGIDX *bdchgidx)
Definition: conflict.c:3101
SCIP_Longint SCIPconflictGetNAppliedLiterals(SCIP_CONFLICT *conflict)
Definition: conflict.c:2487
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_CLIQUETABLE *cliquetable, SCIP_Bool *success)
Definition: conflict.c:7887
SCIP_Real SCIPconflictGetInfeasibleLPTime(SCIP_CONFLICT *conflict)
Definition: conflict.c:7363
void SCIPconflicthdlrSetInitsol(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_DECL_CONFLICTINITSOL((*conflictinitsol)))
Definition: conflict.c:692
SCIP_Longint SCIPconflictGetNInfeasibleLPIterations(SCIP_CONFLICT *conflict)
Definition: conflict.c:7433
SCIP_Longint SCIPconflictGetNDualrayInfeasibleNonzeros(SCIP_CONFLICT *conflict)
Definition: conflict.c:7795
public methods for conflict analysis handlers
void SCIPconflicthdlrSetExitsol(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_DECL_CONFLICTEXITSOL((*conflictexitsol)))
Definition: conflict.c:703
#define SCIP_Real
Definition: def.h:135
enum SCIP_ConflictType SCIP_CONFTYPE
Definition: type_conflict.h:53
SCIP_Longint SCIPconflictGetNAppliedConss(SCIP_CONFLICT *conflict)
Definition: conflict.c:2477
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_CLIQUETABLE *cliquetable, SCIP_Bool *success)
Definition: conflict.c:7220
SCIP_Longint SCIPconflictGetNStrongbranchConflictConss(SCIP_CONFLICT *conflict)
Definition: conflict.c:7825
#define SCIP_DECL_CONFLICTINIT(x)
Definition: type_conflict.h:77
SCIP_RETCODE SCIPconflicthdlrInit(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_SET *set)
Definition: conflict.c:463
SCIP_Longint SCIPconflictGetNInfeasibleLPSuccess(SCIP_CONFLICT *conflict)
Definition: conflict.c:7383
#define SCIP_Longint
Definition: def.h:120
SCIP_Longint SCIPconflictGetNAppliedGlobalLiterals(SCIP_CONFLICT *conflict)
Definition: conflict.c:2517
SCIP_Longint SCIPconflictGetNStrongbranchSuccess(SCIP_CONFLICT *conflict)
Definition: conflict.c:7815
SCIP_Longint SCIPconflictGetNStrongbranchReconvergenceConss(SCIP_CONFLICT *conflict)
Definition: conflict.c:7845
SCIP_RETCODE SCIPconflictCreate(SCIP_CONFLICT **conflict, BMS_BLKMEM *blkmem, SCIP_SET *set)
Definition: conflict.c:2618
SCIP_Longint SCIPconflictGetNInfeasibleLPReconvergenceConss(SCIP_CONFLICT *conflict)
Definition: conflict.c:7413
SCIP_Longint SCIPconflictGetNStrongbranchCalls(SCIP_CONFLICT *conflict)
Definition: conflict.c:7805
SCIP_Longint SCIPconflictGetNPropConflictConss(SCIP_CONFLICT *conflict)
Definition: conflict.c:4448
SCIP_Real SCIPconflictGetVarUb(SCIP_CONFLICT *conflict, SCIP_VAR *var)
Definition: conflict.c:3403
common defines and data types used in all packages of SCIP
void SCIPconflicthdlrSetPriority(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_SET *set, int priority)
Definition: conflict.c:744
SCIP_Longint SCIPconflictGetNInfeasibleLPCalls(SCIP_CONFLICT *conflict)
Definition: conflict.c:7373
struct BMS_BlkMem BMS_BLKMEM
Definition: memory.h:392
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)
Definition: conflict.c:4350
#define SCIP_DECL_CONFLICTFREE(x)
Definition: type_conflict.h:69
SCIP_Bool SCIPconflictApplicable(SCIP_SET *set)
Definition: conflict.c:2602
SCIP_Longint SCIPconflictGetNPropConflictLiterals(SCIP_CONFLICT *conflict)
Definition: conflict.c:4458
void SCIPconflictEnableOrDisableClocks(SCIP_CONFLICT *conflict, SCIP_Bool enable)
Definition: conflict.c:8103
SCIP_Longint SCIPconflictGetNGlobalChgBds(SCIP_CONFLICT *conflict)
Definition: conflict.c:2497
SCIP_RETCODE SCIPconflicthdlrInitsol(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_SET *set)
Definition: conflict.c:531
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)
Definition: conflict.c:383
#define SCIP_DECL_CONFLICTEXITSOL(x)
SCIP_Longint SCIPconflictGetNInfeasibleLPConflictLiterals(SCIP_CONFLICT *conflict)
Definition: conflict.c:7403
memory allocation routines