mirror of
				https://github.com/RAIRLab/Spectra.git
				synced 2025-11-02 23:01:20 +00:00 
			
		
		
		
	Speeding up things
This commit is contained in:
		
							parent
							
								
									b2da460d5c
								
							
						
					
					
						commit
						bfaaf6d882
					
				
					 5 changed files with 319 additions and 105 deletions
				
			
		| 
						 | 
					@ -5,6 +5,7 @@ import com.naveensundarg.shadow.prover.utils.CollectionUtils;
 | 
				
			||||||
import com.naveensundarg.shadow.prover.utils.Pair;
 | 
					import com.naveensundarg.shadow.prover.utils.Pair;
 | 
				
			||||||
import com.naveensundarg.shadow.prover.utils.Sets;
 | 
					import com.naveensundarg.shadow.prover.utils.Sets;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import javax.swing.text.html.Option;
 | 
				
			||||||
import java.util.*;
 | 
					import java.util.*;
 | 
				
			||||||
import java.util.stream.Collectors;
 | 
					import java.util.stream.Collectors;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -15,22 +16,40 @@ public class DepthFirstPlanner implements Planner {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private static final int MAX_DEPTH = 4;
 | 
					    private static final int MAX_DEPTH = 4;
 | 
				
			||||||
 | 
					    private static final boolean EXHAUSTIVE_TILL_MAX_DEPTH = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public Optional<Set<Plan>> plan(Set<Formula> background, Set<Action> actions, State start, State goal) {
 | 
					    public Optional<Set<Plan>> plan(Set<Formula> background, Set<Action> actions, State start, State goal) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
       return planInternal(Sets.newSet(), 0, background, actions, start, goal);
 | 
					       if (!EXHAUSTIVE_TILL_MAX_DEPTH) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            return planInternal(Sets.newSet(), 0, MAX_DEPTH, background, actions, start, goal);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					       } else {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            for (int i = 1; i <= MAX_DEPTH; i++) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                Optional<Set<Plan>> plans = planInternal(Sets.newSet(), 0, i, background, actions, start, goal);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if (plans.isPresent()) {
 | 
				
			||||||
 | 
					                    return plans;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					          return Optional.empty();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					       }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private Optional<Set<Plan>> planInternal(Set<Pair<State, Action>> history, int currentDepth, int maxDepth, Set<Formula> background, Set<Action> actions, State start, State goal) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private Optional<Set<Plan>> planInternal(Set<Pair<State, Action>> history, int currentDepth, Set<Formula> background, Set<Action> actions, State start, State goal) {
 | 
					        if (currentDepth >= maxDepth) {
 | 
				
			||||||
 | 
					 | 
				
			||||||
        if(currentDepth>=MAX_DEPTH){
 | 
					 | 
				
			||||||
            return Optional.empty();
 | 
					            return Optional.empty();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -52,8 +71,7 @@ public class DepthFirstPlanner implements Planner {
 | 
				
			||||||
                for (Pair<State, Action> stateActionPair : nextStateActionPairs.get()) {
 | 
					                for (Pair<State, Action> stateActionPair : nextStateActionPairs.get()) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    Optional<Set<Plan>> planOpt = planInternal(history, currentDepth + 1, maxDepth, background, actions, stateActionPair.first(), goal);
 | 
				
			||||||
                    Optional<Set<Plan>> planOpt = planInternal(history, currentDepth+1, background, actions, stateActionPair.first(), goal);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    if (planOpt.isPresent()) {
 | 
					                    if (planOpt.isPresent()) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,6 +2,11 @@ package edu.rpi.rair.utils;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import com.diogonunes.jcdp.color.ColoredPrinter;
 | 
					import com.diogonunes.jcdp.color.ColoredPrinter;
 | 
				
			||||||
import com.diogonunes.jcdp.color.api.Ansi;
 | 
					import com.diogonunes.jcdp.color.api.Ansi;
 | 
				
			||||||
 | 
					import com.naveensundarg.shadow.prover.Sandbox;
 | 
				
			||||||
 | 
					import com.naveensundarg.shadow.prover.core.Problem;
 | 
				
			||||||
 | 
					import com.naveensundarg.shadow.prover.core.Prover;
 | 
				
			||||||
 | 
					import com.naveensundarg.shadow.prover.core.SnarkWrapper;
 | 
				
			||||||
 | 
					import com.naveensundarg.shadow.prover.utils.ProblemReader;
 | 
				
			||||||
import com.naveensundarg.shadow.prover.utils.Reader;
 | 
					import com.naveensundarg.shadow.prover.utils.Reader;
 | 
				
			||||||
import edu.rpi.rair.Goal;
 | 
					import edu.rpi.rair.Goal;
 | 
				
			||||||
import edu.rpi.rair.GoalTracker;
 | 
					import edu.rpi.rair.GoalTracker;
 | 
				
			||||||
| 
						 | 
					@ -19,37 +24,124 @@ public class RunDemo {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    static ColoredPrinter cp = new ColoredPrinter.Builder(1, false).build();
 | 
					    static ColoredPrinter cp = new ColoredPrinter.Builder(1, false).build();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    static {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Prover prover = new SnarkWrapper();
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            List<Problem> problems = ProblemReader.readFrom(Sandbox.class.getResourceAsStream("firstorder-completness-tests.clj"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            problems.forEach(problem -> {
 | 
				
			||||||
 | 
					                for (int i = 0; i < 5; i++) {
 | 
				
			||||||
 | 
					                    prover.prove(problem.getAssumptions(), problem.getGoal());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            planningProblemWarmUp();
 | 
				
			||||||
 | 
					            System.out.println("WARM UP DONE");
 | 
				
			||||||
 | 
					        } catch (Reader.ParsingException e) {
 | 
				
			||||||
 | 
					            e.printStackTrace();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public static void main(String[] args) throws Reader.ParsingException {
 | 
					    public static void main(String[] args) throws Reader.ParsingException {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        List<GoalTrackingProblem> goalTrackingProblemList = (GoalTrackingProblem.readFromFile(Planner.class.getResourceAsStream("goal_management_2.clj")));
 | 
					
 | 
				
			||||||
 | 
					            System.out.println();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            List<GoalTrackingProblem> goalTrackingProblemList = (GoalTrackingProblem.readFromFile(Planner.class.getResourceAsStream("goal_management_3.clj")));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        GoalTrackingProblem goalTrackingProblem = goalTrackingProblemList.get(0);
 | 
					            GoalTrackingProblem goalTrackingProblem = goalTrackingProblemList.get(0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        GoalTracker goalTracker = new GoalTracker(goalTrackingProblem.getPlanningProblem().getBackground(),
 | 
					            GoalTracker goalTracker = new GoalTracker(goalTrackingProblem.getPlanningProblem().getBackground(),
 | 
				
			||||||
                goalTrackingProblem.getPlanningProblem().getStart(),
 | 
					                    goalTrackingProblem.getPlanningProblem().getStart(),
 | 
				
			||||||
                goalTrackingProblem.getPlanningProblem().getActions());
 | 
					                    goalTrackingProblem.getPlanningProblem().getActions());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        long start = System.currentTimeMillis();
 | 
					            long start = System.currentTimeMillis();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Goal g1 = goalTrackingProblem.getGoalNamed("G1");
 | 
					            Goal g1 = goalTrackingProblem.getGoalNamed("G1");
 | 
				
			||||||
        Goal g2 = goalTrackingProblem.getGoalNamed("G2");
 | 
					            Goal g2 = goalTrackingProblem.getGoalNamed("G2");
 | 
				
			||||||
 | 
					            Goal g3 = goalTrackingProblem.getGoalNamed("G3");
 | 
				
			||||||
 | 
					            Goal g4 = goalTrackingProblem.getGoalNamed("G4");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        tryAndAddGoal(g1, goalTracker);
 | 
					 | 
				
			||||||
        tryAndAddGoal(g2, goalTracker);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        long end = System.currentTimeMillis();
 | 
					            tryAndAddGoal(g1, goalTracker);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        cp.println("--------------------------");
 | 
					            tryAndAddGoal(g2, goalTracker);
 | 
				
			||||||
        cp.setForegroundColor(Ansi.FColor.CYAN);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        cp.print("Time Taken:");
 | 
					            tryAndAddGoal(g3, goalTracker);
 | 
				
			||||||
        cp.clear();
 | 
					 | 
				
			||||||
        cp.print(" ");
 | 
					 | 
				
			||||||
        cp.setAttribute(Ansi.Attribute.BOLD);
 | 
					 | 
				
			||||||
        cp.print((end-start)/1000 + "s");
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            tryAndAddGoal(g4, goalTracker);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            long end = System.currentTimeMillis();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            cp.println("--------------------------");
 | 
				
			||||||
 | 
					            cp.setForegroundColor(Ansi.FColor.CYAN);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            cp.print("Time Taken:");
 | 
				
			||||||
 | 
					            cp.clear();
 | 
				
			||||||
 | 
					            cp.print(" ");
 | 
				
			||||||
 | 
					            cp.setAttribute(Ansi.Attribute.BOLD);
 | 
				
			||||||
 | 
					            cp.print((end - start) / 1000 + "s");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public static void planningProblemWarmUp() throws Reader.ParsingException {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        for (int i = 0; i < 5; i++) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            System.out.println();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            List<GoalTrackingProblem> goalTrackingProblemList = (GoalTrackingProblem.readFromFile(Planner.class.getResourceAsStream("goal_management_1.clj")));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            GoalTrackingProblem goalTrackingProblem = goalTrackingProblemList.get(0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            GoalTracker goalTracker = new GoalTracker(goalTrackingProblem.getPlanningProblem().getBackground(),
 | 
				
			||||||
 | 
					                    goalTrackingProblem.getPlanningProblem().getStart(),
 | 
				
			||||||
 | 
					                    goalTrackingProblem.getPlanningProblem().getActions());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            long start = System.currentTimeMillis();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            Goal g1 = goalTrackingProblem.getGoalNamed("G1");
 | 
				
			||||||
 | 
					            Goal g2 = goalTrackingProblem.getGoalNamed("G2");
 | 
				
			||||||
 | 
					            Goal g3 = goalTrackingProblem.getGoalNamed("G3");
 | 
				
			||||||
 | 
					            Goal g4 = goalTrackingProblem.getGoalNamed("G4");
 | 
				
			||||||
 | 
					            Goal g5 = goalTrackingProblem.getGoalNamed("G5");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            goalTracker.adoptGoal(g1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            System.out.print(".");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            goalTracker.adoptGoal(g2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            System.out.print(".");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            goalTracker.adoptGoal(g3);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            System.out.print(".");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            goalTracker.adoptGoal(g4);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            System.out.print(".");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            goalTracker.adoptGoal(g5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            System.out.print(".");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					@ -57,20 +149,20 @@ public class RunDemo {
 | 
				
			||||||
    static void tryAndAddGoal(Goal g, GoalTracker goalTracker) {
 | 
					    static void tryAndAddGoal(Goal g, GoalTracker goalTracker) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        System.out.println("========================");
 | 
					        System.out.println("========================");
 | 
				
			||||||
        printInfo("Trying to Add Goal:",  g.getName());
 | 
					        printInfo("Trying to Add Goal:", g.getName());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Optional<Plan> possibleGoalPlan = goalTracker.adoptGoal(g);
 | 
					        Optional<Plan> possibleGoalPlan = goalTracker.adoptGoal(g);
 | 
				
			||||||
        if (possibleGoalPlan.isPresent()) {
 | 
					        if (possibleGoalPlan.isPresent()) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            printSuccess("Successfully added:" ,  g.getName());
 | 
					            printSuccess("Successfully added:", g.getName());
 | 
				
			||||||
            printDebug1("Current Goals:" , goalTracker.getCurrentGoals().stream().map(Goal::getName).collect(Collectors.toSet()).toString());
 | 
					            printDebug1("Current Goals:", goalTracker.getCurrentGoals().stream().map(Goal::getName).collect(Collectors.toSet()).toString());
 | 
				
			||||||
            Plan plan = possibleGoalPlan.get();
 | 
					            Plan plan = possibleGoalPlan.get();
 | 
				
			||||||
            printDebug2("Plan:" , plan.getActions().isEmpty()? "No plan needed. Already satisfied." : plan.getActions().toString() );
 | 
					            printDebug2("Plan:", plan.getActions().isEmpty() ? "No plan needed. Already satisfied." : plan.getActions().toString());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            printFailure("Could not add " + g.getName());
 | 
					            printFailure("Could not add " + g.getName());
 | 
				
			||||||
            printDebug1("Current Goals: " , goalTracker.getCurrentGoals().stream().map(Goal::getName).collect(Collectors.toSet()).toString());
 | 
					            printDebug1("Current Goals: ", goalTracker.getCurrentGoals().stream().map(Goal::getName).collect(Collectors.toSet()).toString());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -103,8 +195,6 @@ public class RunDemo {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    static void printDebug1(String header, String message) {
 | 
					    static void printDebug1(String header, String message) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        cp.setForegroundColor(Ansi.FColor.BLACK);
 | 
					        cp.setForegroundColor(Ansi.FColor.BLACK);
 | 
				
			||||||
| 
						 | 
					@ -118,7 +208,7 @@ public class RunDemo {
 | 
				
			||||||
        cp.clear();
 | 
					        cp.clear();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
     static void printDebug2(String header, String message) {
 | 
					    static void printDebug2(String header, String message) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        cp.setForegroundColor(Ansi.FColor.BLACK);
 | 
					        cp.setForegroundColor(Ansi.FColor.BLACK);
 | 
				
			||||||
        cp.setBackgroundColor(Ansi.BColor.MAGENTA);   //setting format
 | 
					        cp.setBackgroundColor(Ansi.BColor.MAGENTA);   //setting format
 | 
				
			||||||
| 
						 | 
					@ -130,6 +220,7 @@ public class RunDemo {
 | 
				
			||||||
        cp.println("");
 | 
					        cp.println("");
 | 
				
			||||||
        cp.clear();
 | 
					        cp.clear();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    static void printFailure(String message) {
 | 
					    static void printFailure(String message) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        cp.setForegroundColor(Ansi.FColor.WHITE);
 | 
					        cp.setForegroundColor(Ansi.FColor.WHITE);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,7 +1,6 @@
 | 
				
			||||||
{:definitions
 | 
					{:definitions
 | 
				
			||||||
 {:name           "demo 1"
 | 
					 {:name           "demo 1"
 | 
				
			||||||
 :background     [
 | 
					 :background     [(forall [?x ?room1 ?room2]
 | 
				
			||||||
                  (forall [?x ?room1 ?room2]
 | 
					 | 
				
			||||||
                          (if (not (= ?room1 ?room2))
 | 
					                          (if (not (= ?room1 ?room2))
 | 
				
			||||||
                            (if (in ?x ?room1) (not (in ?x ?room2))) ))
 | 
					                            (if (in ?x ?room1) (not (in ?x ?room2))) ))
 | 
				
			||||||
                  (not (= room1 room2))
 | 
					                  (not (= room1 room2))
 | 
				
			||||||
| 
						 | 
					@ -9,8 +8,8 @@
 | 
				
			||||||
                  (not (= self prisoner))
 | 
					                  (not (= self prisoner))
 | 
				
			||||||
                  (not (= self commander))
 | 
					                  (not (= self commander))
 | 
				
			||||||
                  (person prisoner)
 | 
					                  (person prisoner)
 | 
				
			||||||
                  (person commander)
 | 
					                  (person commander)]
 | 
				
			||||||
                  ]
 | 
					
 | 
				
			||||||
 :start          [(in self room1)
 | 
					 :start          [(in self room1)
 | 
				
			||||||
                  (in commander room2)
 | 
					                  (in commander room2)
 | 
				
			||||||
                  (in prisoner room1)
 | 
					                  (in prisoner room1)
 | 
				
			||||||
| 
						 | 
					@ -67,20 +66,20 @@
 | 
				
			||||||
                  ]
 | 
					                  ]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  :goals      {G1 {:priority 6.0
 | 
					  :goals      {G1 {:priority 1.0
 | 
				
			||||||
                   :state    [(not (open (door room1)))]}
 | 
					                   :state    [(not (open (door room1)))]}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
               G2 {:priority 6.0
 | 
					               G2 {:priority 1.0
 | 
				
			||||||
                   :state    [(in prisoner room1)]}
 | 
					                   :state    [(in prisoner room1)]}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
               G3 {:priority 6.0
 | 
					               G3 {:priority 1.0
 | 
				
			||||||
                   :state    [(forall [?room]
 | 
					                   :state    [(forall [?room]
 | 
				
			||||||
                                      (if (in prisoner ?room)
 | 
					                                      (if (in prisoner ?room)
 | 
				
			||||||
                                        (in self ?room)))]}
 | 
					                                        (in self ?room)))]}
 | 
				
			||||||
               G4  {:priority 3.0
 | 
					               G4  {:priority 1.0
 | 
				
			||||||
                   :state [(in prisoner room2)
 | 
					                    :state [(in prisoner room2)
 | 
				
			||||||
                           (in self room2)]}
 | 
					                           (in self room2)]}
 | 
				
			||||||
               G5 {:priority 2.0
 | 
					               G5 {:priority 1.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                   :state [(interrogates commander prisoner)]}}
 | 
					                   :state [(interrogates commander prisoner)]}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,71 +1,72 @@
 | 
				
			||||||
{:definitions
 | 
					{:definitions
 | 
				
			||||||
 {:name           "test"
 | 
					        {:name       "test"
 | 
				
			||||||
 :background     []
 | 
					         :background []
 | 
				
			||||||
 :start          [
 | 
					         :start      [(forall [?x ?room1 ?room2] (implies (and (not (= ?room1 ?room2)) (in ?x ?room1)) (not (in ?x ?room2))))
 | 
				
			||||||
                   (forall [?x ?room1 ?room2] (implies (and (not (= ?room1 ?room2)) (in ?x ?room1)) (not (in ?x ?room2))))
 | 
					                      (not (= room1 room2))
 | 
				
			||||||
                   (not (= room1 room2))
 | 
					                      (not (= prisoner commander))
 | 
				
			||||||
                   (not (= prisoner commander))
 | 
					                      (not (= self prisoner))
 | 
				
			||||||
                   (not (= self prisoner))
 | 
					                      (not (= self commander))
 | 
				
			||||||
                   (not (= self commander))
 | 
					                      (person prisoner)
 | 
				
			||||||
                   (person prisoner)
 | 
					                      (person commander)
 | 
				
			||||||
                   (person commander)
 | 
					                      (in self room1)
 | 
				
			||||||
                    (in self room1)
 | 
					                      (in commander room2)
 | 
				
			||||||
                  (in commander room2)
 | 
					                      (in prisoner room1)
 | 
				
			||||||
                  (in prisoner room1)
 | 
					                      (open (door room2))
 | 
				
			||||||
                  (open (door room2))
 | 
					                      (not (open (door room1)))
 | 
				
			||||||
                  (not (open (door room1)))
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
                  (forall [?x ?y ?room] (implies (and (and (in ?x ?room) (in ?y ?room)) (not (= ?x ?y))) (sameroom ?x ?y)))
 | 
					                      (forall [?x ?y ?room] (implies (and (and (in ?x ?room) (in ?y ?room)) (not (= ?x ?y))) (sameroom ?x ?y)))
 | 
				
			||||||
                  (forall [?x ?y] (implies (sameroom ?x ?y) (exists ?room (and (in ?x ?room) (in ?y ?room)))))
 | 
					                      (forall [?x ?y] (implies (sameroom ?x ?y) (exists ?room (and (in ?x ?room) (in ?y ?room)))))
 | 
				
			||||||
                  ]
 | 
					                      ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 :goal           []
 | 
					         :goal       []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 :actions
 | 
					         :actions
 | 
				
			||||||
                 [(define-action open-door [?room]
 | 
					                     [(define-action open-door [?room]
 | 
				
			||||||
 | 
					                                     {:preconditions [(not (open (door ?room)))]
 | 
				
			||||||
 | 
					                                      :additions     [(open (door ?room))]
 | 
				
			||||||
 | 
					                                      :deletions     [(not (open (door ?room)))]})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                      (define-action accompany [?person ?room1 ?room2]
 | 
				
			||||||
 | 
					                                     {:preconditions [(in ?person ?room1)
 | 
				
			||||||
 | 
					                                                      (in self ?room1)
 | 
				
			||||||
 | 
					                                                      (open (door ?room1))
 | 
				
			||||||
 | 
					                                                      (open (door ?room2))]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                      :additions     [(in ?person ?room2)
 | 
				
			||||||
 | 
					                                                      (in self ?room2)]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                      :deletions     [(in ?person ?room1)
 | 
				
			||||||
 | 
					                                                      (in self ?room1)]})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                      (define-action move [?person ?room2 ?room1]
 | 
				
			||||||
 | 
					                                     {:preconditions [(in ?person ?room2)
 | 
				
			||||||
 | 
					                                                      (open (door ?room1))
 | 
				
			||||||
 | 
					                                                      (open (door ?room2))]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                      :additions     [(in ?person ?room1)]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                      :deletions     [(in ?person ?room2)]})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                      (define-action get-interrogated [?room]
 | 
				
			||||||
 | 
					                                     {:preconditions [(in commander ?room)
 | 
				
			||||||
 | 
					                                                      (in prisoner ?room)]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                      :additions     [(interrogates commander prisoner)]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                      :deletions     []})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                     (define-action open-door [?room ?actor]
 | 
				
			||||||
                                 {:preconditions [(not (open (door ?room)))]
 | 
					                                 {:preconditions [(not (open (door ?room)))]
 | 
				
			||||||
                                  :additions     [(open (door ?room))]
 | 
					                                  :additions     [(open (door ?room))
 | 
				
			||||||
                                  :deletions     [(not (open (door ?room)))]})
 | 
					                                                  (did (open-door ?actor ?room))]
 | 
				
			||||||
 | 
					                                  :deletions     [(not (open (door ?room)))]})]
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 :goals {
 | 
				
			||||||
                  (define-action accompany [?person ?room1 ?room2]
 | 
					         G2 {:priority 2.0
 | 
				
			||||||
                                 {:preconditions [(in ?person ?room1)
 | 
					             :state    [(sameroom prisoner room2)]}
 | 
				
			||||||
                                                  (in self ?room1)
 | 
					         }
 | 
				
			||||||
                                                  (open (door ?room1))
 | 
					 | 
				
			||||||
                                                  (open (door ?room2))]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                                  :additions     [(in ?person ?room2)
 | 
					 | 
				
			||||||
                                                  (in self ?room2)]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                                  :deletions     [(in ?person ?room1)
 | 
					 | 
				
			||||||
                                                  (in self ?room1)]})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                  (define-action move [?person ?room2 ?room1]
 | 
					 | 
				
			||||||
                                 {:preconditions [(in ?person ?room2)
 | 
					 | 
				
			||||||
                                                  (open (door ?room1))
 | 
					 | 
				
			||||||
                                                  (open (door ?room2))]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                                  :additions     [(in ?person ?room1)]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                                  :deletions     [(in ?person ?room2)]})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                  (define-action get-interrogated [?room]
 | 
					 | 
				
			||||||
                                 {:preconditions [(in commander ?room)
 | 
					 | 
				
			||||||
                                                  (in prisoner ?room)]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                                  :additions     [(interrogates commander prisoner)]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                                  :deletions     []})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                  ]
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  :goals      {G1 {:priority 1.0
 | 
					 | 
				
			||||||
                   :state    [(sameroom self prisoner)]}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
               G2 {:priority 2.0
 | 
					 | 
				
			||||||
                   :state    [(in prisoner room2)]}
 | 
					 | 
				
			||||||
 }
 | 
					 | 
				
			||||||
 }
 | 
					 }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										105
									
								
								src/main/resources/edu/rpi/rair/goal_management_3.clj
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										105
									
								
								src/main/resources/edu/rpi/rair/goal_management_3.clj
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,105 @@
 | 
				
			||||||
 | 
					{:definitions
 | 
				
			||||||
 | 
					        {:name       "demo 1"
 | 
				
			||||||
 | 
					         :background []
 | 
				
			||||||
 | 
					         :start      [
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                      (forall (?room ?x ?y) (implies (and (in ?x ?room) (and (in ?y ?room) (not (= ?x ?y)))) (sameroom ?x ?y)))
 | 
				
			||||||
 | 
					                      (not (= prisoner commander))
 | 
				
			||||||
 | 
					                      (not (= self prisoner))
 | 
				
			||||||
 | 
					                      (in prisoner room1)
 | 
				
			||||||
 | 
					                      (person prisoner)
 | 
				
			||||||
 | 
					                      (not (= room1 room2))
 | 
				
			||||||
 | 
					                      (in self room1)
 | 
				
			||||||
 | 
					                      (in commander room2)
 | 
				
			||||||
 | 
					                      (commander commander)
 | 
				
			||||||
 | 
					                      (forall (?room2 ?x ?room1) (implies (and (not (= ?room1 ?room2)) (in ?x ?room1)) (not (in ?x ?room2))))
 | 
				
			||||||
 | 
					                      (person commander)
 | 
				
			||||||
 | 
					                      (robot self)
 | 
				
			||||||
 | 
					                      (not (= self commander))
 | 
				
			||||||
 | 
					                      (not (open (door room1)))
 | 
				
			||||||
 | 
					                      (open (door room2))
 | 
				
			||||||
 | 
					                      (forall (?room ?x ?y) (implies (and (sameroom ?x ?y) (in ?x ?room)) (in ?y ?room)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                      ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					         :goal       []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					         :actions
 | 
				
			||||||
 | 
					                     [
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                      (define-action move [?actor ?person ?room2 ?room1]
 | 
				
			||||||
 | 
					                                     {:preconditions [(robot ?actor)
 | 
				
			||||||
 | 
					                                                      (person ?person)
 | 
				
			||||||
 | 
					                                                      (not (= ?room1 ?room2))
 | 
				
			||||||
 | 
					                                                      (open (door ?room1))
 | 
				
			||||||
 | 
					                                                      (in ?person ?room2)
 | 
				
			||||||
 | 
					                                                      (open (door ?room2))]
 | 
				
			||||||
 | 
					                                      :additions     [(in ?person ?room1)]
 | 
				
			||||||
 | 
					                                      :deletions     [(in ?person ?room1)]
 | 
				
			||||||
 | 
					                                      })
 | 
				
			||||||
 | 
					                      (define-action keepDoorClosed [?actor ?room]
 | 
				
			||||||
 | 
					                                     {:preconditions [(robot ?actor)
 | 
				
			||||||
 | 
					                                                      (not (open (door ?room)))]
 | 
				
			||||||
 | 
					                                      :additions     []
 | 
				
			||||||
 | 
					                                      :deletions     [(open (door ?room))]
 | 
				
			||||||
 | 
					                                      })
 | 
				
			||||||
 | 
					                      (define-action accompany [?actor ?person ?room1 ?room2]
 | 
				
			||||||
 | 
					                                     {:preconditions [(robot ?actor)
 | 
				
			||||||
 | 
					                                                      (person ?person)
 | 
				
			||||||
 | 
					                                                      (not (= ?room1 ?room2))
 | 
				
			||||||
 | 
					                                                      (open (door ?room1))
 | 
				
			||||||
 | 
					                                                      (in ?person ?room1)
 | 
				
			||||||
 | 
					                                                      (open (door ?room2))
 | 
				
			||||||
 | 
					                                                      (not (= ?person ?actor))
 | 
				
			||||||
 | 
					                                                      (in ?actor ?room1)]
 | 
				
			||||||
 | 
					                                      :additions     [(in ?actor ?room2)
 | 
				
			||||||
 | 
					                                                      (in ?person ?room2)]
 | 
				
			||||||
 | 
					                                      :deletions     [(in ?person ?room1)
 | 
				
			||||||
 | 
					                                                      (in ?actor ?room1)]
 | 
				
			||||||
 | 
					                                      })
 | 
				
			||||||
 | 
					                      (define-action openDoor [?actor ?room]
 | 
				
			||||||
 | 
					                                     {:preconditions [(robot ?actor)
 | 
				
			||||||
 | 
					                                                      (not (open (door ?room)))]
 | 
				
			||||||
 | 
					                                      :additions     [(open (door ?room))]
 | 
				
			||||||
 | 
					                                      :deletions     [(not (open (door ?room)))]
 | 
				
			||||||
 | 
					                                      })
 | 
				
			||||||
 | 
					                      (define-action stayInRoom [?actor ?room]
 | 
				
			||||||
 | 
					                                     {:preconditions [(in ?actor ?room)]
 | 
				
			||||||
 | 
					                                      :additions     [(in ?actor ?room)]
 | 
				
			||||||
 | 
					                                      :deletions     []
 | 
				
			||||||
 | 
					                                      })
 | 
				
			||||||
 | 
					                      (define-action interrogate [?actor ?person]
 | 
				
			||||||
 | 
					                                     {:preconditions [(person ?person)
 | 
				
			||||||
 | 
					                                                      (commander ?actor)
 | 
				
			||||||
 | 
					                                                      (in ?actor ?room)
 | 
				
			||||||
 | 
					                                                      (in ?person ?room)]
 | 
				
			||||||
 | 
					                                      :additions     [(interrogates ?actor ?person)]
 | 
				
			||||||
 | 
					                                      :deletions     []
 | 
				
			||||||
 | 
					                                      })
 | 
				
			||||||
 | 
					                      (define-action staySameRoom [?actor ?person]
 | 
				
			||||||
 | 
					                                     {:preconditions [(robot ?actor)
 | 
				
			||||||
 | 
					                                                      (sameroom ?actor ?person)
 | 
				
			||||||
 | 
					                                                      (person ?person)
 | 
				
			||||||
 | 
					                                                      (in ?actor ?room)
 | 
				
			||||||
 | 
					                                                      (in ?person ?room)]
 | 
				
			||||||
 | 
					                                      :additions     [(sameroom ?actor ?person)]
 | 
				
			||||||
 | 
					                                      :deletions     []
 | 
				
			||||||
 | 
					                                      })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                      ]
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 :goals {G1 {:priority 1.0
 | 
				
			||||||
 | 
					             :state    [(not (open (door room1)))]}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					         G2 {:priority 1.0
 | 
				
			||||||
 | 
					             :state    [(in prisoner room1)]}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					         G3 {:priority 1.0
 | 
				
			||||||
 | 
					             :state    [(sameroom self prisoner)]}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					         G4 {:priority 3.0
 | 
				
			||||||
 | 
					             :state    [(in prisoner room2)]}
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue