From e06ba8ea1346e5045a34508648ac93150aacb01a Mon Sep 17 00:00:00 2001 From: Jannis Harder Date: Fri, 17 Jun 2011 17:41:52 +0200 Subject: Reimplemented AI (old one was too slow) git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@443 72836036-5685-4462-b002-a69064685172 --- .../ai/fdsolver/constraint/IndexConstraint.java | 140 --------------------- 1 file changed, 140 deletions(-) delete mode 100644 src/jrummikub/ai/fdsolver/constraint/IndexConstraint.java (limited to 'src/jrummikub/ai/fdsolver/constraint/IndexConstraint.java') diff --git a/src/jrummikub/ai/fdsolver/constraint/IndexConstraint.java b/src/jrummikub/ai/fdsolver/constraint/IndexConstraint.java deleted file mode 100644 index 6698282..0000000 --- a/src/jrummikub/ai/fdsolver/constraint/IndexConstraint.java +++ /dev/null @@ -1,140 +0,0 @@ -package jrummikub.ai.fdsolver.constraint; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; - -import org.w3c.dom.ranges.Range; - -import jrummikub.ai.fdsolver.Constraint; -import jrummikub.ai.fdsolver.Propagator; -import jrummikub.ai.fdsolver.Satisfiability; -import jrummikub.ai.fdsolver.Var; - -public class IndexConstraint extends Constraint { - Var target; - Var index; - List> list; - Collection> vars = new ArrayList>(); - Collection> varsNoTarget = new ArrayList>(); - Collection> varsNoIndex = new ArrayList>(); - - public IndexConstraint(Var target, Var index, List> list) { - this.target = target; - this.index = index; - this.list = list; - vars.addAll(list); - vars.add(index); - vars.add(target); - varsNoTarget.addAll(list); - varsNoTarget.add(index); - varsNoIndex.addAll(list); - varsNoIndex.add(target); - } - - @Override - public Collection> getWatchedVars() { - return vars; - } - - private class UnionProp implements Propagator { - @Override - public Collection> getWatchedVars() { - return varsNoTarget; - } - - @Override - public void propagate() { - HashSet invUnion = new HashSet(target.getRange()); - for (int i : index.getRange()) { - invUnion.removeAll(list.get(i).getRange()); - if (invUnion.isEmpty()) { - return; - } - } - for (T val : invUnion) { - target.invalidate(val); - } - }; - } - - private class IndexProp implements Propagator { - @Override - public Collection> getWatchedVars() { - return varsNoIndex; - } - - @Override - public void propagate() { - for (Iterator i = index.iterator(); i.hasNext();) { - int id = i.next(); - Var item = list.get(id); - if (Collections.disjoint(item.getRange(), target.getRange())) { - i.remove(); - } - } - } - } - - private class VarProp implements Propagator { - @Override - public Collection> getWatchedVars() { - return Arrays.asList(target, index); - } - - @Override - public void propagate() { - if (index.getRange().size() != 1) - return; - int id = index.getValue(); - Var var = list.get(id); - for(Iterator i = var.iterator(); i.hasNext();) { - if (!target.getRange().contains(i.next())) { - i.remove(); - } - } - } - - } - - @Override - public Collection getPropagators(boolean negate) { - if (negate) { - return Collections.emptyList(); - } - return Arrays. asList(new UnionProp(), new IndexProp(), new VarProp()); - } - - @Override - public boolean isSatisfiable() { - for (int i : index.getRange()) { - if(!Collections.disjoint(list.get(i).getRange(), target.getRange())) { - return true; - } - } - return false; - } - - @Override - public Satisfiability getSatisfiability() { - boolean sat = isSatisfiable(); - if (!sat) { - return Satisfiability.UNSAT; - } - if (target.getRange().size() > 1) - return Satisfiability.SAT; - for (int i : index.getRange()) { - Var var = list.get(i); - if (var.getRange().size() > 1) - return Satisfiability.SAT; - if(var.getValue() != target.getValue()) { - return Satisfiability.SAT; - } - } - return Satisfiability.TAUT; - } -} -- cgit v1.2.3