use of org.opt4j.satdecoding.TimeoutException in project opt4j by felixreimann.
the class SAT4JSolver method solve.
/*
* (non-Javadoc)
*
* @see org.opt4j.sat.Solver#solve(org.opt4j.sat.Order)
*/
@Override
public synchronized Model solve(Order order) throws TimeoutException, ContradictionException {
if (!solverValid) {
throw new ContradictionException();
}
Constraint c = null;
while ((c = constraints.poll()) != null) {
addConstraintToSolver(c);
}
if (order instanceof VarOrder) {
VarOrder varOrder = (VarOrder) order;
VariableOrder o = new VariableOrder();
solver.setOrder(o);
for (Entry<Object, Double> entry : varOrder.getActivityEntrySet()) {
if (variables.containsKey(entry.getKey())) {
int var = variables.get(entry.getKey());
o.setVarActivity(var, entry.getValue());
}
}
for (Entry<Object, Boolean> entry : varOrder.getPhaseEntrySet()) {
if (variables.containsKey(entry.getKey())) {
int var = variables.get(entry.getKey());
o.setVarPhase(var, entry.getValue());
}
}
o.setVarInc(varOrder.getVarInc());
o.setVarDecay(varOrder.getVarDecay());
}
try {
boolean success = solver.isSatisfiable();
if (success) {
Model model = new Model();
for (Entry<Object, Integer> entry : variables.entrySet()) {
model.set(entry.getKey(), solver.model(entry.getValue()));
}
return model;
} else {
throw new ContradictionException();
}
} catch (org.sat4j.specs.TimeoutException e) {
throw new TimeoutException();
}
}
Aggregations