S
- the type of the solver (ISolver of IPBSolver)public class ManyCore<S extends ISolver> extends Object implements ISolver, OutcomeListener
Modifier and Type | Field and Description |
---|---|
protected int |
numberOfSolvers |
protected List<S> |
solvers |
Constructor and Description |
---|
ManyCore(ASolverFactory<S> factory,
String... solverNames) |
ManyCore(S... solverObjects) |
ManyCore(String[] names,
S... solverObjects)
Create a parallel solver from a list of solvers and a list of names.
|
Modifier and Type | Method and Description |
---|---|
void |
addAllClauses(IVec<IVecInt> clauses)
Create clauses from a set of set of literals.
|
IConstr |
addAtLeast(IVecInt literals,
int degree)
Create a cardinality constraint of the type "at least n of those literals
must be satisfied"
|
IConstr |
addAtMost(IVecInt literals,
int degree)
Create a cardinality constraint of the type "at most n of those literals
must be satisfied"
|
IConstr |
addBlockingClause(IVecInt literals)
Add a clause in order to prevent an assignment to occur.
|
IConstr |
addClause(IVecInt literals)
Create a clause from a set of literals The literals are represented by
non null integers such that opposite literals a represented by opposite
values.
|
IConstr |
addExactly(IVecInt literals,
int n)
Create a cardinality constraint of the type
"exactly n of those literals must be satisfied".
|
void |
clearLearntClauses()
Remove clauses learned during the solving process.
|
void |
expireTimeout()
Expire the timeout of the solver.
|
int[] |
findModel()
Look for a model satisfying all the clauses available in the problem.
|
int[] |
findModel(IVecInt assumps)
Look for a model satisfying all the clauses available in the problem.
|
String |
getLogPrefix() |
<I extends ISolverService> |
getSearchListener()
Get the current SearchListener.
|
List<S> |
getSolvers() |
ISolver |
getSolvingEngine()
Retrieve the real engine in case the engine is decorated by one or
several decorator.
|
Map<String,Number> |
getStat()
To obtain a map of the available statistics from the solver.
|
int |
getTimeout()
Useful to check the internal timeout of the solver.
|
long |
getTimeoutMs()
Useful to check the internal timeout of the solver.
|
boolean |
isDBSimplificationAllowed()
Indicate whether the solver is allowed to simplify the formula by
propagating the truth value of top level satisfied variables.
|
boolean |
isSatisfiable()
Check the satisfiability of the set of constraints contained inside the
solver.
|
boolean |
isSatisfiable(boolean globalTimeout)
Check the satisfiability of the set of constraints contained inside the
solver.
|
boolean |
isSatisfiable(IVecInt assumps)
Check the satisfiability of the set of constraints contained inside the
solver.
|
boolean |
isSatisfiable(IVecInt assumps,
boolean globalTimeout)
Check the satisfiability of the set of constraints contained inside the
solver.
|
boolean |
isSolverKeptHot()
Ask to the solver if it is in "hot" mode, meaning that the heuristics is
not reset after call is isSatisfiable().
|
boolean |
isVerbose()
To know if the solver is in verbose mode (output allowed) or not.
|
int[] |
model()
Provide a model (if any) for a satisfiable formula.
|
boolean |
model(int var)
Provide the truth value of a specific variable in the model.
|
int[] |
modelWithInternalVariables()
That method is designed to be used to retrieve the real model of the
current set of constraints, i.e. to provide the truth value of boolean
variables used internally in the solver (for encoding purposes for
instance).
|
int |
nConstraints()
To know the number of constraints currently available in the solver.
|
int |
newVar()
Create a new variable in the solver (and thus in the vocabulary).
|
int |
newVar(int howmany)
Declare
howmany variables in the problem (and thus in the
vocabulary), that will be represented using the Dimacs format by integers
ranging from 1 to howmany. |
int |
nextFreeVarId(boolean reserve)
Ask the solver for a free variable identifier, in Dimacs format (i.e. a
positive number).
|
int |
nVars()
To know the number of variables used in the solver as declared by
newVar()
In case the method newVar() has not been used, the method returns the
number of variables used in the solver.
|
void |
onFinishWithAnswer(boolean finished,
boolean result,
int index) |
int[] |
primeImplicant()
Provide a prime implicant, i.e. a set of literal that is sufficient to
satisfy all constraints of the problem.
|
boolean |
primeImplicant(int p)
Check if a given literal is part of the prime implicant computed by the
IProblem.primeImplicant() method. |
void |
printInfos(PrintWriter out)
To print additional informations regarding the problem.
|
void |
printInfos(PrintWriter out,
String prefix)
To print additional informations regarding the problem.
|
void |
printStat(PrintStream out,
String prefix)
Deprecated.
|
void |
printStat(PrintWriter out)
Display statistics to the given output writer
|
void |
printStat(PrintWriter out,
String prefix)
Display statistics to the given output writer
|
int |
realNumberOfVariables()
Retrieve the real number of variables used in the solver.
|
void |
registerLiteral(int p)
Tell the solver to consider that the literal is in the CNF.
|
boolean |
removeConstr(IConstr c)
Remove a constraint returned by one of the add method from the solver.
|
boolean |
removeSubsumedConstr(IConstr c)
Remove a constraint returned by one of the add method from the solver
that is subsumed by a constraint already in the solver or to be added to
the solver.
|
void |
reset()
Clean up the internal state of the solver.
|
void |
setDBSimplificationAllowed(boolean status)
Set whether the solver is allowed to simplify the formula by propagating
the truth value of top level satisfied variables.
|
void |
setExpectedNumberOfClauses(int nb)
To inform the solver of the expected number of clauses to read.
|
void |
setKeepSolverHot(boolean value)
Changed the behavior of the SAT solver heuristics between successive
calls.
|
void |
setLogPrefix(String prefix)
Set the prefix used to display information.
|
<I extends ISolverService> |
setSearchListener(SearchListener<I> sl)
Allow the user to hook a listener to the solver to be notified of the
main steps of the search process.
|
void |
setTimeout(int t)
To set the internal timeout of the solver.
|
void |
setTimeoutMs(long t)
To set the internal timeout of the solver.
|
void |
setTimeoutOnConflicts(int count)
To set the internal timeout of the solver.
|
void |
setVerbose(boolean value)
Set the verbosity of the solver
|
String |
toString(String prefix)
Display a textual representation of the solver configuration.
|
IVecInt |
unsatExplanation()
Retrieve an explanation of the inconsistency in terms of assumption
literals.
|
public ManyCore(ASolverFactory<S> factory, String... solverNames)
public ManyCore(String[] names, S... solverObjects)
names
- a String to describe each solver in the messages.solverObjects
- the solverspublic ManyCore(S... solverObjects)
public void addAllClauses(IVec<IVecInt> clauses) throws ContradictionException
ISolver
addAllClauses
in interface ISolver
clauses
- a vector of set (VecInt) of literals in the dimacs format. The
vector can be reused since the solver is not supposed to keep
a reference to that vector.ContradictionException
- iff the vector of literals is empty or if it contains only
falsified literals after unit propagationISolver.addClause(IVecInt)
public IConstr addAtLeast(IVecInt literals, int degree) throws ContradictionException
ISolver
addAtLeast
in interface ISolver
literals
- a set of literals. The vector can be reused since the solver
is not supposed to keep a reference to that vector.degree
- the degree (n) of the cardinality constraintContradictionException
- iff the vector of literals is empty or if degree literals are
not remaining unfalsified after unit propagationISolver.removeConstr(IConstr)
public IConstr addAtMost(IVecInt literals, int degree) throws ContradictionException
ISolver
addAtMost
in interface ISolver
literals
- a set of literals The vector can be reused since the solver is
not supposed to keep a reference to that vector.degree
- the degree (n) of the cardinality constraintContradictionException
- iff the vector of literals is empty or if it contains more
than degree satisfied literals after unit propagationISolver.removeConstr(IConstr)
public IConstr addExactly(IVecInt literals, int n) throws ContradictionException
ISolver
addExactly
in interface ISolver
literals
- a set of literals. The vector can be reused since the solver
is not supposed to keep a reference to that vector.n
- the number of literals that must be satisfiedContradictionException
- iff the constraint is trivially unsatisfiable.public IConstr addClause(IVecInt literals) throws ContradictionException
ISolver
addClause
in interface ISolver
literals
- a set of literalsContradictionException
- iff the vector of literals is empty or if it contains only
falsified literals after unit propagationISolver.removeConstr(IConstr)
public void clearLearntClauses()
ISolver
clearLearntClauses
in interface ISolver
public void expireTimeout()
ISolver
expireTimeout
in interface ISolver
public Map<String,Number> getStat()
ISolver
public int getTimeout()
ISolver
getTimeout
in interface ISolver
public long getTimeoutMs()
ISolver
getTimeoutMs
in interface ISolver
public int newVar()
ISolver
public int newVar(int howmany)
IProblem
howmany
variables in the problem (and thus in the
vocabulary), that will be represented using the Dimacs format by integers
ranging from 1 to howmany. That feature allows encodings to create
additional variables with identifier starting at howmany+1.newVar
in interface IProblem
howmany
- number of variables to createIProblem.nVars()
@Deprecated public void printStat(PrintStream out, String prefix)
ISolver
printStat
in interface ISolver
prefix
- the prefix to put in front of each lineISolver.printStat(PrintWriter, String)
public void printStat(PrintWriter out, String prefix)
ISolver
public boolean removeConstr(IConstr c)
ISolver
removeConstr
in interface ISolver
c
- a constraint returned by one of the add method.public void reset()
ISolver
public void setExpectedNumberOfClauses(int nb)
ISolver
p cnf
line is
read in dimacs formatted input file.
Note that this method is supposed to be called AFTER a call to
newVar(int)setExpectedNumberOfClauses
in interface ISolver
nb
- the expected number of clauses.IProblem.newVar(int)
public void setTimeout(int t)
ISolver
setTimeout
in interface ISolver
t
- the timeout (in s)public void setTimeoutMs(long t)
ISolver
setTimeoutMs
in interface ISolver
t
- the timeout (in milliseconds)public void setTimeoutOnConflicts(int count)
ISolver
setTimeoutOnConflicts
in interface ISolver
count
- the timeout (in number of conflicts)public String toString(String prefix)
ISolver
public int[] findModel() throws TimeoutException
IProblem
if (isSatisfiable()) {
return model();
}
return null;
findModel
in interface IProblem
null
if no model is foundTimeoutException
- if a model cannot be found within the given timeout.public int[] findModel(IVecInt assumps) throws TimeoutException
IProblem
if (isSatisfiable(assumpt)) {
return model();
}
return null;
findModel
in interface IProblem
null
if no model is foundTimeoutException
- if a model cannot be found within the given timeout.public boolean isSatisfiable() throws TimeoutException
IProblem
isSatisfiable
in interface IProblem
TimeoutException
public boolean isSatisfiable(IVecInt assumps, boolean globalTimeout) throws TimeoutException
IProblem
isSatisfiable
in interface IProblem
assumps
- a set of literals (represented by usual non null integers in
Dimacs format).globalTimeout
- whether that call is part of a global process (i.e.
optimization) or not. if (global), the timeout will not be
reset between each call.TimeoutException
public boolean isSatisfiable(boolean globalTimeout) throws TimeoutException
IProblem
isSatisfiable
in interface IProblem
globalTimeout
- whether that call is part of a global process (i.e.
optimization) or not. if (global), the timeout will not be
reset between each call.TimeoutException
public boolean isSatisfiable(IVecInt assumps) throws TimeoutException
IProblem
isSatisfiable
in interface IProblem
assumps
- a set of literals (represented by usual non null integers in
Dimacs format).TimeoutException
public int[] model()
IProblem
model
in interface IProblem
IProblem.isSatisfiable()
,
IProblem.isSatisfiable(IVecInt)
public boolean model(int var)
RandomAccessModel
model
in interface RandomAccessModel
var
- the variable id in Dimacs format#model()
public int nConstraints()
IProblem
nConstraints
in interface IProblem
public int nVars()
IProblem
nVars
in interface IProblem
IProblem.newVar(int)
public void printInfos(PrintWriter out, String prefix)
IProblem
printInfos
in interface IProblem
out
- the place to print the informationprefix
- the prefix to put in front of each linepublic void onFinishWithAnswer(boolean finished, boolean result, int index)
onFinishWithAnswer
in interface OutcomeListener
public boolean isDBSimplificationAllowed()
ISolver
isDBSimplificationAllowed
in interface ISolver
public void setDBSimplificationAllowed(boolean status)
ISolver
setDBSimplificationAllowed
in interface ISolver
public <I extends ISolverService> void setSearchListener(SearchListener<I> sl)
ISolver
setSearchListener
in interface ISolver
sl
- a Search Listener.public <I extends ISolverService> SearchListener<I> getSearchListener()
ISolver
getSearchListener
in interface ISolver
public int nextFreeVarId(boolean reserve)
ISolver
ISolver.realNumberOfVariables()
method.nextFreeVarId
in interface ISolver
reserve
- if true, the maxVarId is updated in the solver, i.e.
successive calls to nextFreeVarId(true) will return increasing
variable id while successive calls to nextFreeVarId(false)
will always answer the same.ISolver.realNumberOfVariables()
public IConstr addBlockingClause(IVecInt literals) throws ContradictionException
ISolver
addBlockingClause
in interface ISolver
ContradictionException
public boolean removeSubsumedConstr(IConstr c)
ISolver
removeSubsumedConstr
in interface ISolver
c
- a constraint returned by one of the add method. It must be the
latest constr added to the solver.public boolean isVerbose()
ISolver
public void setVerbose(boolean value)
ISolver
setVerbose
in interface ISolver
value
- true to allow the solver to output messages on the console,
false either.public void setLogPrefix(String prefix)
ISolver
setLogPrefix
in interface ISolver
prefix
- the prefix to be in front of each line of textpublic String getLogPrefix()
getLogPrefix
in interface ISolver
public IVecInt unsatExplanation()
ISolver
unsatExplanation
in interface ISolver
IProblem.isSatisfiable(IVecInt)
,
IProblem.isSatisfiable(IVecInt, boolean)
public int[] primeImplicant()
IProblem
primeImplicant
in interface IProblem
public boolean primeImplicant(int p)
IProblem
IProblem.primeImplicant()
method.primeImplicant
in interface IProblem
p
- a literal in Dimacs formatIProblem.primeImplicant()
public int[] modelWithInternalVariables()
ISolver
modelWithInternalVariables
in interface ISolver
IProblem.model()
,
ModelIterator
public int realNumberOfVariables()
ISolver
ISolver.nextFreeVarId(boolean)
method.realNumberOfVariables
in interface ISolver
ISolver.nextFreeVarId(boolean)
public void registerLiteral(int p)
ISolver
registerLiteral
in interface ISolver
p
- the literal in Dimacs format that should appear in the model.public boolean isSolverKeptHot()
ISolver
isSolverKeptHot
in interface ISolver
public void setKeepSolverHot(boolean value)
ISolver
setKeepSolverHot
in interface ISolver
value
- true to keep the heuristics values across calls, false either.public ISolver getSolvingEngine()
ISolver
getSolvingEngine
in interface ISolver
public void printStat(PrintWriter out)
ISolver
printStat
in interface ISolver
ISolver.setLogPrefix(String)
public void printInfos(PrintWriter out)
IProblem
printInfos
in interface IProblem
out
- the place to print the information#setLogPrefix(String)
Copyright © 2013 Centre de Recherche en Informatique de Lens (CRIL). All Rights Reserved.