View Javadoc

1   /*******************************************************************************
2    * SAT4J: a SATisfiability library for Java Copyright (C) 2004-2008 Daniel Le Berre
3    *
4    * All rights reserved. This program and the accompanying materials
5    * are made available under the terms of the Eclipse Public License v1.0
6    * which accompanies this distribution, and is available at
7    * http://www.eclipse.org/legal/epl-v10.html
8    *
9    * Alternatively, the contents of this file may be used under the terms of
10   * either the GNU Lesser General Public License Version 2.1 or later (the
11   * "LGPL"), in which case the provisions of the LGPL are applicable instead
12   * of those above. If you wish to allow use of your version of this file only
13   * under the terms of the LGPL, and not to allow others to use your version of
14   * this file under the terms of the EPL, indicate your decision by deleting
15   * the provisions above and replace them with the notice and other provisions
16   * required by the LGPL. If you do not delete the provisions above, a recipient
17   * may use your version of this file under the terms of the EPL or the LGPL.
18   * 
19   * Based on the pseudo boolean algorithms described in:
20   * A fast pseudo-Boolean constraint solver Chai, D.; Kuehlmann, A.
21   * Computer-Aided Design of Integrated Circuits and Systems, IEEE Transactions on
22   * Volume 24, Issue 3, March 2005 Page(s): 305 - 317
23   * 
24   * and 
25   * Heidi E. Dixon, 2004. Automating Pseudo-Boolean Inference within a DPLL 
26   * Framework. Ph.D. Dissertation, University of Oregon.
27   *******************************************************************************/
28  package org.sat4j.pb;
29  
30  import static java.lang.System.out;
31  
32  import org.sat4j.AbstractLauncher;
33  import org.sat4j.AbstractOptimizationLauncher;
34  import org.sat4j.core.ASolverFactory;
35  import org.sat4j.pb.reader.OPBReader2006;
36  import org.sat4j.reader.Reader;
37  import org.sat4j.specs.ISolver;
38  
39  /**
40   * Launcher especially dedicated to the pseudo boolean 05 evaluation (@link
41   * http://www.cril.univ-artois.fr/PB05/).
42   * 
43   * @author mederic
44   */
45  public class LanceurPseudo2005 extends AbstractOptimizationLauncher {
46  
47  	ASolverFactory<IPBSolver> factory;
48  
49  	public LanceurPseudo2005() {
50  		this(SolverFactory.instance());
51  	}
52  
53  	LanceurPseudo2005(ASolverFactory<IPBSolver> factory) {
54  		this.factory = factory;
55  	}
56  
57  	/**
58       * 
59       */
60  	private static final long serialVersionUID = 1L;
61  
62  	/**
63  	 * Lance le prouveur sur un fichier Dimacs
64  	 * 
65  	 * @param args
66  	 *            doit contenir le nom d'un fichier Dimacs, eventuellement
67  	 *            compress?.
68  	 */
69  	public static void main(final String[] args) {
70  		final AbstractLauncher lanceur = new LanceurPseudo2005();
71  		lanceur.run(args);
72  		System.exit(lanceur.getExitCode().value());
73  	}
74  
75  	protected ObjectiveFunction obfct;
76  
77  	/*
78  	 * (non-Javadoc)
79  	 * 
80  	 * @see org.sat4j.Lanceur#createReader(org.sat4j.specs.ISolver)
81  	 */
82  	@Override
83  	protected Reader createReader(ISolver theSolver, String problemname) {
84  		return new OPBReader2006((IPBSolver) theSolver);
85  	}
86  
87  	/*
88  	 * (non-Javadoc)
89  	 * 
90  	 * @see org.sat4j.Lanceur#configureSolver(java.lang.String[])
91  	 */
92  	@Override
93  	protected ISolver configureSolver(String[] args) {
94  		IPBSolver theSolver;
95  		if (args.length > 1) {
96  			theSolver = factory.createSolverByName(args[0]);
97  		} else {
98  			theSolver = factory.defaultSolver();
99  		}
100 		theSolver = new PseudoOptDecorator(theSolver);
101 		if (args.length == 3) {
102 			theSolver.setTimeout(Integer.valueOf(args[1]));
103 		}
104 		out.println(theSolver.toString(COMMENT_PREFIX)); //$NON-NLS-1$
105 		return theSolver;
106 	}
107 
108 	@Override
109 	public void usage() {
110 		out.println("java -jar sat4j-pb.jar [solvername [timeout]] instancename.opb"); //$NON-NLS-1$
111 		showAvailableSolvers(SolverFactory.instance());
112 	}
113 
114 	@Override
115 	protected String getInstanceName(String[] args) {
116 		assert args.length == 1 || args.length == 2 || args.length == 3;
117 		if (args.length == 0) {
118 			return null;
119 		}
120 		return args[args.length - 1];
121 	}
122 }