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.ISolverService;
33 import org.sat4j.specs.Lbool;
34
35
36
37
38 public class DecisionTracing extends SearchListenerAdapter<ISolverService> {
39
40
41
42
43 private static final long serialVersionUID = 1L;
44
45 private int counter;
46
47 private final IVisualizationTool positiveVisu;
48 private final IVisualizationTool negativeVisu;
49 private final IVisualizationTool restartVisu;
50 private final IVisualizationTool cleanVisu;
51
52 private int nVar;
53
54 public DecisionTracing(IVisualizationTool positiveVisu,
55 IVisualizationTool negativeVisu, IVisualizationTool restartVisu,
56 IVisualizationTool cleanVisu) {
57 this.positiveVisu = positiveVisu;
58 this.negativeVisu = negativeVisu;
59 this.restartVisu = restartVisu;
60 this.cleanVisu = cleanVisu;
61
62 this.counter = 1;
63 }
64
65 @Override
66 public void assuming(int p) {
67 if (p > 0) {
68 this.positiveVisu.addPoint(this.counter, p);
69 this.negativeVisu.addInvisiblePoint(this.counter, 0);
70 } else {
71 this.negativeVisu.addPoint(this.counter, -p);
72 this.positiveVisu.addInvisiblePoint(this.counter, 0);
73 }
74 this.restartVisu.addInvisiblePoint(this.counter, 0);
75 this.cleanVisu.addInvisiblePoint(this.counter, 0);
76 this.counter++;
77 }
78
79 @Override
80 public void restarting() {
81 this.restartVisu.addPoint(this.counter, this.nVar);
82 this.cleanVisu.addPoint(this.counter, 0);
83 this.positiveVisu.addInvisiblePoint(this.counter, 0);
84 this.negativeVisu.addInvisiblePoint(this.counter, 0);
85 }
86
87 @Override
88 public void end(Lbool result) {
89 this.positiveVisu.end();
90 this.negativeVisu.end();
91 this.restartVisu.end();
92 this.cleanVisu.end();
93 }
94
95 @Override
96 public void start() {
97 this.counter = 1;
98 }
99
100 @Override
101 public void init(ISolverService solverService) {
102 this.nVar = solverService.nVars();
103 this.positiveVisu.init();
104 this.negativeVisu.init();
105 this.restartVisu.init();
106 this.cleanVisu.init();
107 }
108
109 @Override
110 public void cleaning() {
111 this.restartVisu.addPoint(this.counter, 0);
112 this.cleanVisu.addPoint(this.counter, this.nVar);
113 this.positiveVisu.addInvisiblePoint(this.counter, 0);
114 this.negativeVisu.addInvisiblePoint(this.counter, 0);
115 }
116
117 }