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
29
30 package org.sat4j.pb.tools;
31
32 import java.math.BigInteger;
33
34 import org.sat4j.core.ASolverFactory;
35 import org.sat4j.core.ConstrGroup;
36 import org.sat4j.pb.IPBSolver;
37 import org.sat4j.pb.ObjectiveFunction;
38 import org.sat4j.specs.ContradictionException;
39 import org.sat4j.specs.IConstr;
40 import org.sat4j.specs.IVec;
41 import org.sat4j.specs.IVecInt;
42 import org.sat4j.tools.ManyCore;
43
44 public class ManyCorePB extends ManyCore<IPBSolver> implements IPBSolver {
45
46
47
48
49 private static final long serialVersionUID = 1L;
50
51 public ManyCorePB(ASolverFactory<IPBSolver> factory, String... solverNames) {
52 super(factory, solverNames);
53 }
54
55 public ManyCorePB(IPBSolver... iSolver) {
56 super(iSolver);
57 }
58
59 public IConstr addPseudoBoolean(IVecInt lits, IVec<BigInteger> coeffs,
60 boolean moreThan, BigInteger d) throws ContradictionException {
61 ConstrGroup group = new ConstrGroup(false);
62 for (int i = 0; i < this.numberOfSolvers; i++) {
63 group.add(this.solvers.get(i).addPseudoBoolean(lits, coeffs,
64 moreThan, d));
65 }
66 return group;
67 }
68
69 public void setObjectiveFunction(ObjectiveFunction obj) {
70 for (int i = 0; i < this.numberOfSolvers; i++) {
71 this.solvers.get(i).setObjectiveFunction(obj);
72 }
73 }
74
75 public ObjectiveFunction getObjectiveFunction() {
76 return this.solvers.get(0).getObjectiveFunction();
77 }
78
79 public IConstr addAtMost(IVecInt literals, IVecInt coeffs, int degree)
80 throws ContradictionException {
81 ConstrGroup group = new ConstrGroup(false);
82 for (int i = 0; i < this.numberOfSolvers; i++) {
83 group.add(this.solvers.get(i).addAtMost(literals, coeffs, degree));
84 }
85 return group;
86 }
87
88 public IConstr addAtMost(IVecInt literals, IVec<BigInteger> coeffs,
89 BigInteger degree) throws ContradictionException {
90 ConstrGroup group = new ConstrGroup(false);
91 for (int i = 0; i < this.numberOfSolvers; i++) {
92 group.add(this.solvers.get(i).addAtMost(literals, coeffs, degree));
93 }
94 return group;
95 }
96
97 public IConstr addAtLeast(IVecInt literals, IVecInt coeffs, int degree)
98 throws ContradictionException {
99 ConstrGroup group = new ConstrGroup(false);
100 for (int i = 0; i < this.numberOfSolvers; i++) {
101 group.add(this.solvers.get(i).addAtLeast(literals, coeffs, degree));
102 }
103 return group;
104 }
105
106 public IConstr addAtLeast(IVecInt literals, IVec<BigInteger> coeffs,
107 BigInteger degree) throws ContradictionException {
108 ConstrGroup group = new ConstrGroup(false);
109 for (int i = 0; i < this.numberOfSolvers; i++) {
110 group.add(this.solvers.get(i).addAtLeast(literals, coeffs, degree));
111 }
112 return group;
113 }
114
115 public IConstr addExactly(IVecInt literals, IVecInt coeffs, int weight)
116 throws ContradictionException {
117 ConstrGroup group = new ConstrGroup(false);
118 for (int i = 0; i < this.numberOfSolvers; i++) {
119 group.add(this.solvers.get(i).addExactly(literals, coeffs, weight));
120 }
121 return group;
122 }
123
124 public IConstr addExactly(IVecInt literals, IVec<BigInteger> coeffs,
125 BigInteger weight) throws ContradictionException {
126 ConstrGroup group = new ConstrGroup(false);
127 for (int i = 0; i < this.numberOfSolvers; i++) {
128 group.add(this.solvers.get(i).addExactly(literals, coeffs, weight));
129 }
130 return group;
131 }
132
133 }