/******************************************************************************* * SAT4J: a SATisfiability library for Java Copyright (C) 2004-2008 Daniel Le Berre * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Alternatively, the contents of this file may be used under the terms of * either the GNU Lesser General Public License Version 2.1 or later (the * "LGPL"), in which case the provisions of the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of the LGPL, and not to allow others to use your version of * this file under the terms of the EPL, indicate your decision by deleting * the provisions above and replace them with the notice and other provisions * required by the LGPL. If you do not delete the provisions above, a recipient * may use your version of this file under the terms of the EPL or the LGPL. * * Based on the original MiniSat specification from: * * An extensible SAT solver. Niklas Een and Niklas Sorensson. Proceedings of the * Sixth International Conference on Theory and Applications of Satisfiability * Testing, LNCS 2919, pp 502-518, 2003. * * See www.minisat.se for the original solver in C++. * *******************************************************************************/ package org.sat4j.minisat.core; import java.io.PrintWriter; /** * Interface for the variable ordering heuristics. It has both the * responsibility to choose the next variable to branch on and the phase of the * literal (positive or negative one). * * @author daniel * */ public interface IOrder<L extends ILits> { /** * Method used to provide an easy access the the solver vocabulary. * * @param lits * the vocabulary */ void setLits(L lits); /** * Selects the next "best" unassigned literal. * * Note that it means selecting the best variable and the phase to branch on * first. * * @return an unassigned literal or Lit.UNDEFINED no such literal exists. */ int select(); /** * Method called when a variable is unassigned. * * It is useful to add back a variable in the pool of variables to order. * * @param x * a variable. */ void undo(int x); /** * To be called when the activity of a literal changed. * * @param p * a literal. The associated variable will be updated. */ void updateVar(int p); /** * that method has the responsibility to initialize all arrays in the * heuristics. PLEASE CALL super.init() IF YOU OVERRIDE THAT METHOD. */ void init(); /** * Display statistics regarding the heuristics. * * @param out * the writer to display the information in * @param prefix * to be used in front of each newline. */ void printStat(PrintWriter out, String prefix); /** * Sets the variable activity decay as a growing factor for the next * variable activity. * * @param d * a number bigger than 1 that will increase the activity of the * variables involved in future conflict. This is similar but * more efficient than decaying all the activities by a similar * factor. */ void setVarDecay(double d); /** * Decay the variables activities. * */ void varDecayActivity(); /** * To obtain the current activity of a variable. * * @param p * a literal * @return the activity of the variable associated to that literal. */ double varActivity(int p); /** * indicate that a literal has been satisfied. * * @param p */ void assignLiteral(int p); void setPhaseSelectionStrategy(IPhaseSelectionStrategy strategy); IPhaseSelectionStrategy getPhaseSelectionStrategy(); }