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 package org.sat4j.minisat.constraints.cnf;
27
28 import java.io.Serializable;
29
30 import org.sat4j.core.VecInt;
31 import org.sat4j.minisat.core.Constr;
32 import org.sat4j.minisat.core.ILits;
33 import org.sat4j.minisat.core.UnitPropagationListener;
34 import org.sat4j.specs.IVecInt;
35
36
37
38
39
40 public class BinaryClauses implements Constr, Serializable {
41
42 private static final long serialVersionUID = 1L;
43
44 private final ILits voc;
45
46 private final IVecInt clauses = new VecInt();
47
48 private final int reason;
49
50 private int conflictindex = -1;
51
52
53
54
55 public BinaryClauses(ILits voc, int p) {
56 this.voc = voc;
57 this.reason = p;
58 }
59
60 public void addBinaryClause(int p) {
61 clauses.push(p);
62 }
63
64
65
66
67
68
69 public void remove() {
70
71 }
72
73
74
75
76
77
78
79 public boolean propagate(UnitPropagationListener s, int p) {
80 assert voc.isFalsified(this.reason);
81 voc.watch(p, this);
82 for (int i = 0; i < clauses.size(); i++) {
83 int q = clauses.get(i);
84 if (!s.enqueue(q, this)) {
85 conflictindex = i;
86 return false;
87 }
88 }
89 return true;
90 }
91
92
93
94
95
96
97 public boolean simplify() {
98 IVecInt locclauses = clauses;
99 final int size = clauses.size();
100 for (int i = 0; i < size; i++) {
101 if (voc.isSatisfied(locclauses.get(i))) {
102 return true;
103 }
104 if (voc.isFalsified(locclauses.get(i))) {
105 locclauses.delete(i);
106 }
107
108 }
109 return false;
110 }
111
112
113
114
115
116
117 public void undo(int p) {
118
119 }
120
121
122
123
124
125
126 public void calcReason(int p, IVecInt outReason) {
127 outReason.push(this.reason ^ 1);
128 if (p == ILits.UNDEFINED) {
129
130
131
132
133 assert conflictindex > -1;
134 outReason.push(clauses.get(conflictindex) ^ 1);
135 }
136 }
137
138
139
140
141
142
143 public boolean learnt() {
144 return false;
145 }
146
147
148
149
150
151
152 public void incActivity(double claInc) {
153
154 }
155
156
157
158
159
160
161 public double getActivity() {
162
163 return 0;
164 }
165
166
167
168
169
170
171 public boolean locked() {
172 return false;
173 }
174
175
176
177
178
179
180 public void setLearnt() {
181
182 }
183
184
185
186
187
188
189 public void register() {
190
191 }
192
193
194
195
196
197
198 public void rescaleBy(double d) {
199
200 }
201
202
203
204
205
206
207 public int size() {
208 return clauses.size();
209 }
210
211
212
213
214
215
216 public int get(int i) {
217
218 throw new UnsupportedOperationException();
219 }
220
221 public void assertConstraint(UnitPropagationListener s) {
222 throw new UnsupportedOperationException();
223 }
224 }