1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 package org.sat4j.tools;
31
32 import org.sat4j.specs.IConstr;
33 import org.sat4j.specs.ISolverService;
34 import org.sat4j.specs.Lbool;
35
36
37
38
39 public class ConflictLevelTracing extends SearchListenerAdapter<ISolverService> {
40
41
42
43
44 private int counter;
45
46 private static final long serialVersionUID = 1L;
47
48 private int nVar;
49 private int maxDLevel;
50
51 private final IVisualizationTool visuTool;
52 private final IVisualizationTool restartVisuTool;
53 private final IVisualizationTool cleanTool;
54
55 public ConflictLevelTracing(IVisualizationTool visuTool,
56 IVisualizationTool restartVisuTool, IVisualizationTool cleanTool) {
57 this.visuTool = visuTool;
58 this.restartVisuTool = restartVisuTool;
59 this.cleanTool = cleanTool;
60
61 this.counter = 1;
62 this.maxDLevel = 0;
63 }
64
65 @Override
66 public void conflictFound(IConstr confl, int dlevel, int trailLevel) {
67 if (dlevel > this.maxDLevel) {
68 this.maxDLevel = dlevel;
69 }
70 this.visuTool.addPoint(this.counter, dlevel);
71 this.restartVisuTool.addInvisiblePoint(this.counter, this.maxDLevel);
72 this.cleanTool.addInvisiblePoint(this.counter, this.maxDLevel);
73 this.counter++;
74 }
75
76 @Override
77 public void restarting() {
78 this.restartVisuTool.addPoint(this.counter, this.maxDLevel);
79 this.cleanTool.addPoint(this.counter, 0);
80 this.visuTool.addInvisiblePoint(this.counter, this.nVar);
81 }
82
83 @Override
84 public void end(Lbool result) {
85 this.visuTool.end();
86 this.cleanTool.end();
87 this.restartVisuTool.end();
88 }
89
90 @Override
91 public void start() {
92 this.visuTool.init();
93 this.restartVisuTool.init();
94 this.cleanTool.init();
95 this.counter = 1;
96 this.maxDLevel = 0;
97 }
98
99 @Override
100 public void init(ISolverService solverService) {
101 this.nVar = solverService.nVars();
102 }
103
104 @Override
105 public void cleaning() {
106 this.restartVisuTool.addPoint(this.counter, 0);
107 this.cleanTool.addPoint(this.counter, this.maxDLevel);
108 this.visuTool.addInvisiblePoint(this.counter, this.nVar);
109 }
110 }