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 package org.sat4j.pb.constraints;
29
30 import java.math.BigInteger;
31
32 import org.sat4j.core.Vec;
33 import org.sat4j.core.VecInt;
34 import org.sat4j.minisat.constraints.cnf.Clauses;
35 import org.sat4j.minisat.core.Constr;
36 import org.sat4j.pb.constraints.pb.IDataStructurePB;
37 import org.sat4j.pb.constraints.pb.LearntBinaryClausePB;
38 import org.sat4j.pb.constraints.pb.LearntHTClausePB;
39 import org.sat4j.pb.constraints.pb.MinWatchCardPB;
40 import org.sat4j.pb.constraints.pb.OriginalBinaryClausePB;
41 import org.sat4j.pb.constraints.pb.OriginalHTClausePB;
42 import org.sat4j.pb.constraints.pb.PuebloMinWatchPb;
43 import org.sat4j.pb.constraints.pb.UnitClausePB;
44 import org.sat4j.specs.ContradictionException;
45 import org.sat4j.specs.IVec;
46 import org.sat4j.specs.IVecInt;
47
48 public class PuebloPBMinClauseCardConstrDataStructure extends
49 AbstractPBClauseCardConstrDataStructure {
50
51
52
53
54 private static final long serialVersionUID = 1L;
55
56 @Override
57 public Constr createClause(IVecInt literals) throws ContradictionException {
58 IVecInt v = Clauses.sanityCheck(literals, getVocabulary(), solver);
59 if (v == null)
60 return null;
61 if (v.size() == 2) {
62 return OriginalBinaryClausePB.brandNewClause(solver,
63 getVocabulary(), v);
64 }
65 return OriginalHTClausePB.brandNewClause(solver, getVocabulary(), v);
66 }
67
68 @Override
69 protected Constr constructClause(IVecInt v) {
70 if (v.size() == 2) {
71 return OriginalBinaryClausePB.brandNewClause(solver,
72 getVocabulary(), v);
73 }
74 return OriginalHTClausePB.brandNewClause(solver, getVocabulary(), v);
75 }
76
77 @Override
78 protected Constr constructCard(IVecInt theLits, int degree)
79 throws ContradictionException {
80 return MinWatchCardPB.normalizedMinWatchCardPBNew(solver,
81 getVocabulary(), theLits, degree);
82 }
83
84 @Override
85 protected Constr constructPB(int[] theLits, BigInteger[] coefs,
86 BigInteger degree) throws ContradictionException {
87 return PuebloMinWatchPb.normalizedMinWatchPbNew(solver,
88 getVocabulary(), theLits, coefs, degree);
89 }
90
91 @Override
92 protected Constr constructLearntClause(IVecInt literals) {
93 if (literals.size() == 1) {
94 return new UnitClausePB(literals.last(), getVocabulary());
95 }
96 if (literals.size() == 2) {
97 return new LearntBinaryClausePB(literals, getVocabulary());
98 }
99 return new LearntHTClausePB(literals, getVocabulary());
100 }
101
102 @Override
103 protected Constr constructLearntCard(IDataStructurePB dspb) {
104 IVecInt resLits = new VecInt();
105 IVec<BigInteger> resCoefs = new Vec<BigInteger>();
106 dspb.buildConstraintFromConflict(resLits, resCoefs);
107 return new MinWatchCardPB(getVocabulary(), resLits, true, dspb
108 .getDegree().intValue());
109 }
110
111 @Override
112 protected Constr constructLearntPB(IDataStructurePB dspb) {
113 return PuebloMinWatchPb.normalizedWatchPbNew(getVocabulary(), dspb);
114 }
115
116 }