import static choco.Choco.*; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.util.ArrayList; import java.util.Scanner; import java.util.Stack; import choco.cp.model.CPModel; import choco.cp.solver.CPSolver; import choco.kernel.model.Model; import choco.kernel.solver.Solver; import choco.kernel.model.constraints.Constraint; import choco.kernel.model.variables.integer.IntegerVariable; import choco.kernel.solver.ContradictionException; import choco.kernel.solver.variables.integer.IntDomainVar; public class Solve { private static Solver s; private static Scanner sc; private static Stack history = new Stack(); private static int[] value; public static void main(String[] args) throws FileNotFoundException, ContradictionException { String commands = "\nMeeting scheduling problem\n" + "set (s), remove (r), undo (u), quit (q), help\n"; /* Code from Solve AE2 */ Model model = new CPModel(); Scanner fileScanner = new Scanner(new FileInputStream(args[0])); int meetings = fileScanner.nextInt(); int agents = fileScanner.nextInt(); int timeslots = fileScanner.nextInt(); IntegerVariable[] meeting = makeIntVarArray("v",meetings,0,timeslots-1); value = new int[meetings]; for (int i = 0; i attending = getMeetings(agent); if (attending.size() > 1) { for (int i=0; i "); String command = sc.next(); while (!command.equals("quit") && !command.equals("q")){ if (command.equals("set") || command.equals("s")) set(meetingVars); if (command.equals("remove") || command.equals("r")) remove(meetingVars); if (command.equals("undo") || command.equals("u")) undo(meetingVars); if (command.equals("help")) System.out.println(commands); System.out.println(); for (int i=0;i "); command = sc.next(); } } private static void set(IntDomainVar[] v) throws ContradictionException { System.out.print("var index > "); int index = sc.nextInt(); System.out.print("value > "); int val = sc.nextInt(); history.push(value.clone()); value[index] = val; s.worldPop(); s.worldPush(); for (int i=0;i 0) v[i].setVal(value[i]); s.propagate(); } private static void remove(IntDomainVar[] v) throws ContradictionException { System.out.print("var index > "); int index = sc.nextInt(); history.push(value.clone()); value[index] = -1; s.worldPop(); s.worldPush(); for (int i=0;i 0) v[i].setVal(value[i]); s.propagate(); } private static void undo(IntDomainVar[] v) throws ContradictionException { value = history.pop(); s.worldPop(); s.worldPush(); for (int i=0;i 0) v[i].setVal(value[i]); s.propagate(); } /* * Method from Solve AE2 * Given an agents attendance row, return an array of meetings they attend */ private static ArrayList getMeetings(int[] agent) { ArrayList meetings = new ArrayList(); for (int i=0; i