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.core;
29
30 import java.math.BigInteger;
31
32 import org.sat4j.minisat.core.AssertingClauseGenerator;
33 import org.sat4j.minisat.core.ILits;
34 import org.sat4j.minisat.core.IOrder;
35 import org.sat4j.minisat.core.LearningStrategy;
36 import org.sat4j.minisat.core.RestartStrategy;
37 import org.sat4j.minisat.core.SearchParams;
38 import org.sat4j.minisat.core.Solver;
39 import org.sat4j.pb.IPBSolver;
40 import org.sat4j.pb.ObjectiveFunction;
41 import org.sat4j.pb.orders.VarOrderHeapObjective;
42 import org.sat4j.specs.ContradictionException;
43 import org.sat4j.specs.IConstr;
44 import org.sat4j.specs.IVec;
45 import org.sat4j.specs.IVecInt;
46
47 public abstract class PBSolver<L extends ILits> extends
48 Solver<L, PBDataStructureFactory<L>> implements IPBSolver {
49
50
51
52
53 private static final long serialVersionUID = 1L;
54
55 public PBSolver(AssertingClauseGenerator acg,
56 LearningStrategy<L, PBDataStructureFactory<L>> learner,
57 PBDataStructureFactory<L> dsf, IOrder<L> order,
58 RestartStrategy restarter) {
59 super(acg, learner, dsf, order, restarter);
60 }
61
62 public PBSolver(AssertingClauseGenerator acg,
63 LearningStrategy<L, PBDataStructureFactory<L>> learner,
64 PBDataStructureFactory<L> dsf, SearchParams params,
65 IOrder<L> order, RestartStrategy restarter) {
66 super(acg, learner, dsf, params, order, restarter);
67 }
68
69 public IConstr addPseudoBoolean(IVecInt literals, IVec<BigInteger> coeffs,
70 boolean moreThan, BigInteger degree) throws ContradictionException {
71 IVecInt vlits = dimacs2internal(literals);
72 assert vlits.size() == literals.size();
73 assert literals.size() == coeffs.size();
74 return addConstr(dsfactory.createPseudoBooleanConstraint(vlits, coeffs,
75 moreThan, degree));
76 }
77
78
79
80
81
82 protected IVecInt listOfVariables;
83
84 public void setListOfVariablesForExplanation(IVecInt lv) {
85 listOfVariables = lv;
86 }
87
88 public String getExplanation() {
89 return "";
90 }
91
92 public void setObjectiveFunction(ObjectiveFunction obj) {
93 IOrder<L> order = getOrder();
94 if (order instanceof VarOrderHeapObjective) {
95 ((VarOrderHeapObjective) order).setObjectiveFunction(obj);
96 }
97 }
98 }