Cache propagators
git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@437 72836036-5685-4462-b002-a69064685172
This commit is contained in:
parent
7568f37824
commit
0a63df955e
9 changed files with 15 additions and 13 deletions
|
@ -2,10 +2,12 @@ package jrummikub.ai.fdsolver;
|
|||
|
||||
import java.util.Collection;
|
||||
|
||||
public interface Constraint {
|
||||
public Collection<Var<?>> getWatchedVars();
|
||||
public abstract class Constraint {
|
||||
Collection<Propagator> cachedPropagators;
|
||||
|
||||
public Collection<Propagator> getPropagators(boolean negate);
|
||||
public abstract Collection<Var<?>> getWatchedVars();
|
||||
|
||||
public Satisfiability getSatisfiability();
|
||||
public abstract Collection<Propagator> getPropagators(boolean negate);
|
||||
|
||||
public abstract Satisfiability getSatisfiability();
|
||||
}
|
||||
|
|
|
@ -99,7 +99,7 @@ public class Solver {
|
|||
finishedConstraint(constraint, dirtyVar);
|
||||
continue;
|
||||
}
|
||||
for (Propagator propagator : constraint.getPropagators(false)) {
|
||||
for (Propagator propagator : constraint.cachedPropagators) {
|
||||
if (propagator.getWatchedVars().contains(dirtyVar)) {
|
||||
propagator.propagate();
|
||||
if (contradiction) {
|
||||
|
@ -124,8 +124,8 @@ public class Solver {
|
|||
}
|
||||
|
||||
public void addConstraint(Constraint constraint) {
|
||||
constraint.cachedPropagators = constraint.getPropagators(false);
|
||||
constraints.add(constraint);
|
||||
|
||||
for (Var<?> var : constraint.getWatchedVars()) {
|
||||
var.makeDirty();
|
||||
var.getConstraints().add(constraint);
|
||||
|
|
|
@ -12,7 +12,7 @@ import jrummikub.ai.fdsolver.Propagator;
|
|||
import jrummikub.ai.fdsolver.Satisfiability;
|
||||
import jrummikub.ai.fdsolver.Var;
|
||||
|
||||
public class ComparatorConstraint<T> implements Constraint {
|
||||
public class ComparatorConstraint<T> extends Constraint {
|
||||
Var<T> x, y;
|
||||
Comparator<T> comparator, reverseComparator;
|
||||
ComparatorPropagator<T> trueX, trueY, falseX, falseY;
|
||||
|
|
|
@ -12,7 +12,7 @@ import jrummikub.ai.fdsolver.Propagator;
|
|||
import jrummikub.ai.fdsolver.Satisfiability;
|
||||
import jrummikub.ai.fdsolver.Var;
|
||||
|
||||
public class FilterConstraint<T> implements Constraint {
|
||||
public class FilterConstraint<T> extends Constraint {
|
||||
private Var<T> var;
|
||||
private Propagator trueProp, falseProp;
|
||||
private Filter<T> filter;
|
||||
|
|
|
@ -11,7 +11,7 @@ import jrummikub.ai.fdsolver.Propagator;
|
|||
import jrummikub.ai.fdsolver.Satisfiability;
|
||||
import jrummikub.ai.fdsolver.Var;
|
||||
|
||||
public class IfConstraint implements Constraint {
|
||||
public class IfConstraint extends Constraint {
|
||||
Var<Boolean> condition;
|
||||
Constraint child;
|
||||
Collection<Var<?>> vars;
|
||||
|
|
|
@ -13,7 +13,7 @@ import jrummikub.ai.fdsolver.Propagator;
|
|||
import jrummikub.ai.fdsolver.Satisfiability;
|
||||
import jrummikub.ai.fdsolver.Var;
|
||||
|
||||
public class IndexConstraint<T> implements Constraint {
|
||||
public class IndexConstraint<T> extends Constraint {
|
||||
Var<T> target;
|
||||
Var<Integer> index;
|
||||
List<Var<T>> list;
|
||||
|
|
|
@ -10,7 +10,7 @@ import jrummikub.ai.fdsolver.Propagator;
|
|||
import jrummikub.ai.fdsolver.Satisfiability;
|
||||
import jrummikub.ai.fdsolver.Var;
|
||||
|
||||
public class OffsetConstraint implements Constraint {
|
||||
public class OffsetConstraint extends Constraint {
|
||||
private Var<Integer> x, y;
|
||||
int offset;
|
||||
Propagator propX, propY;
|
||||
|
|
|
@ -10,7 +10,7 @@ import jrummikub.ai.fdsolver.Propagator;
|
|||
import jrummikub.ai.fdsolver.Satisfiability;
|
||||
import jrummikub.ai.fdsolver.Var;
|
||||
|
||||
public class SameConstraint<T> implements Constraint {
|
||||
public class SameConstraint<T> extends Constraint {
|
||||
private Var<T> x, y;
|
||||
Propagator propX, propY;
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ import jrummikub.ai.fdsolver.Propagator;
|
|||
import jrummikub.ai.fdsolver.Satisfiability;
|
||||
import jrummikub.ai.fdsolver.Var;
|
||||
|
||||
public class SumConstraint implements Constraint {
|
||||
public class SumConstraint extends Constraint {
|
||||
Var<Integer> x, y, z;
|
||||
|
||||
public SumConstraint(Var<Integer> x, Var<Integer> y, Var<Integer> z) {
|
||||
|
|
Reference in a new issue