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 package org.sat4j.minisat.constraints.pb;
26
27 import java.math.BigInteger;
28 import java.util.HashMap;
29 import java.util.Map;
30
31 import org.sat4j.minisat.core.ILits;
32
33 public class ConflictMapClause extends ConflictMap {
34
35 public ConflictMapClause(Map<Integer, BigInteger> m, BigInteger d,
36 ILits voc, int level) {
37 super(m, d, voc, level);
38 }
39
40 public static IConflict createConflict(PBConstr cpb, int level) {
41 Map<Integer, BigInteger> m = new HashMap<Integer, BigInteger>();
42 int lit;
43 BigInteger coefLit;
44 for (int i = 0; i < cpb.size(); i++) {
45 lit = cpb.get(i);
46 coefLit = cpb.getCoef(i);
47 assert cpb.get(i) != 0;
48 assert cpb.getCoef(i).signum() > 0;
49 m.put(lit, coefLit);
50 }
51 return new ConflictMapClause(m, cpb.getDegree(), cpb.getVocabulary(),
52 level);
53 }
54
55
56
57
58
59
60
61
62
63
64
65 @Override
66 protected BigInteger reduceUntilConflict(int litImplied, int ind,
67 BigInteger[] reducedCoefs, WatchPb wpb) {
68 for (int i = 0; i < reducedCoefs.length; i++)
69 if (i == ind || wpb.getVocabulary().isFalsified(wpb.get(i)))
70 reducedCoefs[i] = BigInteger.ONE;
71 else
72 reducedCoefs[i] = BigInteger.ZERO;
73 coefMultCons = coefs.get(litImplied ^ 1);
74 coefMult = BigInteger.ONE;
75 return BigInteger.ONE;
76 }
77 }