View Javadoc

1   package org.sat4j.maxsat;
2   
3   import static org.junit.Assert.assertEquals;
4   import static org.junit.Assert.assertTrue;
5   
6   import java.math.BigInteger;
7   
8   import org.junit.Test;
9   import org.sat4j.core.VecInt;
10  import org.sat4j.pb.OptToPBSATAdapter;
11  import org.sat4j.pb.PseudoOptDecorator;
12  import org.sat4j.specs.ContradictionException;
13  import org.sat4j.specs.IVecInt;
14  import org.sat4j.specs.TimeoutException;
15  
16  public class BugSAT65 {
17  
18      @Test
19      public void testOneSatisfiedConstraint() throws TimeoutException, ContradictionException {
20          WeightedMaxSatDecorator wms = new WeightedMaxSatDecorator(SolverFactory.newDefault());
21          wms.newVar(2);
22          wms.setExpectedNumberOfClauses(3);
23          IVecInt clause = new VecInt().push(-1).push(1);
24          wms.addSoftClause(clause);
25          clause.clear();
26          clause.push(2);
27          wms.addSoftClause(clause);
28          clause.clear();
29          clause.push(-2);
30          wms.addSoftClause(clause);
31          OptToPBSATAdapter problem = new OptToPBSATAdapter(new PseudoOptDecorator(wms,false,false));
32          assertTrue(problem.isSatisfiable());
33          assertEquals(BigInteger.ONE,problem.getCurrentObjectiveValue());
34      }
35      
36      @Test
37      public void testOneSatisfiedConstraintImplicant() throws TimeoutException, ContradictionException {
38          WeightedMaxSatDecorator wms = new WeightedMaxSatDecorator(SolverFactory.newDefault());
39          wms.newVar(2);
40          wms.setExpectedNumberOfClauses(3);
41          IVecInt clause = new VecInt().push(-1).push(1);
42          wms.addSoftClause(clause);
43          clause.clear();
44          clause.push(2);
45          wms.addSoftClause(clause);
46          clause.clear();
47          clause.push(-2);
48          wms.addSoftClause(clause);
49          OptToPBSATAdapter problem = new OptToPBSATAdapter(new PseudoOptDecorator(wms,false,true));
50          assertTrue(problem.isSatisfiable());
51          assertEquals(BigInteger.ONE,problem.getCurrentObjectiveValue());
52      }
53      
54      @Test
55      public void testTwoSatisfiedConstraint() throws TimeoutException, ContradictionException {
56          WeightedMaxSatDecorator wms = new WeightedMaxSatDecorator(SolverFactory.newDefault());
57          wms.newVar(2);
58          wms.setExpectedNumberOfClauses(4);
59          IVecInt clause = new VecInt().push(-1).push(1);
60          wms.addSoftClause(clause);
61          clause.clear();
62          clause.push(2).push(-2);
63          wms.addSoftClause(clause);
64          clause.clear();
65          clause.push(2);
66          wms.addSoftClause(clause);
67          clause.clear();
68          clause.push(-2);
69          wms.addSoftClause(clause);
70          OptToPBSATAdapter problem = new OptToPBSATAdapter(new PseudoOptDecorator(wms,false,false));
71          assertTrue(problem.isSatisfiable());
72          assertEquals(BigInteger.ONE,problem.getCurrentObjectiveValue());
73      }
74      
75      @Test
76      public void testTwoSatisfiedConstraintImplicant() throws TimeoutException, ContradictionException {
77          WeightedMaxSatDecorator wms = new WeightedMaxSatDecorator(SolverFactory.newDefault());
78          wms.newVar(2);
79          wms.setExpectedNumberOfClauses(4);
80          IVecInt clause = new VecInt().push(-1).push(1);
81          wms.addSoftClause(clause);
82          clause.clear();
83          clause.push(2).push(-2);
84          wms.addSoftClause(clause);
85          clause.clear();
86          clause.push(2);
87          wms.addSoftClause(clause);
88          clause.clear();
89          clause.push(-2);
90          wms.addSoftClause(clause);
91          OptToPBSATAdapter problem = new OptToPBSATAdapter(new PseudoOptDecorator(wms,false,true));
92          assertTrue(problem.isSatisfiable());
93          assertEquals(BigInteger.ONE,problem.getCurrentObjectiveValue());
94      }
95      
96      @Test
97      public void testOneSatisfiedConstraintMSTwoImplicant() throws TimeoutException, ContradictionException {
98          WeightedMaxSatDecorator wms = new WeightedMaxSatDecorator(SolverFactory.newDefault());
99          wms.newVar(2);
100         wms.setExpectedNumberOfClauses(4);
101         IVecInt clause = new VecInt().push(-1).push(1);
102         wms.addSoftClause(clause);
103         clause.clear();
104         clause.push(1);
105         wms.addSoftClause(clause);
106         clause.clear();
107         clause.push(2);
108         wms.addSoftClause(clause);
109         clause.clear();
110         clause.push(-2);
111         wms.addSoftClause(clause);
112         clause.clear();
113         clause.push(-1);
114         wms.addSoftClause(clause);
115         OptToPBSATAdapter problem = new OptToPBSATAdapter(new PseudoOptDecorator(wms,false,true));
116         assertTrue(problem.isSatisfiable());
117         assertEquals(BigInteger.valueOf(2),problem.getCurrentObjectiveValue());
118     }
119     
120     @Test
121     public void testOneSatisfiedConstraintMSTwo() throws TimeoutException, ContradictionException {
122         WeightedMaxSatDecorator wms = new WeightedMaxSatDecorator(SolverFactory.newDefault());
123         wms.newVar(2);
124         wms.setExpectedNumberOfClauses(4);
125         IVecInt clause = new VecInt().push(-1).push(1);
126         wms.addSoftClause(clause);
127         clause.clear();
128         clause.push(1);
129         wms.addSoftClause(clause);
130         clause.clear();
131         clause.push(2);
132         wms.addSoftClause(clause);
133         clause.clear();
134         clause.push(-2);
135         wms.addSoftClause(clause);
136         clause.clear();
137         clause.push(-1);
138         wms.addSoftClause(clause);
139         OptToPBSATAdapter problem = new OptToPBSATAdapter(new PseudoOptDecorator(wms,false,false));
140         assertTrue(problem.isSatisfiable());
141         assertEquals(BigInteger.valueOf(2),problem.getCurrentObjectiveValue());
142     }
143 }