From 966965816a39d7fd1eecc23e67255c511975b605 Mon Sep 17 00:00:00 2001 From: rahulptel Date: Thu, 8 Sep 2016 22:23:28 +0530 Subject: [PATCH 1/3] Added implementation of Three Block Tower and Cake Problem in Planning module --- planning.py | 62 ++++++++++++++++++++++++++++++++++++++++++ tests/test_planning.py | 22 +++++++++++++++ 2 files changed, 84 insertions(+) diff --git a/planning.py b/planning.py index 92f4f773e..a361133b0 100644 --- a/planning.py +++ b/planning.py @@ -175,3 +175,65 @@ def goal_test(kb): leave_overnight = Action(expr("LeaveOvernight"), [precond_pos, precond_neg], [effect_add, effect_rem]) return PDLL(init, [remove, put_on, leave_overnight], goal_test) + +def three_block_tower(): + init = [expr('On(A, Table)'), + expr('On(B, Table)'), + expr('On(C, A)'), + expr('Block(A)'), + expr('Block(B)'), + expr('Block(C)'), + expr('Clear(B)'), + expr('Clear(C)')] + + def goal_test(kb): + required = [expr('On(A, B)'), expr('On(B, C)')] + for q in required: + if kb.ask(q) is False: + return False + return True + + ## Actions + # Move + precond_pos = [expr('On(b, x)'), expr('Clear(b)'), expr('Clear(y)'), expr('Block(b)'), + expr('Block(y)'), expr('b != x'), expr('b != y'), expr('x != y')] + precond_neg = [] + effect_add = [expr('On(b, y)'), expr('Clear(x)')] + effect_rem = [expr('On(b, x)'), expr('Clear(y)')] + move = Action(expr('Move(b, x, y)'), [precond_pos, precond_neg], [effect_add, effect_rem]) + + # MoveToTable + precond_pos = [expr('On(b, x)'), expr('Clear(b)'), expr('Block(b)'), expr('b != x')] + precond_neg = [] + effect_add = [expr('On(b, Table)'), expr('Clear(x)')] + effect_rem = [expr('On(b, x)')] + moveToTable = Action(expr('MoveToTable(b, x)'), [precond_pos, precond_neg], [effect_add, effect_rem]) + + return PDLL(init, [move, moveToTable], goal_test) + +def cake(): + init = [expr('Have(Cake)')] + + def goal_test(kb): + required = [expr('Have(Cake)'), expr('Eaten(Cake)')] + for q in required: + if kb.ask(q) is False: + return False + return True + + ## Actions + # Eat + precond_pos = [expr('Have(Cake)')] + precond_neg = [] + effect_add = [expr('Eaten(Cake)')] + effect_rem = [expr('Have(Cake)')] + eat = Action(expr('Eat(Cake)'), [precond_pos, precond_neg], [effect_add, effect_rem]) + + # Bake + precond_pos = [] + precond_neg = [expr('Have(Cake)')] + effect_add = [expr('Have(Cake)')] + effect_rem = [] + bake = Action(expr('Bake(Cake)'), [precond_pos, precond_neg], [effect_add, effect_rem]) + + return PDLL(init, [eat, bake], goal_test) diff --git a/tests/test_planning.py b/tests/test_planning.py index e90601a6f..4e462f052 100644 --- a/tests/test_planning.py +++ b/tests/test_planning.py @@ -34,3 +34,25 @@ def test_air_cargo(): p.act(action) assert p.goal_test() + +def test_spare_tire(): + p = spare_tire() + assert p.goal_test() is False + solution = [expr("Remove(Flat, Axle)"), + expr("Remove(Spare, Trunk)"), + expr("PutOn(Spare, Axle)")] + + for action in solution: + p.act(action) + +def test_three_block_tower(): + p = three_block_tower() + assert p.goal_test() is False + solution = [expr("MoveToTable(C, A)"), + expr("Move(B, Table, C)"), + expr("Move(A, Table, B)")] + + for action in solution: + p.act(action) + + From 88705569754d67b8ba95980847e66c673d468581 Mon Sep 17 00:00:00 2001 From: Rahul Patel Date: Thu, 15 Sep 2016 09:00:45 +0530 Subject: [PATCH 2/3] Update planning --- tests/test_planning.py | 22 ---------------------- 1 file changed, 22 deletions(-) diff --git a/tests/test_planning.py b/tests/test_planning.py index 4e462f052..e90601a6f 100644 --- a/tests/test_planning.py +++ b/tests/test_planning.py @@ -34,25 +34,3 @@ def test_air_cargo(): p.act(action) assert p.goal_test() - -def test_spare_tire(): - p = spare_tire() - assert p.goal_test() is False - solution = [expr("Remove(Flat, Axle)"), - expr("Remove(Spare, Trunk)"), - expr("PutOn(Spare, Axle)")] - - for action in solution: - p.act(action) - -def test_three_block_tower(): - p = three_block_tower() - assert p.goal_test() is False - solution = [expr("MoveToTable(C, A)"), - expr("Move(B, Table, C)"), - expr("Move(A, Table, B)")] - - for action in solution: - p.act(action) - - From 92f75b5d62f3ddb4bc27e458ddb4e05b5f2cbc3c Mon Sep 17 00:00:00 2001 From: Rahul Patel Date: Fri, 16 Sep 2016 08:08:40 +0530 Subject: [PATCH 3/3] removed three block tower and cake --- planning.py | 62 ----------------------------------------------------- 1 file changed, 62 deletions(-) diff --git a/planning.py b/planning.py index a361133b0..92f4f773e 100644 --- a/planning.py +++ b/planning.py @@ -175,65 +175,3 @@ def goal_test(kb): leave_overnight = Action(expr("LeaveOvernight"), [precond_pos, precond_neg], [effect_add, effect_rem]) return PDLL(init, [remove, put_on, leave_overnight], goal_test) - -def three_block_tower(): - init = [expr('On(A, Table)'), - expr('On(B, Table)'), - expr('On(C, A)'), - expr('Block(A)'), - expr('Block(B)'), - expr('Block(C)'), - expr('Clear(B)'), - expr('Clear(C)')] - - def goal_test(kb): - required = [expr('On(A, B)'), expr('On(B, C)')] - for q in required: - if kb.ask(q) is False: - return False - return True - - ## Actions - # Move - precond_pos = [expr('On(b, x)'), expr('Clear(b)'), expr('Clear(y)'), expr('Block(b)'), - expr('Block(y)'), expr('b != x'), expr('b != y'), expr('x != y')] - precond_neg = [] - effect_add = [expr('On(b, y)'), expr('Clear(x)')] - effect_rem = [expr('On(b, x)'), expr('Clear(y)')] - move = Action(expr('Move(b, x, y)'), [precond_pos, precond_neg], [effect_add, effect_rem]) - - # MoveToTable - precond_pos = [expr('On(b, x)'), expr('Clear(b)'), expr('Block(b)'), expr('b != x')] - precond_neg = [] - effect_add = [expr('On(b, Table)'), expr('Clear(x)')] - effect_rem = [expr('On(b, x)')] - moveToTable = Action(expr('MoveToTable(b, x)'), [precond_pos, precond_neg], [effect_add, effect_rem]) - - return PDLL(init, [move, moveToTable], goal_test) - -def cake(): - init = [expr('Have(Cake)')] - - def goal_test(kb): - required = [expr('Have(Cake)'), expr('Eaten(Cake)')] - for q in required: - if kb.ask(q) is False: - return False - return True - - ## Actions - # Eat - precond_pos = [expr('Have(Cake)')] - precond_neg = [] - effect_add = [expr('Eaten(Cake)')] - effect_rem = [expr('Have(Cake)')] - eat = Action(expr('Eat(Cake)'), [precond_pos, precond_neg], [effect_add, effect_rem]) - - # Bake - precond_pos = [] - precond_neg = [expr('Have(Cake)')] - effect_add = [expr('Have(Cake)')] - effect_rem = [] - bake = Action(expr('Bake(Cake)'), [precond_pos, precond_neg], [effect_add, effect_rem]) - - return PDLL(init, [eat, bake], goal_test)