Clover Coverage Report
Coverage timestamp: mer. juin 27 2007 07:27:16 CEST
18   88   7   9
6   39   0,44   2
2     4  
1    
 
  Minimal4CardinalityModel       Line # 43 18 7 92,3% 0.9230769
 
  (1)
 
1    /*
2    * SAT4J: a SATisfiability library for Java Copyright (C) 2004-2006 Daniel Le Berre
3    *
4    * Based on the original minisat specification from:
5    *
6    * An extensible SAT solver. Niklas E?n and Niklas S?rensson. Proceedings of the
7    * Sixth International Conference on Theory and Applications of Satisfiability
8    * Testing, LNCS 2919, pp 502-518, 2003.
9    *
10    * This library is free software; you can redistribute it and/or modify it under
11    * the terms of the GNU Lesser General Public License as published by the Free
12    * Software Foundation; either version 2.1 of the License, or (at your option)
13    * any later version.
14    *
15    * This library is distributed in the hope that it will be useful, but WITHOUT
16    * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
17    * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
18    * details.
19    *
20    * You should have received a copy of the GNU Lesser General Public License
21    * along with this library; if not, write to the Free Software Foundation, Inc.,
22    * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23    *
24    */
25   
26    package org.sat4j.tools;
27   
28    import org.sat4j.core.VecInt;
29    import org.sat4j.specs.ContradictionException;
30    import org.sat4j.specs.ISolver;
31    import org.sat4j.specs.IVecInt;
32    import org.sat4j.specs.TimeoutException;
33   
34    /**
35    * Computes models with a minimal number (with respect to cardinality) of
36    * negative literals. This is done be adding a constraint on the number of
37    * negative literals each time a model if found (the number of negative literals
38    * occuring in the model minus one).
39    *
40    * @author leberre
41    * @see org.sat4j.specs.ISolver#addAtMost(IVecInt, int)
42    */
 
43    public class Minimal4CardinalityModel extends SolverDecorator {
44   
45    private static final long serialVersionUID = 1L;
46   
47    /**
48    * @param solver
49    */
 
50  1 toggle public Minimal4CardinalityModel(ISolver solver) {
51  1 super(solver);
52    }
53   
54    /*
55    * (non-Javadoc)
56    *
57    * @see org.sat4j.ISolver#model()
58    */
 
59  10 toggle @Override
60    public int[] model() {
61  10 int[] prevmodel = null;
62  10 IVecInt vec = new VecInt();
63    // backUp();
64  10 try {
65  10 do {
66  13 prevmodel = super.model();
67  13 vec.clear();
68  52 for (int i = 1; i <= nVars(); i++) {
69  39 vec.push(-i);
70    }
71  13 int counter = 0;
72  13 for (int q : prevmodel) {
73  39 if (q < 0) {
74  6 counter++;
75    }
76    }
77  13 addAtMost(vec, counter - 1);
78  3 System.err.println(counter);
79  3 } while (isSatisfiable());
80    } catch (TimeoutException e) {
81  0 System.err.println("Solver timed out"); //$NON-NLS-1$
82    } catch (ContradictionException e) {
83  10 System.err.println("added trivial unsat clauses?" + vec); //$NON-NLS-1$
84    }
85    // restore();
86  10 return prevmodel;
87    }
88    }