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-2019 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 visit 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 "blockmemshell/memory.h"
29 #include "scip/def.h"
30 #include "scip/type_branch.h"
31 #include "scip/type_conflict.h"
33 #include "scip/type_event.h"
34 #include "scip/type_implics.h"
35 #include "scip/type_lp.h"
36 #include "scip/type_message.h"
37 #include "scip/type_prob.h"
38 #include "scip/type_reopt.h"
39 #include "scip/type_result.h"
40 #include "scip/type_retcode.h"
41 #include "scip/type_scip.h"
42 #include "scip/type_set.h"
43 #include "scip/type_stat.h"
44 #include "scip/type_tree.h"
45 #include "scip/type_var.h"
46 
47 #ifdef __cplusplus
48 extern "C" {
49 #endif
50 
51 /*
52  * Conflict Handler
53  */
54 
55 /** copies the given conflict handler to a new scip */
56 extern
58  SCIP_CONFLICTHDLR* conflicthdlr, /**< conflict handler */
59  SCIP_SET* set /**< SCIP_SET of SCIP to copy to */
60  );
61 
62 /** creates a conflict handler */
63 extern
65  SCIP_CONFLICTHDLR** conflicthdlr, /**< pointer to conflict handler data structure */
66  SCIP_SET* set, /**< global SCIP settings */
67  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
68  BMS_BLKMEM* blkmem, /**< block memory for parameter settings */
69  const char* name, /**< name of conflict handler */
70  const char* desc, /**< description of conflict handler */
71  int priority, /**< priority of the conflict handler */
72  SCIP_DECL_CONFLICTCOPY((*conflictcopy)), /**< copy method of conflict handler or NULL if you don't want to copy your plugin into sub-SCIPs */
73  SCIP_DECL_CONFLICTFREE((*conflictfree)), /**< destructor of conflict handler */
74  SCIP_DECL_CONFLICTINIT((*conflictinit)), /**< initialize conflict handler */
75  SCIP_DECL_CONFLICTEXIT((*conflictexit)), /**< deinitialize conflict handler */
76  SCIP_DECL_CONFLICTINITSOL((*conflictinitsol)),/**< solving process initialization method of conflict handler */
77  SCIP_DECL_CONFLICTEXITSOL((*conflictexitsol)),/**< solving process deinitialization method of conflict handler */
78  SCIP_DECL_CONFLICTEXEC((*conflictexec)), /**< conflict processing method of conflict handler */
79  SCIP_CONFLICTHDLRDATA* conflicthdlrdata /**< conflict handler data */
80  );
81 
82 /** calls destructor and frees memory of conflict handler */
83 extern
85  SCIP_CONFLICTHDLR** conflicthdlr, /**< pointer to conflict handler data structure */
86  SCIP_SET* set /**< global SCIP settings */
87  );
88 
89 /** calls init method of conflict handler */
90 extern
92  SCIP_CONFLICTHDLR* conflicthdlr, /**< conflict handler */
93  SCIP_SET* set /**< global SCIP settings */
94  );
95 
96 /** calls exit method of conflict handler */
97 extern
99  SCIP_CONFLICTHDLR* conflicthdlr, /**< conflict handler */
100  SCIP_SET* set /**< global SCIP settings */
101  );
102 
103 /** informs conflict handler that the branch and bound process is being started */
104 extern
106  SCIP_CONFLICTHDLR* conflicthdlr, /**< conflict handler */
107  SCIP_SET* set /**< global SCIP settings */
108  );
109 
110 /** informs conflict handler that the branch and bound process data is being freed */
111 extern
113  SCIP_CONFLICTHDLR* conflicthdlr, /**< conflict handler */
114  SCIP_SET* set /**< global SCIP settings */
115  );
116 
117 /** calls execution method of conflict handler */
118 extern
120  SCIP_CONFLICTHDLR* conflicthdlr, /**< conflict handler */
121  SCIP_SET* set, /**< global SCIP settings */
122  SCIP_NODE* node, /**< node to add conflict constraint to */
123  SCIP_NODE* validnode, /**< node at which the constraint is valid */
124  SCIP_BDCHGINFO** bdchginfos, /**< bound change resembling the conflict set */
125  SCIP_Real* relaxedbds, /**< array with relaxed bounds which are efficient to create a valid conflict */
126  int nbdchginfos, /**< number of bound changes in the conflict set */
127  SCIP_CONFTYPE conftype, /**< type of the conflict */
128  SCIP_Bool usescutoffbound, /**< depends the conflict on the cutoff bound? */
129  SCIP_Bool resolved, /**< was the conflict set already used to create a constraint? */
130  SCIP_RESULT* result /**< pointer to store the result of the callback method */
131  );
132 
133 /** sets priority of conflict handler */
134 extern
136  SCIP_CONFLICTHDLR* conflicthdlr, /**< conflict handler */
137  SCIP_SET* set, /**< global SCIP settings */
138  int priority /**< new priority of the conflict handler */
139  );
140 
141 /** set copy method of conflict handler */
142 extern
144  SCIP_CONFLICTHDLR* conflicthdlr, /**< conflict handler */
145  SCIP_DECL_CONFLICTCOPY((*conflictcopy)) /**< copy method of the conflict handler */
146  );
147 
148 /** set destructor of conflict handler */
149 extern
151  SCIP_CONFLICTHDLR* conflicthdlr, /**< conflict handler */
152  SCIP_DECL_CONFLICTFREE((*conflictfree)) /**< destructor of conflict handler */
153  );
154 
155 /** set initialization method of conflict handler */
156 extern
158  SCIP_CONFLICTHDLR* conflicthdlr, /**< conflict handler */
159  SCIP_DECL_CONFLICTINIT((*conflictinit)) /**< initialization method conflict handler */
160  );
161 
162 /** set deinitialization method of conflict handler */
163 extern
165  SCIP_CONFLICTHDLR* conflicthdlr, /**< conflict handler */
166  SCIP_DECL_CONFLICTEXIT((*conflictexit)) /**< deinitialization method conflict handler */
167  );
168 
169 /** set solving process initialization method of conflict handler */
170 extern
172  SCIP_CONFLICTHDLR* conflicthdlr, /**< conflict handler */
173  SCIP_DECL_CONFLICTINITSOL((*conflictinitsol))/**< solving process initialization method of conflict handler */
174  );
175 
176 /** set solving process deinitialization method of conflict handler */
177 extern
179  SCIP_CONFLICTHDLR* conflicthdlr, /**< conflict handler */
180  SCIP_DECL_CONFLICTEXITSOL((*conflictexitsol))/**< solving process deinitialization method of conflict handler */
181  );
182 
183 /** enables or disables all clocks of \p conflicthdlr, depending on the value of the flag */
184 extern
186  SCIP_CONFLICTHDLR* conflicthdlr, /**< the conflict handler for which all clocks should be enabled or disabled */
187  SCIP_Bool enable /**< should the clocks of the conflict handler be enabled? */
188  );
189 
190 /*
191  * Conflict Analysis
192  */
193 
194 /** return TRUE if conflict analysis is applicable; In case the function return FALSE there is no need to initialize the
195  * conflict analysis since it will not be applied
196  */
197 extern
199  SCIP_SET* set /**< global SCIP settings */
200  );
201 
202 /** creates conflict analysis data for propagation conflicts */
203 extern
205  SCIP_CONFLICT** conflict, /**< pointer to conflict analysis data */
206  BMS_BLKMEM* blkmem, /**< block memory of transformed problem */
207  SCIP_SET* set /**< global SCIP settings */
208  );
209 
210 /** frees conflict analysis data for propagation conflicts */
211 extern
213  SCIP_CONFLICT** conflict, /**< pointer to conflict analysis data */
214  BMS_BLKMEM* blkmem /**< block memory of transformed problem */
215  );
216 
217 /** initializes the propagation conflict analysis by clearing the conflict candidate queue */
218 extern
220  SCIP_CONFLICT* conflict, /**< conflict analysis data */
221  SCIP_SET* set, /**< global SCIP settings */
222  SCIP_STAT* stat, /**< problem statistics */
223  SCIP_PROB* prob, /**< problem data */
224  SCIP_CONFTYPE conftype, /**< type of the conflict */
225  SCIP_Bool usescutoffbound /**< depends the conflict on a cutoff bound? */
226  );
227 
228 /** adds variable's bound to conflict candidate queue */
229 extern
231  SCIP_CONFLICT* conflict, /**< conflict analysis data */
232  BMS_BLKMEM* blkmem, /**< block memory */
233  SCIP_SET* set, /**< global SCIP settings */
234  SCIP_STAT* stat, /**< dynamic problem statistics */
235  SCIP_VAR* var, /**< problem variable */
236  SCIP_BOUNDTYPE boundtype, /**< type of bound that was changed: lower or upper bound */
237  SCIP_BDCHGIDX* bdchgidx /**< bound change index (time stamp of bound change), or NULL for current time */
238  );
239 
240 /** adds variable's bound to conflict candidate queue with the additional information of a relaxed bound */
241 extern
243  SCIP_CONFLICT* conflict, /**< conflict analysis data */
244  BMS_BLKMEM* blkmem, /**< block memory */
245  SCIP_SET* set, /**< global SCIP settings */
246  SCIP_STAT* stat, /**< dynamic problem statistics */
247  SCIP_VAR* var, /**< problem variable */
248  SCIP_BOUNDTYPE boundtype, /**< type of bound that was changed: lower or upper bound */
249  SCIP_BDCHGIDX* bdchgidx, /**< bound change index (time stamp of bound change), or NULL for current time */
250  SCIP_Real relaxedbd /**< the relaxed bound */
251  );
252 
253 /** checks if the given variable is already part of the current conflict set or queued for resolving with the same or
254  * even stronger bound
255  */
256 extern
258  SCIP_CONFLICT* conflict, /**< conflict analysis data */
259  SCIP_VAR* var, /**< problem variable */
260  SCIP_SET* set, /**< global SCIP settings */
261  SCIP_BOUNDTYPE boundtype, /**< type of bound for which the score should be increased */
262  SCIP_BDCHGIDX* bdchgidx, /**< bound change index (time stamp of bound change), or NULL for current time */
263  SCIP_Bool* used /**< pointer to store if the variable is already used */
264  );
265 
266 /** returns the conflict lower bound if the variable is present in the current conflict set; otherwise the global lower
267  * bound
268  */
269 extern
271  SCIP_CONFLICT* conflict, /**< conflict analysis data */
272  SCIP_VAR* var /**< problem variable */
273  );
274 
275 /** returns the conflict upper bound if the variable is present in the current conflict set; otherwise the global upper
276  * bound
277  */
278 extern
280  SCIP_CONFLICT* conflict, /**< conflict analysis data */
281  SCIP_VAR* var /**< problem variable */
282  );
283 
284 /** analyzes conflicting bound changes that were added with calls to SCIPconflictAddBound() and
285  * SCIPconflictAddRelaxedBound(), and on success, calls the conflict handlers to create a conflict constraint out of
286  * the resulting conflict set; updates statistics for propagation conflict analysis
287  */
288 extern
290  SCIP_CONFLICT* conflict, /**< conflict analysis data */
291  BMS_BLKMEM* blkmem, /**< block memory of transformed problem */
292  SCIP_SET* set, /**< global SCIP settings */
293  SCIP_STAT* stat, /**< problem statistics */
294  SCIP_PROB* prob, /**< problem data */
295  SCIP_TREE* tree, /**< branch and bound tree */
296  int validdepth, /**< minimal depth level at which the initial conflict set is valid */
297  SCIP_Bool* success /**< pointer to store whether a conflict constraint was created, or NULL */
298  );
299 
300 /** adds the collected conflict constraints to the corresponding nodes; the best set->conf_maxconss conflict constraints
301  * are added to the node of their validdepth; additionally (if not yet added, and if repropagation is activated), the
302  * conflict constraint that triggers the earliest repropagation is added to the node of its validdepth
303  */
304 extern
306  SCIP_CONFLICT* conflict, /**< conflict analysis data */
307  BMS_BLKMEM* blkmem, /**< block memory of transformed problem */
308  SCIP_SET* set, /**< global SCIP settings */
309  SCIP_STAT* stat, /**< dynamic problem statistics */
310  SCIP_PROB* transprob, /**< transformed problem */
311  SCIP_PROB* origprob, /**< original problem */
312  SCIP_TREE* tree, /**< branch and bound tree */
313  SCIP_REOPT* reopt, /**< reoptimization data structure */
314  SCIP_LP* lp, /**< current LP data */
315  SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
316  SCIP_EVENTQUEUE* eventqueue, /**< event queue */
317  SCIP_CLIQUETABLE* cliquetable /**< clique table data structure */
318  );
319 
320 /** returns the current number of conflict sets in the conflict set storage */
321 extern
323  SCIP_CONFLICT* conflict /**< conflict analysis data */
324  );
325 
326 /** returns the total number of 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 literals in conflict constraints that were added to the problem */
333 extern
335  SCIP_CONFLICT* conflict /**< conflict analysis data */
336  );
337 
338 /** returns the total number of global bound changes applied by the conflict analysis */
339 extern
341  SCIP_CONFLICT* conflict /**< conflict analysis data */
342  );
343 
344 /** returns the total number of 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 literals in conflict constraints that were added globally to the problem */
351 extern
353  SCIP_CONFLICT* conflict /**< conflict analysis data */
354  );
355 
356 /** returns the total number of local bound changes applied by the conflict analysis */
357 extern
359  SCIP_CONFLICT* conflict /**< conflict analysis data */
360  );
361 
362 /** returns the total number of conflict constraints that were added locally to the problem */
363 extern
365  SCIP_CONFLICT* conflict /**< conflict analysis data */
366  );
367 
368 /** returns the total number of literals in conflict constraints that were added locally to the problem */
369 extern
371  SCIP_CONFLICT* conflict /**< conflict analysis data */
372  );
373 
374 /** gets time in seconds used for preprocessing global conflict constraint before appliance */
375 extern
377  SCIP_CONFLICT* conflict /**< conflict analysis data */
378  );
379 
380 /** gets time in seconds used for analyzing propagation conflicts */
381 extern
383  SCIP_CONFLICT* conflict /**< conflict analysis data */
384  );
385 
386 /** gets number of calls to propagation conflict analysis */
387 extern
389  SCIP_CONFLICT* conflict /**< conflict analysis data */
390  );
391 
392 /** gets number of calls to propagation conflict analysis that yield at least one conflict constraint */
393 extern
395  SCIP_CONFLICT* conflict /**< conflict analysis data */
396  );
397 
398 /** gets number of conflict constraints detected in propagation conflict analysis */
399 extern
401  SCIP_CONFLICT* conflict /**< conflict analysis data */
402  );
403 
404 /** gets total number of literals in conflict constraints created in propagation conflict analysis */
405 extern
407  SCIP_CONFLICT* conflict /**< conflict analysis data */
408  );
409 
410 /** gets number of reconvergence constraints detected in propagation conflict analysis */
411 extern
413  SCIP_CONFLICT* conflict /**< conflict analysis data */
414  );
415 
416 /** gets total number of literals in reconvergence constraints created in propagation conflict analysis */
417 extern
419  SCIP_CONFLICT* conflict /**< conflict analysis data */
420  );
421 
422 
423 
424 
425 /*
426  * Infeasible LP Conflict Analysis
427  */
428 
429 /** analyzes an infeasible or bound exceeding LP to find out the bound changes on variables that were responsible for the
430  * infeasibility or for exceeding the primal bound;
431  * on success, calls standard conflict analysis with the responsible variables as starting conflict set, thus creating
432  * a conflict constraint out of the resulting conflict set;
433  * updates statistics for infeasible or bound exceeding LP conflict analysis
434  */
435 extern
437  SCIP_CONFLICT* conflict, /**< conflict analysis data */
438  SCIP_CONFLICTSTORE* conflictstore, /**< conflict store */
439  BMS_BLKMEM* blkmem, /**< block memory of transformed problem */
440  SCIP_SET* set, /**< global SCIP settings */
441  SCIP_STAT* stat, /**< problem statistics */
442  SCIP_PROB* transprob, /**< transformed problem */
443  SCIP_PROB* origprob, /**< original problem */
444  SCIP_TREE* tree, /**< branch and bound tree */
445  SCIP_REOPT* reopt, /**< reoptimization data structure */
446  SCIP_LP* lp, /**< LP data */
447  SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
448  SCIP_EVENTQUEUE* eventqueue, /**< event queue */
449  SCIP_CLIQUETABLE* cliquetable, /**< clique table data structure */
450  SCIP_Bool* success /**< pointer to store whether a conflict constraint was created, or NULL */
451  );
452 
453 /** gets time in seconds used for analyzing infeasible LP conflicts */
454 extern
456  SCIP_CONFLICT* conflict /**< conflict analysis data */
457  );
458 
459 /** gets number of calls to infeasible LP conflict analysis */
460 extern
462  SCIP_CONFLICT* conflict /**< conflict analysis data */
463  );
464 
465 /** gets number of calls to infeasible LP conflict analysis that yield at least one conflict constraint */
466 extern
468  SCIP_CONFLICT* conflict /**< conflict analysis data */
469  );
470 
471 /** gets number of conflict constraints detected in infeasible LP conflict analysis */
472 extern
474  SCIP_CONFLICT* conflict /**< conflict analysis data */
475  );
476 
477 /** gets total number of literals in conflict constraints created in infeasible LP conflict analysis */
478 extern
480  SCIP_CONFLICT* conflict /**< conflict analysis data */
481  );
482 
483 /** gets number of reconvergence constraints detected in infeasible LP conflict analysis */
484 extern
486  SCIP_CONFLICT* conflict /**< conflict analysis data */
487  );
488 
489 /** gets total number of literals in reconvergence constraints created in infeasible LP conflict analysis */
490 extern
492  SCIP_CONFLICT* conflict /**< conflict analysis data */
493  );
494 
495 /** gets number of LP iterations in infeasible LP conflict analysis */
496 extern
498  SCIP_CONFLICT* conflict /**< conflict analysis data */
499  );
500 
501 /** gets time in seconds used for analyzing bound exceeding LP conflicts */
502 extern
504  SCIP_CONFLICT* conflict /**< conflict analysis data */
505  );
506 
507 /** gets number of calls to bound exceeding LP conflict analysis */
508 extern
510  SCIP_CONFLICT* conflict /**< conflict analysis data */
511  );
512 
513 /** gets number of calls to bound exceeding LP conflict analysis that yield at least one conflict constraint */
514 extern
516  SCIP_CONFLICT* conflict /**< conflict analysis data */
517  );
518 
519 /** gets number of conflict constraints detected in bound exceeding LP conflict analysis */
520 extern
522  SCIP_CONFLICT* conflict /**< conflict analysis data */
523  );
524 
525 /** gets total number of literals in conflict constraints created in bound exceeding LP conflict analysis */
526 extern
528  SCIP_CONFLICT* conflict /**< conflict analysis data */
529  );
530 
531 /** gets number of reconvergence constraints detected in bound exceeding LP conflict analysis */
532 extern
534  SCIP_CONFLICT* conflict /**< conflict analysis data */
535  );
536 
537 /** gets total number of literals in reconvergence constraints created in bound exceeding LP conflict analysis */
538 extern
540  SCIP_CONFLICT* conflict /**< conflict analysis data */
541  );
542 
543 /** gets number of LP iterations in bound exceeding LP conflict analysis */
544 extern
546  SCIP_CONFLICT* conflict /**< conflict analysis data */
547  );
548 
549 
550 
551 
552 /*
553  * infeasible strong branching conflict analysis
554  */
555 
556 /** analyses infeasible strong branching sub problems for conflicts */
557 extern
559  SCIP_CONFLICT* conflict, /**< conflict analysis data */
560  SCIP_CONFLICTSTORE* conflictstore, /**< conflict store */
561  BMS_BLKMEM* blkmem, /**< block memory buffers */
562  SCIP_SET* set, /**< global SCIP settings */
563  SCIP_STAT* stat, /**< dynamic problem statistics */
564  SCIP_PROB* transprob, /**< transformed problem */
565  SCIP_PROB* origprob, /**< original problem */
566  SCIP_TREE* tree, /**< branch and bound tree */
567  SCIP_REOPT* reopt, /**< reoptimization data structure */
568  SCIP_LP* lp, /**< LP data */
569  SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
570  SCIP_EVENTQUEUE* eventqueue, /**< event queue */
571  SCIP_CLIQUETABLE* cliquetable, /**< clique table data structure */
572  SCIP_COL* col, /**< LP column with at least one infeasible strong branching subproblem */
573  SCIP_Bool* downconflict, /**< pointer to store whether a conflict constraint was created for an
574  * infeasible downwards branch, or NULL */
575  SCIP_Bool* upconflict /**< pointer to store whether a conflict constraint was created for an
576  * infeasible upwards branch, or NULL */
577  );
578 
579 /** gets time in seconds used for analyzing infeasible strong branching conflicts */
580 extern
582  SCIP_CONFLICT* conflict /**< conflict analysis data */
583  );
584 
585 /** gets number of successful calls to infeasible dualray analysis */
586 extern
588  SCIP_CONFLICT* conflict /**< conflict analysis data */
589  );
590 
591 /** gets number of globally valid dualray constraints */
592 extern
594  SCIP_CONFLICT* conflict /**< conflict analysis data */
595  );
596 
597 /** gets average length of infeasible dualrays */
598 extern
600  SCIP_CONFLICT* conflict /**< conflict analysis data */
601  );
602 
603 /** gets number of successfully analyzed dual proofs of boundexceeding LPs */
604 extern
606  SCIP_CONFLICT* conflict /**< conflict analysis data */
607  );
608 
609 /** gets number of globally applied dual proofs of boundexceeding LPs */
610 extern
612  SCIP_CONFLICT* conflict /**< conflict analysis data */
613  );
614 
615 /** gets average length of dual proofs of boundexceeding LPs */
616 extern
618  SCIP_CONFLICT* conflict /**< conflict analysis data */
619  );
620 
621 /** gets number of calls to infeasible strong branching conflict analysis */
622 extern
624  SCIP_CONFLICT* conflict /**< conflict analysis data */
625  );
626 
627 /** gets number of calls to infeasible strong branching conflict analysis that yield at least one conflict constraint */
628 extern
630  SCIP_CONFLICT* conflict /**< conflict analysis data */
631  );
632 
633 /** gets number of conflict constraints detected in infeasible strong branching conflict analysis */
634 extern
636  SCIP_CONFLICT* conflict /**< conflict analysis data */
637  );
638 
639 /** gets total number of literals in conflict constraints created in infeasible strong branching conflict analysis */
640 extern
642  SCIP_CONFLICT* conflict /**< conflict analysis data */
643  );
644 
645 /** gets number of reconvergence constraints detected in infeasible strong branching conflict analysis */
646 extern
648  SCIP_CONFLICT* conflict /**< conflict analysis data */
649  );
650 
651 /** gets total number of literals in reconvergence constraints created in infeasible strong branching conflict analysis */
652 extern
654  SCIP_CONFLICT* conflict /**< conflict analysis data */
655  );
656 
657 /** gets number of LP iterations in infeasible strong branching conflict analysis */
658 extern
660  SCIP_CONFLICT* conflict /**< conflict analysis data */
661  );
662 
663 
664 
665 
666 /*
667  * pseudo solution conflict analysis
668  */
669 
670 /** analyzes a pseudo solution with objective value exceeding the current cutoff to find out the bound changes on
671  * variables that were responsible for the objective value degradation;
672  * on success, calls standard conflict analysis with the responsible variables as starting conflict set, thus creating
673  * a conflict constraint out of the resulting conflict set;
674  * updates statistics for pseudo solution conflict analysis
675  */
676 extern
678  SCIP_CONFLICT* conflict, /**< conflict analysis data */
679  BMS_BLKMEM* blkmem, /**< block memory of transformed problem */
680  SCIP_SET* set, /**< global SCIP settings */
681  SCIP_STAT* stat, /**< problem statistics */
682  SCIP_PROB* transprob, /**< transformed problem */
683  SCIP_PROB* origprob, /**< original problem */
684  SCIP_TREE* tree, /**< branch and bound tree */
685  SCIP_REOPT* reopt, /**< reoptimization data structure */
686  SCIP_LP* lp, /**< LP data */
687  SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
688  SCIP_EVENTQUEUE* eventqueue, /**< event queue */
689  SCIP_CLIQUETABLE* cliquetable, /**< clique table data structure */
690  SCIP_Bool* success /**< pointer to store whether a conflict constraint was created, or NULL */
691  );
692 
693 /** gets time in seconds used for analyzing pseudo solution conflicts */
694 extern
696  SCIP_CONFLICT* conflict /**< conflict analysis data */
697  );
698 
699 /** gets number of calls to pseudo solution conflict analysis */
700 extern
702  SCIP_CONFLICT* conflict /**< conflict analysis data */
703  );
704 
705 /** gets number of calls to pseudo solution conflict analysis that yield at least one conflict constraint */
706 extern
708  SCIP_CONFLICT* conflict /**< conflict analysis data */
709  );
710 
711 /** gets number of conflict constraints detected in pseudo solution conflict analysis */
712 extern
714  SCIP_CONFLICT* conflict /**< conflict analysis data */
715  );
716 
717 /** gets total number of literals in conflict constraints created in pseudo solution conflict analysis */
718 extern
720  SCIP_CONFLICT* conflict /**< conflict analysis data */
721  );
722 
723 /** gets number of reconvergence constraints detected in pseudo solution conflict analysis */
724 extern
726  SCIP_CONFLICT* conflict /**< conflict analysis data */
727  );
728 
729 /** gets total number of literals in reconvergence constraints created in pseudo solution conflict analysis */
730 extern
732  SCIP_CONFLICT* conflict /**< conflict analysis data */
733  );
734 
735 /** enables or disables all clocks of \p conflict, depending on the value of the flag */
736 extern
738  SCIP_CONFLICT* conflict, /**< the conflict analysis data for which all clocks should be enabled or disabled */
739  SCIP_Bool enable /**< should the clocks of the conflict analysis data be enabled? */
740  );
741 
742 #ifdef __cplusplus
743 }
744 #endif
745 
746 #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:8287
SCIP_Longint SCIPconflictGetNPseudoConflictConss(SCIP_CONFLICT *conflict)
Definition: conflict.c:8928
SCIP_Longint SCIPconflictGetNPropReconvergenceLiterals(SCIP_CONFLICT *conflict)
Definition: conflict.c:5563
void SCIPconflicthdlrSetCopy(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_DECL_CONFLICTCOPY((*conflictcopy)))
Definition: conflict.c:695
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:3329
type definitions for implications, variable bounds, and cliques
SCIP_Longint SCIPconflictGetNBoundexceedingLPConflictConss(SCIP_CONFLICT *conflict)
Definition: conflict.c:8307
SCIP_Longint SCIPconflictGetNBoundexceedingLPIterations(SCIP_CONFLICT *conflict)
Definition: conflict.c:8347
type definitions for conflict store
SCIP_Real SCIPconflictGetGlobalApplTime(SCIP_CONFLICT *conflict)
Definition: conflict.c:5493
SCIP_Longint SCIPconflictGetNLocalChgBds(SCIP_CONFLICT *conflict)
Definition: conflict.c:3598
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:4244
SCIP_Longint SCIPconflictGetNInfeasibleLPReconvergenceLiterals(SCIP_CONFLICT *conflict)
Definition: conflict.c:8257
int SCIPconflictGetNConflicts(SCIP_CONFLICT *conflict)
Definition: conflict.c:3538
SCIP_RETCODE SCIPconflicthdlrExitsol(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_SET *set)
Definition: conflict.c:603
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:627
SCIP_Real SCIPconflictGetPseudoTime(SCIP_CONFLICT *conflict)
Definition: conflict.c:8898
SCIP_Longint SCIPconflictGetNDualrayBndGlobal(SCIP_CONFLICT *conflict)
Definition: conflict.c:8651
SCIP_Longint SCIPconflictGetNPropReconvergenceConss(SCIP_CONFLICT *conflict)
Definition: conflict.c:5553
SCIP_RETCODE SCIPconflictInit(SCIP_CONFLICT *conflict, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_CONFTYPE conftype, SCIP_Bool usescutoffbound)
Definition: conflict.c:3825
SCIP_Longint SCIPconflictGetNPropCalls(SCIP_CONFLICT *conflict)
Definition: conflict.c:5513
SCIP_Longint SCIPconflictGetNDualrayBndNonzeros(SCIP_CONFLICT *conflict)
Definition: conflict.c:8661
SCIP_Longint SCIPconflictGetNPseudoSuccess(SCIP_CONFLICT *conflict)
Definition: conflict.c:8918
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:3608
SCIP_RETCODE SCIPconflicthdlrFree(SCIP_CONFLICTHDLR **conflicthdlr, SCIP_SET *set)
Definition: conflict.c:483
SCIP_Longint SCIPconflictGetNStrongbranchConflictLiterals(SCIP_CONFLICT *conflict)
Definition: conflict.c:8701
void SCIPconflicthdlrSetFree(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_DECL_CONFLICTFREE((*conflictfree)))
Definition: conflict.c:706
SCIP_Longint SCIPconflictGetNBoundexceedingLPReconvergenceLiterals(SCIP_CONFLICT *conflict)
Definition: conflict.c:8337
SCIP_Longint SCIPconflictGetNBoundexceedingLPConflictLiterals(SCIP_CONFLICT *conflict)
Definition: conflict.c:8317
SCIP_RETCODE SCIPconflictFree(SCIP_CONFLICT **conflict, BMS_BLKMEM *blkmem)
Definition: conflict.c:3777
SCIP_Longint SCIPconflictGetNPropSuccess(SCIP_CONFLICT *conflict)
Definition: conflict.c:5523
type definitions for return codes for SCIP methods
SCIP_Real SCIPconflictGetPropTime(SCIP_CONFLICT *conflict)
Definition: conflict.c:5503
type definitions for collecting reoptimization information
#define SCIP_DECL_CONFLICTEXIT(x)
type definitions for branching rules
type definitions for problem statistics
void SCIPconflicthdlrSetInit(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_DECL_CONFLICTINIT((*conflictinit)))
Definition: conflict.c:717
SCIP_RETCODE SCIPconflicthdlrCopyInclude(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_SET *set)
Definition: conflict.c:378
void SCIPconflicthdlrSetExit(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_DECL_CONFLICTEXIT((*conflictexit)))
Definition: conflict.c:728
type definitions for LP management
SCIP_Longint SCIPconflictGetNAppliedLocalLiterals(SCIP_CONFLICT *conflict)
Definition: conflict.c:3618
SCIP_RETCODE SCIPconflicthdlrExit(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_SET *set)
Definition: conflict.c:548
#define SCIP_DECL_CONFLICTINITSOL(x)
SCIP_Longint SCIPconflictGetNPseudoReconvergenceLiterals(SCIP_CONFLICT *conflict)
Definition: conflict.c:8958
#define SCIP_DECL_CONFLICTEXEC(x)
SCIP_Longint SCIPconflictGetNPseudoCalls(SCIP_CONFLICT *conflict)
Definition: conflict.c:8908
SCIP_Longint SCIPconflictGetNAppliedGlobalConss(SCIP_CONFLICT *conflict)
Definition: conflict.c:3578
SCIP_Longint SCIPconflictGetNDualrayInfGlobal(SCIP_CONFLICT *conflict)
Definition: conflict.c:8621
SCIP_Longint SCIPconflictGetNStrongbranchIterations(SCIP_CONFLICT *conflict)
Definition: conflict.c:8731
type definitions for SCIP&#39;s main datastructure
SCIP_Longint SCIPconflictGetNDualrayInfNonzeros(SCIP_CONFLICT *conflict)
Definition: conflict.c:8631
SCIP_Longint SCIPconflictGetNBoundexceedingLPReconvergenceConss(SCIP_CONFLICT *conflict)
Definition: conflict.c:8327
struct SCIP_ConflicthdlrData SCIP_CONFLICTHDLRDATA
Definition: type_conflict.h:40
type definitions for problem variables
#define SCIP_DECL_CONFLICTCOPY(x)
Definition: type_conflict.h:77
SCIP_Longint SCIPconflictGetNPseudoConflictLiterals(SCIP_CONFLICT *conflict)
Definition: conflict.c:8938
void SCIPconflicthdlrEnableOrDisableClocks(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_Bool enable)
Definition: conflict.c:815
type definitions for conflict analysis
type definitions for managing events
SCIP_Longint SCIPconflictGetNStrongbranchReconvergenceLiterals(SCIP_CONFLICT *conflict)
Definition: conflict.c:8721
SCIP_Longint SCIPconflictGetNInfeasibleLPConflictConss(SCIP_CONFLICT *conflict)
Definition: conflict.c:8227
SCIP_Longint SCIPconflictGetNDualrayBndSuccess(SCIP_CONFLICT *conflict)
Definition: conflict.c:8641
#define SCIP_Bool
Definition: def.h:69
SCIP_Longint SCIPconflictGetNPseudoReconvergenceConss(SCIP_CONFLICT *conflict)
Definition: conflict.c:8948
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:8364
SCIP_Longint SCIPconflictGetNDualrayInfSuccess(SCIP_CONFLICT *conflict)
Definition: conflict.c:8611
SCIP_Real SCIPconflictGetVarLb(SCIP_CONFLICT *conflict, SCIP_VAR *var)
Definition: conflict.c:4468
SCIP_Real SCIPconflictGetBoundexceedingLPTime(SCIP_CONFLICT *conflict)
Definition: conflict.c:8277
SCIP_Longint SCIPconflictGetNBoundexceedingLPSuccess(SCIP_CONFLICT *conflict)
Definition: conflict.c:8297
type definitions for branch and bound tree
SCIP_Real SCIPconflictGetStrongbranchTime(SCIP_CONFLICT *conflict)
Definition: conflict.c:8601
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:4408
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:4183
SCIP_Longint SCIPconflictGetNAppliedLiterals(SCIP_CONFLICT *conflict)
Definition: conflict.c:3558
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:8753
SCIP_Real SCIPconflictGetInfeasibleLPTime(SCIP_CONFLICT *conflict)
Definition: conflict.c:8197
void SCIPconflicthdlrSetInitsol(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_DECL_CONFLICTINITSOL((*conflictinitsol)))
Definition: conflict.c:739
SCIP_Longint SCIPconflictGetNInfeasibleLPIterations(SCIP_CONFLICT *conflict)
Definition: conflict.c:8267
void SCIPconflicthdlrSetExitsol(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_DECL_CONFLICTEXITSOL((*conflictexitsol)))
Definition: conflict.c:750
#define SCIP_Real
Definition: def.h:157
result codes for SCIP callback methods
enum SCIP_ConflictType SCIP_CONFTYPE
Definition: type_conflict.h:56
SCIP_Longint SCIPconflictGetNAppliedConss(SCIP_CONFLICT *conflict)
Definition: conflict.c:3548
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:8050
SCIP_Longint SCIPconflictGetNStrongbranchConflictConss(SCIP_CONFLICT *conflict)
Definition: conflict.c:8691
#define SCIP_DECL_CONFLICTINIT(x)
Definition: type_conflict.h:93
SCIP_RETCODE SCIPconflicthdlrInit(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_SET *set)
Definition: conflict.c:511
SCIP_Longint SCIPconflictGetNInfeasibleLPSuccess(SCIP_CONFLICT *conflict)
Definition: conflict.c:8217
#define SCIP_Longint
Definition: def.h:142
SCIP_Longint SCIPconflictGetNAppliedGlobalLiterals(SCIP_CONFLICT *conflict)
Definition: conflict.c:3588
SCIP_Longint SCIPconflictGetNStrongbranchSuccess(SCIP_CONFLICT *conflict)
Definition: conflict.c:8681
SCIP_Longint SCIPconflictGetNStrongbranchReconvergenceConss(SCIP_CONFLICT *conflict)
Definition: conflict.c:8711
SCIP_RETCODE SCIPconflictCreate(SCIP_CONFLICT **conflict, BMS_BLKMEM *blkmem, SCIP_SET *set)
Definition: conflict.c:3689
SCIP_Longint SCIPconflictGetNInfeasibleLPReconvergenceConss(SCIP_CONFLICT *conflict)
Definition: conflict.c:8247
type definitions for message output methods
SCIP_Longint SCIPconflictGetNStrongbranchCalls(SCIP_CONFLICT *conflict)
Definition: conflict.c:8671
SCIP_Longint SCIPconflictGetNPropConflictConss(SCIP_CONFLICT *conflict)
Definition: conflict.c:5533
SCIP_Real SCIPconflictGetVarUb(SCIP_CONFLICT *conflict, SCIP_VAR *var)
Definition: conflict.c:4485
common defines and data types used in all packages of SCIP
void SCIPconflicthdlrSetPriority(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_SET *set, int priority)
Definition: conflict.c:791
SCIP_Longint SCIPconflictGetNInfeasibleLPCalls(SCIP_CONFLICT *conflict)
Definition: conflict.c:8207
struct BMS_BlkMem BMS_BLKMEM
Definition: memory.h:426
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:5435
#define SCIP_DECL_CONFLICTFREE(x)
Definition: type_conflict.h:85
SCIP_Bool SCIPconflictApplicable(SCIP_SET *set)
Definition: conflict.c:3673
SCIP_Longint SCIPconflictGetNPropConflictLiterals(SCIP_CONFLICT *conflict)
Definition: conflict.c:5543
void SCIPconflictEnableOrDisableClocks(SCIP_CONFLICT *conflict, SCIP_Bool enable)
Definition: conflict.c:8969
SCIP_Longint SCIPconflictGetNGlobalChgBds(SCIP_CONFLICT *conflict)
Definition: conflict.c:3568
SCIP_RETCODE SCIPconflicthdlrInitsol(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_SET *set)
Definition: conflict.c:579
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:452
#define SCIP_DECL_CONFLICTEXITSOL(x)
SCIP_Longint SCIPconflictGetNInfeasibleLPConflictLiterals(SCIP_CONFLICT *conflict)
Definition: conflict.c:8237
memory allocation routines