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;
|
import java.util.Collection;
|
||||||
|
|
||||||
public interface Constraint {
|
public abstract class Constraint {
|
||||||
public Collection<Var<?>> getWatchedVars();
|
Collection<Propagator> cachedPropagators;
|
||||||
|
|
||||||
|
public abstract Collection<Var<?>> getWatchedVars();
|
||||||
|
|
||||||
public Collection<Propagator> getPropagators(boolean negate);
|
public abstract Collection<Propagator> getPropagators(boolean negate);
|
||||||
|
|
||||||
public Satisfiability getSatisfiability();
|
public abstract Satisfiability getSatisfiability();
|
||||||
}
|
}
|
||||||
|
|
|
@ -99,7 +99,7 @@ public class Solver {
|
||||||
finishedConstraint(constraint, dirtyVar);
|
finishedConstraint(constraint, dirtyVar);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
for (Propagator propagator : constraint.getPropagators(false)) {
|
for (Propagator propagator : constraint.cachedPropagators) {
|
||||||
if (propagator.getWatchedVars().contains(dirtyVar)) {
|
if (propagator.getWatchedVars().contains(dirtyVar)) {
|
||||||
propagator.propagate();
|
propagator.propagate();
|
||||||
if (contradiction) {
|
if (contradiction) {
|
||||||
|
@ -124,8 +124,8 @@ public class Solver {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addConstraint(Constraint constraint) {
|
public void addConstraint(Constraint constraint) {
|
||||||
|
constraint.cachedPropagators = constraint.getPropagators(false);
|
||||||
constraints.add(constraint);
|
constraints.add(constraint);
|
||||||
|
|
||||||
for (Var<?> var : constraint.getWatchedVars()) {
|
for (Var<?> var : constraint.getWatchedVars()) {
|
||||||
var.makeDirty();
|
var.makeDirty();
|
||||||
var.getConstraints().add(constraint);
|
var.getConstraints().add(constraint);
|
||||||
|
|
|
@ -12,7 +12,7 @@ import jrummikub.ai.fdsolver.Propagator;
|
||||||
import jrummikub.ai.fdsolver.Satisfiability;
|
import jrummikub.ai.fdsolver.Satisfiability;
|
||||||
import jrummikub.ai.fdsolver.Var;
|
import jrummikub.ai.fdsolver.Var;
|
||||||
|
|
||||||
public class ComparatorConstraint<T> implements Constraint {
|
public class ComparatorConstraint<T> extends Constraint {
|
||||||
Var<T> x, y;
|
Var<T> x, y;
|
||||||
Comparator<T> comparator, reverseComparator;
|
Comparator<T> comparator, reverseComparator;
|
||||||
ComparatorPropagator<T> trueX, trueY, falseX, falseY;
|
ComparatorPropagator<T> trueX, trueY, falseX, falseY;
|
||||||
|
|
|
@ -12,7 +12,7 @@ import jrummikub.ai.fdsolver.Propagator;
|
||||||
import jrummikub.ai.fdsolver.Satisfiability;
|
import jrummikub.ai.fdsolver.Satisfiability;
|
||||||
import jrummikub.ai.fdsolver.Var;
|
import jrummikub.ai.fdsolver.Var;
|
||||||
|
|
||||||
public class FilterConstraint<T> implements Constraint {
|
public class FilterConstraint<T> extends Constraint {
|
||||||
private Var<T> var;
|
private Var<T> var;
|
||||||
private Propagator trueProp, falseProp;
|
private Propagator trueProp, falseProp;
|
||||||
private Filter<T> filter;
|
private Filter<T> filter;
|
||||||
|
|
|
@ -11,7 +11,7 @@ import jrummikub.ai.fdsolver.Propagator;
|
||||||
import jrummikub.ai.fdsolver.Satisfiability;
|
import jrummikub.ai.fdsolver.Satisfiability;
|
||||||
import jrummikub.ai.fdsolver.Var;
|
import jrummikub.ai.fdsolver.Var;
|
||||||
|
|
||||||
public class IfConstraint implements Constraint {
|
public class IfConstraint extends Constraint {
|
||||||
Var<Boolean> condition;
|
Var<Boolean> condition;
|
||||||
Constraint child;
|
Constraint child;
|
||||||
Collection<Var<?>> vars;
|
Collection<Var<?>> vars;
|
||||||
|
|
|
@ -13,7 +13,7 @@ import jrummikub.ai.fdsolver.Propagator;
|
||||||
import jrummikub.ai.fdsolver.Satisfiability;
|
import jrummikub.ai.fdsolver.Satisfiability;
|
||||||
import jrummikub.ai.fdsolver.Var;
|
import jrummikub.ai.fdsolver.Var;
|
||||||
|
|
||||||
public class IndexConstraint<T> implements Constraint {
|
public class IndexConstraint<T> extends Constraint {
|
||||||
Var<T> target;
|
Var<T> target;
|
||||||
Var<Integer> index;
|
Var<Integer> index;
|
||||||
List<Var<T>> list;
|
List<Var<T>> list;
|
||||||
|
|
|
@ -10,7 +10,7 @@ import jrummikub.ai.fdsolver.Propagator;
|
||||||
import jrummikub.ai.fdsolver.Satisfiability;
|
import jrummikub.ai.fdsolver.Satisfiability;
|
||||||
import jrummikub.ai.fdsolver.Var;
|
import jrummikub.ai.fdsolver.Var;
|
||||||
|
|
||||||
public class OffsetConstraint implements Constraint {
|
public class OffsetConstraint extends Constraint {
|
||||||
private Var<Integer> x, y;
|
private Var<Integer> x, y;
|
||||||
int offset;
|
int offset;
|
||||||
Propagator propX, propY;
|
Propagator propX, propY;
|
||||||
|
|
|
@ -10,7 +10,7 @@ import jrummikub.ai.fdsolver.Propagator;
|
||||||
import jrummikub.ai.fdsolver.Satisfiability;
|
import jrummikub.ai.fdsolver.Satisfiability;
|
||||||
import jrummikub.ai.fdsolver.Var;
|
import jrummikub.ai.fdsolver.Var;
|
||||||
|
|
||||||
public class SameConstraint<T> implements Constraint {
|
public class SameConstraint<T> extends Constraint {
|
||||||
private Var<T> x, y;
|
private Var<T> x, y;
|
||||||
Propagator propX, propY;
|
Propagator propX, propY;
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@ import jrummikub.ai.fdsolver.Propagator;
|
||||||
import jrummikub.ai.fdsolver.Satisfiability;
|
import jrummikub.ai.fdsolver.Satisfiability;
|
||||||
import jrummikub.ai.fdsolver.Var;
|
import jrummikub.ai.fdsolver.Var;
|
||||||
|
|
||||||
public class SumConstraint implements Constraint {
|
public class SumConstraint extends Constraint {
|
||||||
Var<Integer> x, y, z;
|
Var<Integer> x, y, z;
|
||||||
|
|
||||||
public SumConstraint(Var<Integer> x, Var<Integer> y, Var<Integer> z) {
|
public SumConstraint(Var<Integer> x, Var<Integer> y, Var<Integer> z) {
|
||||||
|
|
Reference in a new issue