TORA example

This commit is contained in:
Naveen Sundar Govindarajulu 2018-06-18 18:29:40 -07:00
parent 2624b0c411
commit 32e7a8fe4c
6 changed files with 88 additions and 8 deletions

View file

@ -132,7 +132,14 @@ public class Action {
public List<Variable> openVars() {
return freeVariables;
Set<Variable> variables = Sets.newSet();
variables.addAll(freeVariables);
List<Variable> variablesList = CollectionUtils.newEmptyList();
variablesList.addAll(variables);
return variablesList;
}

View file

@ -42,15 +42,18 @@ public class Sandbox {
public static void main(String[] args) throws com.naveensundarg.shadow.prover.utils.Reader.ParsingException {
List<PlanningProblem> planningProblemList = (PlanningProblem.readFromFile(Sandbox.class.getResourceAsStream("../problems/tora/sodacan.clj")));
List<PlanningProblem> planningProblemList = (PlanningProblem.readFromFile(Sandbox.class.getResourceAsStream("../problems/tora/attend.clj")));
Planner depthFirstPlanner = new DepthFirstPlanner();
PlanningProblem planningProblem = planningProblemList.stream().filter(problem -> problem.getName().equals("soda can challenge")).findFirst().get();
PlanningProblem planningProblem = planningProblemList.stream().filter(problem -> problem.getName().equals("soda can challenge 2")).findFirst().get();
depthFirstPlanner.plan(planningProblem.getBackground(), planningProblem.getActions(), planningProblem.getStart(), planningProblem.getGoal()).ifPresent(
System.out::println
y->{
System.out.println(y);
}
);

View file

@ -0,0 +1,42 @@
{:name "soda can challenge 2"
:background [ ;; Membership in a list
(forall [?u ?l]
(iff (member ?u ?l)
(exists [?v ?rest]
(and (= ?l (cons ?v ?rest))
(or (= ?u ?v)
(member ?u ?rest))))))
;; Empty list
(forall ?x (not (member ?x el)))
;; Removal clause 1
(forall [?item] (= (remove ?item el) el))
;; Removal clause 2
(forall [?item ?rest]
(= (remove ?item (cons ?item ?rest))
(remove ?item ?rest)))
;; Remove clause 3
(forall [?item ?head ?rest]
(if
(not (= ?head ?item))
(= (remove ?item (cons ?head ?rest))
(cons ?head (remove ?item ?rest)))))]
:start [(state (cons a (cons b (cons c el))))
(and (not (= a b))
(not (= b c))
(not (= c a))
(not (= a el))
(not (= b el))
(not (= c el)))]
:goal [(attend a)
(attend b)
(attend c)]
:actions [;; checkbehind an object
(define-action attend [?item]
{:preconditions [(member ?item ?list)
(state ?list)]
:additions [(attend ?item)
(state (remove ?item ?list))]
:deletions [(state ?list)]})]}

View file

@ -0,0 +1,27 @@
{:name "soda can challenge 2"
:background [;; Checks if something is an element of a list
(forall [?thing ?w ?list] (iff (Elem ?thing ?list) (Elem ?thing (Cons ?w ?list))))
(forall [?thing] (Elem ?thing (Cons ?thing el)))
;; Removes an element from a list
(forall [?u ?l1 ?l2]
(if
(and
(not (Elem ?u ?l2))
(forall [?x]
(if
(Elem ?x ?l1)
(or (= ?x ?u) (Elem ?x ?l2)))))
(Removed ?u ?l1 ?l2)))]
:start [(Cons a (Cons b (Cons f el)))]
:goal [(Cons a el)
(Cons b el)
(Cons f el)]
:actions [;; Checkbehind an object
(define-action attend [?q ?l]
{:preconditions [(Elem ?q ?l)
(Removed ?q ?l ?l2)]
:additions [(Cons ?q el)]
:deletions []})]}