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