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-2014 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  * @brief internal methods for conflict analysis
18  * @author Tobias Achterberg
19  */
20 
21 /*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
22 
23 #ifndef __SCIP_CONFLICT_H__
24 #define __SCIP_CONFLICT_H__
25 
26 
27 #include "scip/def.h"
28 #include "blockmemshell/memory.h"
29 #include "scip/type_retcode.h"
30 #include "scip/type_set.h"
31 #include "scip/type_stat.h"
32 #include "scip/type_lp.h"
33 #include "scip/type_var.h"
34 #include "scip/type_prob.h"
35 #include "scip/type_tree.h"
36 #include "scip/type_conflict.h"
37 #include "scip/pub_conflict.h"
38 
39 #ifdef __cplusplus
40 extern "C" {
41 #endif
42 
43 /*
44  * Conflict Handler
45  */
46 
47 /** copies the given conflict handler to a new scip */
48 extern
50  SCIP_CONFLICTHDLR* conflicthdlr, /**< conflict handler */
51  SCIP_SET* set /**< SCIP_SET of SCIP to copy to */
52  );
53 
54 /** creates a conflict handler */
55 extern
57  SCIP_CONFLICTHDLR** conflicthdlr, /**< pointer to conflict handler data structure */
58  SCIP_SET* set, /**< global SCIP settings */
59  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
60  BMS_BLKMEM* blkmem, /**< block memory for parameter settings */
61  const char* name, /**< name of conflict handler */
62  const char* desc, /**< description of conflict handler */
63  int priority, /**< priority of the conflict handler */
64  SCIP_DECL_CONFLICTCOPY((*conflictcopy)), /**< copy method of conflict handler or NULL if you don't want to copy your plugin into sub-SCIPs */
65  SCIP_DECL_CONFLICTFREE((*conflictfree)), /**< destructor of conflict handler */
66  SCIP_DECL_CONFLICTINIT((*conflictinit)), /**< initialize conflict handler */
67  SCIP_DECL_CONFLICTEXIT((*conflictexit)), /**< deinitialize conflict handler */
68  SCIP_DECL_CONFLICTINITSOL((*conflictinitsol)),/**< solving process initialization method of conflict handler */
69  SCIP_DECL_CONFLICTEXITSOL((*conflictexitsol)),/**< solving process deinitialization method of conflict handler */
70  SCIP_DECL_CONFLICTEXEC((*conflictexec)), /**< conflict processing method of conflict handler */
71  SCIP_CONFLICTHDLRDATA* conflicthdlrdata /**< conflict handler data */
72  );
73 
74 /** calls destructor and frees memory of conflict handler */
75 extern
77  SCIP_CONFLICTHDLR** conflicthdlr, /**< pointer to conflict handler data structure */
78  SCIP_SET* set /**< global SCIP settings */
79  );
80 
81 /** calls init method of conflict handler */
82 extern
84  SCIP_CONFLICTHDLR* conflicthdlr, /**< conflict handler */
85  SCIP_SET* set /**< global SCIP settings */
86  );
87 
88 /** calls exit method of conflict handler */
89 extern
91  SCIP_CONFLICTHDLR* conflicthdlr, /**< conflict handler */
92  SCIP_SET* set /**< global SCIP settings */
93  );
94 
95 /** informs conflict handler that the branch and bound process is being started */
96 extern
98  SCIP_CONFLICTHDLR* conflicthdlr, /**< conflict handler */
99  SCIP_SET* set /**< global SCIP settings */
100  );
101 
102 /** informs conflict handler that the branch and bound process data is being freed */
103 extern
105  SCIP_CONFLICTHDLR* conflicthdlr, /**< conflict handler */
106  SCIP_SET* set /**< global SCIP settings */
107  );
108 
109 /** calls execution method of conflict handler */
110 extern
112  SCIP_CONFLICTHDLR* conflicthdlr, /**< conflict handler */
113  SCIP_SET* set, /**< global SCIP settings */
114  SCIP_NODE* node, /**< node to add conflict constraint to */
115  SCIP_NODE* validnode, /**< node at which the constraint is valid */
116  SCIP_BDCHGINFO** bdchginfos, /**< bound change resembling the conflict set */
117  SCIP_Real* relaxedbds, /**< array with relaxed bounds which are efficient to create a valid conflict */
118  int nbdchginfos, /**< number of bound changes in the conflict set */
119  SCIP_Bool resolved, /**< was the conflict set already used to create a constraint? */
120  SCIP_RESULT* result /**< pointer to store the result of the callback method */
121  );
122 
123 /** sets priority of conflict handler */
124 extern
126  SCIP_CONFLICTHDLR* conflicthdlr, /**< conflict handler */
127  SCIP_SET* set, /**< global SCIP settings */
128  int priority /**< new priority of the conflict handler */
129  );
130 
131 /** set copy method of conflict handler */
132 extern
134  SCIP_CONFLICTHDLR* conflicthdlr, /**< conflict handler */
135  SCIP_DECL_CONFLICTCOPY((*conflictcopy)) /**< copy method of the conflict handler */
136  );
137 
138 /** set destructor of conflict handler */
139 extern
141  SCIP_CONFLICTHDLR* conflicthdlr, /**< conflict handler */
142  SCIP_DECL_CONFLICTFREE((*conflictfree)) /**< destructor of conflict handler */
143  );
144 
145 /** set initialization method of conflict handler */
146 extern
148  SCIP_CONFLICTHDLR* conflicthdlr, /**< conflict handler */
149  SCIP_DECL_CONFLICTINIT((*conflictinit)) /**< initialization method conflict handler */
150  );
151 
152 /** set deinitialization method of conflict handler */
153 extern
155  SCIP_CONFLICTHDLR* conflicthdlr, /**< conflict handler */
156  SCIP_DECL_CONFLICTEXIT((*conflictexit)) /**< deinitialization method conflict handler */
157  );
158 
159 /** set solving process initialization method of conflict handler */
160 extern
162  SCIP_CONFLICTHDLR* conflicthdlr, /**< conflict handler */
163  SCIP_DECL_CONFLICTINITSOL((*conflictinitsol))/**< solving process initialization method of conflict handler */
164  );
165 
166 /** set solving process deinitialization method of conflict handler */
167 extern
169  SCIP_CONFLICTHDLR* conflicthdlr, /**< conflict handler */
170  SCIP_DECL_CONFLICTEXITSOL((*conflictexitsol))/**< solving process deinitialization method of conflict handler */
171  );
172 
173 /*
174  * Conflict Analysis
175  */
176 
177 /** return TRUE if conflict analysis is applicable; In case the function return FALSE there is no need to initialize the
178  * conflict analysis since it will not be applied
179  */
180 extern
182  SCIP_SET* set /**< global SCIP settings */
183  );
184 
185 /** creates conflict analysis data for propagation conflicts */
186 extern
188  SCIP_CONFLICT** conflict, /**< pointer to conflict analysis data */
189  BMS_BLKMEM* blkmem, /**< block memory of transformed problem */
190  SCIP_SET* set /**< global SCIP settings */
191  );
192 
193 /** frees conflict analysis data for propagation conflicts */
194 extern
196  SCIP_CONFLICT** conflict, /**< pointer to conflict analysis data */
197  BMS_BLKMEM* blkmem /**< block memory of transformed problem */
198  );
199 
200 /** initializes the propagation conflict analysis by clearing the conflict candidate queue */
201 extern
203  SCIP_CONFLICT* conflict, /**< conflict analysis data */
204  SCIP_SET* set, /**< global SCIP settings */
205  SCIP_STAT* stat, /**< problem statistics */
206  SCIP_PROB* prob /**< problem data */
207  );
208 
209 /** adds variable's bound to conflict candidate queue */
210 extern
212  SCIP_CONFLICT* conflict, /**< conflict analysis data */
213  BMS_BLKMEM* blkmem, /**< block memory */
214  SCIP_SET* set, /**< global SCIP settings */
215  SCIP_STAT* stat, /**< dynamic problem statistics */
216  SCIP_VAR* var, /**< problem variable */
217  SCIP_BOUNDTYPE boundtype, /**< type of bound that was changed: lower or upper bound */
218  SCIP_BDCHGIDX* bdchgidx /**< bound change index (time stamp of bound change), or NULL for current time */
219  );
220 
221 /** adds variable's bound to conflict candidate queue with the additional information of a relaxed bound */
222 extern
224  SCIP_CONFLICT* conflict, /**< conflict analysis data */
225  BMS_BLKMEM* blkmem, /**< block memory */
226  SCIP_SET* set, /**< global SCIP settings */
227  SCIP_STAT* stat, /**< dynamic problem statistics */
228  SCIP_VAR* var, /**< problem variable */
229  SCIP_BOUNDTYPE boundtype, /**< type of bound that was changed: lower or upper bound */
230  SCIP_BDCHGIDX* bdchgidx, /**< bound change index (time stamp of bound change), or NULL for current time */
231  SCIP_Real relaxedbd /**< the relaxed bound */
232  );
233 
234 /** checks if the given variable is already part of the current conflict set or queued for resolving with the same or
235  * even stronger bound
236  */
237 extern
239  SCIP_CONFLICT* conflict, /**< conflict analysis data */
240  SCIP_VAR* var, /**< problem variable */
241  SCIP_SET* set, /**< global SCIP settings */
242  SCIP_BOUNDTYPE boundtype, /**< type of bound for which the score should be increased */
243  SCIP_BDCHGIDX* bdchgidx, /**< bound change index (time stamp of bound change), or NULL for current time */
244  SCIP_Bool* used /**< pointer to store if the variable is already used */
245  );
246 
247 /** returns the conflict lower bound if the variable is present in the current conflict set; otherwise the global lower
248  * bound
249  */
250 extern
252  SCIP_CONFLICT* conflict, /**< conflict analysis data */
253  SCIP_VAR* var /**< problem variable */
254  );
255 
256 /** returns the conflict upper bound if the variable is present in the current conflict set; otherwise the global upper
257  * bound
258  */
259 extern
261  SCIP_CONFLICT* conflict, /**< conflict analysis data */
262  SCIP_VAR* var /**< problem variable */
263  );
264 
265 /** analyzes conflicting bound changes that were added with calls to SCIPconflictAddBound() and
266  * SCIPconflictAddRelaxedBound(), and on success, calls the conflict handlers to create a conflict constraint out of
267  * the resulting conflict set; updates statistics for propagation conflict analysis
268  */
269 extern
271  SCIP_CONFLICT* conflict, /**< conflict analysis data */
272  BMS_BLKMEM* blkmem, /**< block memory of transformed problem */
273  SCIP_SET* set, /**< global SCIP settings */
274  SCIP_STAT* stat, /**< problem statistics */
275  SCIP_PROB* prob, /**< problem data */
276  SCIP_TREE* tree, /**< branch and bound tree */
277  int validdepth, /**< minimal depth level at which the initial conflict set is valid */
278  SCIP_Bool* success /**< pointer to store whether a conflict constraint was created, or NULL */
279  );
280 
281 /** adds the collected conflict constraints to the corresponding nodes; the best set->conf_maxconss conflict constraints
282  * are added to the node of their validdepth; additionally (if not yet added, and if repropagation is activated), the
283  * conflict constraint that triggers the earliest repropagation is added to the node of its validdepth
284  */
285 extern
287  SCIP_CONFLICT* conflict, /**< conflict analysis data */
288  BMS_BLKMEM* blkmem, /**< block memory of transformed problem */
289  SCIP_SET* set, /**< global SCIP settings */
290  SCIP_STAT* stat, /**< dynamic problem statistics */
291  SCIP_PROB* transprob, /**< transformed problem */
292  SCIP_PROB* origprob, /**< original problem */
293  SCIP_TREE* tree, /**< branch and bound tree */
294  SCIP_LP* lp, /**< current LP data */
295  SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
296  SCIP_EVENTQUEUE* eventqueue /**< event queue */
297 
298  );
299 
300 /** returns the current number of conflict sets in the conflict set storage */
301 extern
303  SCIP_CONFLICT* conflict /**< conflict analysis data */
304  );
305 
306 /** returns the total number of conflict constraints that were added to the problem */
307 extern
309  SCIP_CONFLICT* conflict /**< conflict analysis data */
310  );
311 
312 /** returns the total number of literals in conflict constraints that were added to the problem */
313 extern
315  SCIP_CONFLICT* conflict /**< conflict analysis data */
316  );
317 
318 /** returns the total number of global bound changes applied by the conflict analysis */
319 extern
321  SCIP_CONFLICT* conflict /**< conflict analysis data */
322  );
323 
324 /** returns the total number of conflict constraints that were added globally to the problem */
325 extern
327  SCIP_CONFLICT* conflict /**< conflict analysis data */
328  );
329 
330 /** returns the total number of literals in conflict constraints that were added globally to the problem */
331 extern
333  SCIP_CONFLICT* conflict /**< conflict analysis data */
334  );
335 
336 /** returns the total number of local bound changes applied by the conflict analysis */
337 extern
339  SCIP_CONFLICT* conflict /**< conflict analysis data */
340  );
341 
342 /** returns the total number of conflict constraints that were added locally to the problem */
343 extern
345  SCIP_CONFLICT* conflict /**< conflict analysis data */
346  );
347 
348 /** returns the total number of literals in conflict constraints that were added locally to the problem */
349 extern
351  SCIP_CONFLICT* conflict /**< conflict analysis data */
352  );
353 
354 /** gets time in seconds used for preprocessing global conflict constraint before appliance */
355 extern
357  SCIP_CONFLICT* conflict /**< conflict analysis data */
358  );
359 
360 /** gets time in seconds used for analyzing propagation conflicts */
361 extern
363  SCIP_CONFLICT* conflict /**< conflict analysis data */
364  );
365 
366 /** gets number of calls to propagation conflict analysis */
367 extern
369  SCIP_CONFLICT* conflict /**< conflict analysis data */
370  );
371 
372 /** gets number of calls to propagation conflict analysis that yield at least one conflict constraint */
373 extern
375  SCIP_CONFLICT* conflict /**< conflict analysis data */
376  );
377 
378 /** gets number of conflict constraints detected in propagation conflict analysis */
379 extern
381  SCIP_CONFLICT* conflict /**< conflict analysis data */
382  );
383 
384 /** gets total number of literals in conflict constraints created in propagation conflict analysis */
385 extern
387  SCIP_CONFLICT* conflict /**< conflict analysis data */
388  );
389 
390 /** gets number of reconvergence constraints detected in propagation conflict analysis */
391 extern
393  SCIP_CONFLICT* conflict /**< conflict analysis data */
394  );
395 
396 /** gets total number of literals in reconvergence constraints created in propagation conflict analysis */
397 extern
399  SCIP_CONFLICT* conflict /**< conflict analysis data */
400  );
401 
402 
403 
404 
405 /*
406  * Infeasible LP Conflict Analysis
407  */
408 
409 /** analyzes an infeasible or bound exceeding LP to find out the bound changes on variables that were responsible for the
410  * infeasibility or for exceeding the primal bound;
411  * on success, calls standard conflict analysis with the responsible variables as starting conflict set, thus creating
412  * a conflict constraint out of the resulting conflict set;
413  * updates statistics for infeasible or bound exceeding LP conflict analysis
414  */
415 extern
417  SCIP_CONFLICT* conflict, /**< conflict analysis data */
418  BMS_BLKMEM* blkmem, /**< block memory of transformed problem */
419  SCIP_SET* set, /**< global SCIP settings */
420  SCIP_STAT* stat, /**< problem statistics */
421  SCIP_PROB* transprob, /**< transformed problem */
422  SCIP_PROB* origprob, /**< original problem */
423  SCIP_TREE* tree, /**< branch and bound tree */
424  SCIP_LP* lp, /**< LP data */
425  SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
426  SCIP_EVENTQUEUE* eventqueue, /**< event queue */
427  SCIP_Bool* success /**< pointer to store whether a conflict constraint was created, or NULL */
428  );
429 
430 /** gets time in seconds used for analyzing infeasible LP conflicts */
431 extern
433  SCIP_CONFLICT* conflict /**< conflict analysis data */
434  );
435 
436 /** gets number of calls to infeasible LP conflict analysis */
437 extern
439  SCIP_CONFLICT* conflict /**< conflict analysis data */
440  );
441 
442 /** gets number of calls to infeasible LP conflict analysis that yield at least one conflict constraint */
443 extern
445  SCIP_CONFLICT* conflict /**< conflict analysis data */
446  );
447 
448 /** gets number of conflict constraints detected in infeasible LP conflict analysis */
449 extern
451  SCIP_CONFLICT* conflict /**< conflict analysis data */
452  );
453 
454 /** gets total number of literals in conflict constraints created in infeasible LP conflict analysis */
455 extern
457  SCIP_CONFLICT* conflict /**< conflict analysis data */
458  );
459 
460 /** gets number of reconvergence constraints detected in infeasible LP conflict analysis */
461 extern
463  SCIP_CONFLICT* conflict /**< conflict analysis data */
464  );
465 
466 /** gets total number of literals in reconvergence constraints created in infeasible LP conflict analysis */
467 extern
469  SCIP_CONFLICT* conflict /**< conflict analysis data */
470  );
471 
472 /** gets number of LP iterations in infeasible LP conflict analysis */
473 extern
475  SCIP_CONFLICT* conflict /**< conflict analysis data */
476  );
477 
478 /** gets time in seconds used for analyzing bound exceeding LP conflicts */
479 extern
481  SCIP_CONFLICT* conflict /**< conflict analysis data */
482  );
483 
484 /** gets number of calls to bound exceeding LP conflict analysis */
485 extern
487  SCIP_CONFLICT* conflict /**< conflict analysis data */
488  );
489 
490 /** gets number of calls to bound exceeding LP conflict analysis that yield at least one conflict constraint */
491 extern
493  SCIP_CONFLICT* conflict /**< conflict analysis data */
494  );
495 
496 /** gets number of conflict constraints detected in bound exceeding LP conflict analysis */
497 extern
499  SCIP_CONFLICT* conflict /**< conflict analysis data */
500  );
501 
502 /** gets total number of literals in conflict constraints created in bound exceeding LP conflict analysis */
503 extern
505  SCIP_CONFLICT* conflict /**< conflict analysis data */
506  );
507 
508 /** gets number of reconvergence constraints detected in bound exceeding LP conflict analysis */
509 extern
511  SCIP_CONFLICT* conflict /**< conflict analysis data */
512  );
513 
514 /** gets total number of literals in reconvergence constraints created in bound exceeding LP conflict analysis */
515 extern
517  SCIP_CONFLICT* conflict /**< conflict analysis data */
518  );
519 
520 /** gets number of LP iterations in bound exceeding LP conflict analysis */
521 extern
523  SCIP_CONFLICT* conflict /**< conflict analysis data */
524  );
525 
526 
527 
528 
529 /*
530  * infeasible strong branching conflict analysis
531  */
532 
533 /** analyses infeasible strong branching sub problems for conflicts */
534 extern
536  SCIP_CONFLICT* conflict, /**< conflict analysis data */
537  BMS_BLKMEM* blkmem, /**< block memory buffers */
538  SCIP_SET* set, /**< global SCIP settings */
539  SCIP_STAT* stat, /**< dynamic problem statistics */
540  SCIP_PROB* transprob, /**< transformed problem */
541  SCIP_PROB* origprob, /**< original problem */
542  SCIP_TREE* tree, /**< branch and bound tree */
543  SCIP_LP* lp, /**< LP data */
544  SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
545  SCIP_EVENTQUEUE* eventqueue, /**< event queue */
546  SCIP_COL* col, /**< LP column with at least one infeasible strong branching subproblem */
547  SCIP_Bool* downconflict, /**< pointer to store whether a conflict constraint was created for an
548  * infeasible downwards branch, or NULL */
549  SCIP_Bool* upconflict /**< pointer to store whether a conflict constraint was created for an
550  * infeasible upwards branch, or NULL */
551  );
552 
553 /** gets time in seconds used for analyzing infeasible strong branching conflicts */
554 extern
556  SCIP_CONFLICT* conflict /**< conflict analysis data */
557  );
558 
559 /** gets number of calls to infeasible strong branching conflict analysis */
560 extern
562  SCIP_CONFLICT* conflict /**< conflict analysis data */
563  );
564 
565 /** gets number of calls to infeasible strong branching conflict analysis that yield at least one conflict constraint */
566 extern
568  SCIP_CONFLICT* conflict /**< conflict analysis data */
569  );
570 
571 /** gets number of conflict constraints detected in infeasible strong branching conflict analysis */
572 extern
574  SCIP_CONFLICT* conflict /**< conflict analysis data */
575  );
576 
577 /** gets total number of literals in conflict constraints created in infeasible strong branching conflict analysis */
578 extern
580  SCIP_CONFLICT* conflict /**< conflict analysis data */
581  );
582 
583 /** gets number of reconvergence constraints detected in infeasible strong branching conflict analysis */
584 extern
586  SCIP_CONFLICT* conflict /**< conflict analysis data */
587  );
588 
589 /** gets total number of literals in reconvergence constraints created in infeasible strong branching conflict analysis */
590 extern
592  SCIP_CONFLICT* conflict /**< conflict analysis data */
593  );
594 
595 /** gets number of LP iterations in infeasible strong branching conflict analysis */
596 extern
598  SCIP_CONFLICT* conflict /**< conflict analysis data */
599  );
600 
601 
602 
603 
604 /*
605  * pseudo solution conflict analysis
606  */
607 
608 /** analyzes a pseudo solution with objective value exceeding the current cutoff to find out the bound changes on
609  * variables that were responsible for the objective value degradation;
610  * on success, calls standard conflict analysis with the responsible variables as starting conflict set, thus creating
611  * a conflict constraint out of the resulting conflict set;
612  * updates statistics for pseudo solution conflict analysis
613  */
614 extern
616  SCIP_CONFLICT* conflict, /**< conflict analysis data */
617  BMS_BLKMEM* blkmem, /**< block memory of transformed problem */
618  SCIP_SET* set, /**< global SCIP settings */
619  SCIP_STAT* stat, /**< problem statistics */
620  SCIP_PROB* transprob, /**< transformed problem */
621  SCIP_PROB* origprob, /**< original problem */
622  SCIP_TREE* tree, /**< branch and bound tree */
623  SCIP_LP* lp, /**< LP data */
624  SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
625  SCIP_EVENTQUEUE* eventqueue, /**< event queue */
626  SCIP_Bool* success /**< pointer to store whether a conflict constraint was created, or NULL */
627  );
628 
629 /** gets time in seconds used for analyzing pseudo solution conflicts */
630 extern
632  SCIP_CONFLICT* conflict /**< conflict analysis data */
633  );
634 
635 /** gets number of calls to pseudo solution conflict analysis */
636 extern
638  SCIP_CONFLICT* conflict /**< conflict analysis data */
639  );
640 
641 /** gets number of calls to pseudo solution conflict analysis that yield at least one conflict constraint */
642 extern
644  SCIP_CONFLICT* conflict /**< conflict analysis data */
645  );
646 
647 /** gets number of conflict constraints detected in pseudo solution conflict analysis */
648 extern
650  SCIP_CONFLICT* conflict /**< conflict analysis data */
651  );
652 
653 /** gets total number of literals in conflict constraints created in pseudo solution conflict analysis */
654 extern
656  SCIP_CONFLICT* conflict /**< conflict analysis data */
657  );
658 
659 /** gets number of reconvergence constraints detected in pseudo solution conflict analysis */
660 extern
662  SCIP_CONFLICT* conflict /**< conflict analysis data */
663  );
664 
665 /** gets total number of literals in reconvergence constraints created in pseudo solution conflict analysis */
666 extern
668  SCIP_CONFLICT* conflict /**< conflict analysis data */
669  );
670 
671 #ifdef __cplusplus
672 }
673 #endif
674 
675 #endif
676