001 package se.liu.ida.critiquer.test; 002 003 004 import choco.AbstractConstraint; 005 import choco.Constraint; 006 import choco.ContradictionException; 007 import choco.integer.IntExp; 008 import choco.integer.IntVar; 009 import choco.palm.PalmProblem; 010 011 public class Test { 012 013 public static void main(String args[]) { 014 problemTester(); 015 } 016 017 018 private static void problemTester() { 019 PalmProblem p = new PalmProblem(); 020 021 IntVar a = p.makeConstantIntVar(3); 022 IntVar b = p.makeConstantIntVar(4); 023 IntVar c = p.makeBoundIntVar("c ", 0, 10); 024 Constraint sumConstraint = p.eq(p.sum(new IntExp[] {a,b}),c); 025 tryPropagate(p, sumConstraint); 026 pprint(c); 027 removeConstraint(p, sumConstraint); 028 pprint(c); 029 030 031 } 032 033 private static void pprint(IntVar var) { 034 System.out.println(var.pretty()); 035 } 036 037 private static void tryPropagate(PalmProblem p, Constraint constraint) { 038 039 try { 040 p.post(constraint); 041 p.propagate(); 042 } catch (ContradictionException e) { 043 /** 044 * No solution, so remove all constraints and add all except this one 045 */ 046 System.err.println("Contradiction for constraint "+constraint.pretty()); 047 removeConstraint(p, constraint); 048 try { 049 p.propagate(); 050 } catch (ContradictionException exception) { 051 System.err.println("Contradiction when removing constraint "+constraint.pretty()); 052 e.printStackTrace(); 053 } 054 } 055 } 056 057 private static void removeConstraint(PalmProblem p, Constraint c) { 058 p.remove(c); 059 p.eraseConstraint(p.getConstraintIndex((AbstractConstraint) c)); 060 try { 061 p.propagate(); 062 } catch (ContradictionException exception) { 063 System.err.println("Contradiction when removing constraint "+c.pretty()); 064 } 065 } 066 067 }