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.core;
31
32 import org.sat4j.minisat.core.IOrder;
33 import org.sat4j.minisat.core.LearningStrategy;
34 import org.sat4j.pb.constraints.pb.ConflictMapSwitchToClause;
35 import org.sat4j.pb.constraints.pb.IConflict;
36 import org.sat4j.pb.constraints.pb.PBConstr;
37
38 public class PBSolverCautious extends PBSolverCP {
39
40 private static final long serialVersionUID = 1L;
41 public static final int BOUND = 10;
42
43 public PBSolverCautious(LearningStrategy<PBDataStructureFactory> learner,
44 PBDataStructureFactory dsf, IOrder order) {
45 super(learner, dsf, order);
46 ConflictMapSwitchToClause.UpperBound = BOUND;
47 }
48
49 public PBSolverCautious(LearningStrategy<PBDataStructureFactory> learner,
50 PBDataStructureFactory dsf, IOrder order, int bound) {
51 super(learner, dsf, order);
52 ConflictMapSwitchToClause.UpperBound = bound;
53 }
54
55 @Override
56 IConflict chooseConflict(PBConstr myconfl, int level) {
57 return ConflictMapSwitchToClause.createConflict(myconfl, level);
58 }
59
60 @Override
61 public String toString(String prefix) {
62 return super.toString(prefix)
63 + "\n"
64 + prefix
65 + "When dealing with too large coefficients, simplify asserted PB constraints to clauses";
66 }
67
68 @Override
69 protected void updateNumberOfReductions(IConflict confl) {
70 this.stats.numberOfReductions += ((ConflictMapSwitchToClause) confl)
71 .getNumberOfReductions();
72 }
73
74 @Override
75 protected void updateNumberOfReducedLearnedConstraints(IConflict confl) {
76 if (((ConflictMapSwitchToClause) confl).hasBeenReduced()) {
77 this.stats.numberOfLearnedConstraintsReduced++;
78 }
79 }
80
81 }