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