import java.util.LinkedList; public class A3 { public static void main(String args[]) { Literal l1 = new Literal("on ?x b"); System.out.println(l1); try { Literal l2 = new Literal(""); System.out.println(l2); } catch(IllegalArgumentException e) { System.out.println(e.getMessage()); } Literal l5 = new Literal("f"); System.out.println(l5); LinkedList parameters1 = new LinkedList(); LiteralList preconds1 = new LiteralList(); preconds1.addLiteral(new Literal("on man nearBank")); LiteralList addList1 = new LiteralList(); addList1.addLiteral(new Literal("on man farBank")); LiteralList deleteList1 = new LiteralList(); deleteList1.addLiteral(new Literal("on man nearBank")); Action action1 = new Action("rowToFarBank", parameters1, preconds1, addList1, deleteList1); System.out.println(action1); PlanningState rowingState = new PlanningState(); rowingState.addLiteral(new Literal("on man nearBank")); rowingState.addLiteral(new Literal("on wolf nearBank")); rowingState.addLiteral(new Literal("on goat nearBank")); rowingState.addLiteral(new Literal("on cabbage nearBank")); try { rowingState.addLiteral(new Literal("on ?x nearBank")); } catch(IllegalArgumentException e) { System.out.println(e.getMessage()); } LinkedList parameters2 = new LinkedList(); LiteralList preconds2 = new LiteralList(); preconds2.addLiteral(new Literal("on man farBank")); LiteralList addList2 = new LiteralList(); addList2.addLiteral(new Literal("on man nearBank")); LiteralList deleteList2 = new LiteralList(); deleteList2.addLiteral(new Literal("on man farBank")); Action action2 = new Action("rowToNearBank", parameters2, preconds2, addList2, deleteList2); System.out.println(action2); LinkedList parameters3 = new LinkedList(); parameters3.add(new Term("?x")); LiteralList preconds3 = new LiteralList(); preconds3.addLiteral(new Literal("on man nearBank")); preconds3.addLiteral(new Literal("on ?x nearBank")); LiteralList addList3 = new LiteralList(); addList3.addLiteral(new Literal("on man farBank")); addList3.addLiteral(new Literal("on ?x farBank")); LiteralList deleteList3 = new LiteralList(); deleteList3.addLiteral(new Literal("on man nearBank")); deleteList3.addLiteral(new Literal("on ?x nearBank")); Action action3 = new Action("rowToFarBank", parameters3, preconds3, addList3, deleteList3); System.out.println(action3); LinkedList parameters4 = new LinkedList(); parameters4.add(new Term("?x")); LiteralList preconds4 = new LiteralList(); preconds4.addLiteral(new Literal("on man farBank")); preconds4.addLiteral(new Literal("on ?x farBank")); LiteralList addList4 = new LiteralList(); addList4.addLiteral(new Literal("on man nearBank")); addList4.addLiteral(new Literal("on ?x nearBank")); LiteralList deleteList4 = new LiteralList(); deleteList4.addLiteral(new Literal("on man farBank")); deleteList4.addLiteral(new Literal("on ?x farBank")); Action action4 = new Action("rowToNearBank", parameters4, preconds4, addList4, deleteList4); System.out.println(action4); rowingState.addAction(action1); rowingState.addAction(action2); rowingState.addAction(action3); rowingState.addAction(action4); System.out.println(rowingState); System.out.println(); System.out.println(rowingState.findMatches(preconds3)); // The state representing // C // A B // ---------------------- // | | PlanningState blockState0 = new PlanningState(); blockState0.addLiteral(new Literal("on c a")); blockState0.addLiteral(new Literal("clear b")); blockState0.addLiteral(new Literal("clear c")); blockState0.addLiteral(new Literal("ontable a")); blockState0.addLiteral(new Literal("ontable b")); Literal literal1 = new Literal("on ?x ?y"); Literal literal2 = new Literal("clear ?x"); Literal literal3 = new Literal("ontable ?y"); LiteralList list1 = new LiteralList(); list1.addLiteral(literal1); list1.addLiteral(literal2); list1.addLiteral(literal3); LiteralList list2 = new LiteralList(); list2.addLiteral(literal2); list2.addLiteral(literal1); list2.addLiteral(literal3); System.out.println(blockState0.findMatches(list1)); System.out.println(blockState0.findMatches(list2)); // an action that moves a block x from some other block // to the table LinkedList parameters5 = new LinkedList(); parameters5.add(new Term("?x")); LiteralList preconds5 = new LiteralList(); preconds5.addLiteral(new Literal("on ?x ?y")); preconds5.addLiteral(new Literal("clear ?x")); LiteralList addList5 = new LiteralList(); addList5.addLiteral(new Literal("ontable ?x")); addList5.addLiteral(new Literal("clear ?y")); LiteralList deleteList5 = new LiteralList(); deleteList5.addLiteral(new Literal("on ?x ?y")); Action action5 = new Action("moveToTable", parameters5, preconds5, addList5, deleteList5); System.out.println(action5); // an action that moves a block x from the table // to the top of a block y LinkedList parameters6 = new LinkedList(); parameters6.add(new Term("?x")); parameters6.add(new Term("?y")); LiteralList preconds6 = new LiteralList(); preconds6.addLiteral(new Literal("ontable ?x")); preconds6.addLiteral(new Literal("clear ?x")); preconds6.addLiteral(new Literal("clear ?y")); LiteralList addList6 = new LiteralList(); addList6.addLiteral(new Literal("on ?x ?y")); LiteralList deleteList6 = new LiteralList(); deleteList6.addLiteral(new Literal("ontable ?x")); deleteList6.addLiteral(new Literal("clear ?y")); Action action6 = new Action("moveFromTable", parameters6, preconds6, addList6, deleteList6); System.out.println(action6); // an action that moves a block x from the top of block y // to the top of block z LinkedList parameters7 = new LinkedList(); parameters7.add(new Term("?x")); parameters7.add(new Term("?y")); parameters7.add(new Term("?z")); LiteralList preconds7 = new LiteralList(); preconds7.addLiteral(new Literal("on ?x ?y")); preconds7.addLiteral(new Literal("clear ?x")); preconds7.addLiteral(new Literal("clear ?z")); LiteralList addList7 = new LiteralList(); addList7.addLiteral(new Literal("on ?x ?z")); addList7.addLiteral(new Literal("clear ?y")); LiteralList deleteList7 = new LiteralList(); deleteList7.addLiteral(new Literal("on ?x ?y")); deleteList7.addLiteral(new Literal("clear ?z")); Action action7 = new Action("move", parameters7, preconds7, addList7, deleteList7); System.out.println(action7); System.out.println(blockState0.findMatches(preconds5)); System.out.println(blockState0.findMatches(preconds6)); System.out.println(blockState0.findMatches(preconds7)); AStar aStar = new AStar(); State result; LiteralList rowingGoal = new LiteralList(); rowingGoal.addLiteral(new Literal("on man farBank")); rowingGoal.addLiteral(new Literal("on wolf farBank")); rowingGoal.addLiteral(new Literal("on goat farBank")); rowingGoal.addLiteral(new Literal("on cabbage farBank")); rowingState.setGoal(rowingGoal); try { result = aStar.search(rowingState, true); System.out.println(result); System.out.println(String.valueOf(result.isGoal())); } catch(OutOfMemoryError e) { System.out.println("out of memory in test case 1"); } System.out.println("===================="); blockState0.addAction(action5); blockState0.addAction(action6); blockState0.addAction(action7); LiteralList blocksGoal1 = new LiteralList(); blocksGoal1.addLiteral(new Literal("on a b")); blocksGoal1.addLiteral(new Literal("on b c")); blocksGoal1.addLiteral(new Literal("ontable c")); blockState0.setGoal(blocksGoal1); try { result = aStar.search(blockState0, true); System.out.println(result); System.out.println(String.valueOf(result.isGoal())); } catch(OutOfMemoryError e) { System.out.println("out of memory in test case 2"); } System.out.println("===================="); // add a new pile of blocks D, E, F, G to the table blockState0.addLiteral(new Literal("clear d")); blockState0.addLiteral(new Literal("on d e")); blockState0.addLiteral(new Literal("on e f")); blockState0.addLiteral(new Literal("on f g")); blockState0.addLiteral(new Literal("ontable g")); LiteralList blocksGoal2 = new LiteralList(); blocksGoal2.addLiteral(new Literal("clear g")); blocksGoal2.addLiteral(new Literal("on g c")); blocksGoal2.addLiteral(new Literal("on c e")); blocksGoal2.addLiteral(new Literal("ontable e")); blockState0.setGoal(blocksGoal2); try { result = aStar.search(blockState0, true); System.out.println(result); System.out.println(String.valueOf(result.isGoal())); } catch(OutOfMemoryError e) { System.out.println("out of memory in test case 3"); } System.out.println("===================="); System.out.println(blockState0); blocksGoal2.addLiteral(new Literal("on d a")); blockState0.setGoal(blocksGoal2); try { result = aStar.search(blockState0, false); PlanningState oldState = (PlanningState) result; System.out.println(result); System.out.println(String.valueOf(result.isGoal())); System.out.println(); LiteralList blocksGoal3 = new LiteralList(); blocksGoal3.addLiteral(new Literal("on e a")); blocksGoal3.addLiteral(new Literal("on c g")); oldState.setGoal(blocksGoal3); result = (PlanningState) aStar.search(oldState,false); System.out.println(result); System.out.println(String.valueOf(result.isGoal())); } catch(OutOfMemoryError e) { System.out.println("out of memory in test case 4"); } } }