public void PlanOrderTest()
        {
            Action RightShoe = new Action(Predicate.Create("RightShoe"));
            RightShoe.AddPrecondition(Predicate.Create("RightSockOn"));
            RightShoe.AddEffect(Predicate.Create("RightShoeOn"));
            Action RightSock = new Action(Predicate.Create("RightSock"));
            RightSock.AddEffect(Predicate.Create("RightSockOn"));
            Action LeftShoe = new Action(Predicate.Create("LeftShoe"));
            LeftShoe.AddPrecondition(Predicate.Create("LeftSockOn"));
            LeftShoe.AddEffect(Predicate.Create("LeftShoeOn"));
            Action LeftSock = new Action(Predicate.Create("LeftSock"));
            LeftSock.AddEffect(Predicate.Create("LeftSockOn"));

            PartialOrderPlanner target = new PartialOrderPlanner(RightShoe, RightSock, LeftShoe, LeftSock);

            IEnumerable<Predicate> voInitialState = null;
            List<Predicate> voGoalState = new List<Predicate>();
            voGoalState.Add(Predicate.Create("RightShoeOn"));
            voGoalState.Add(Predicate.Create("LeftShoeOn"));

            PartialOrderPlan plan = target.PlanOrder(voInitialState, voGoalState);
            Assert.IsTrue(plan != null);

            List<Action> theActions = plan.SortedActions;
            foreach(Action action in theActions)
            {
                string sOut = string.Format("{0}", action.Identity.Name);
                Console.Out.WriteLine(sOut);
            }
        }
Пример #2
0
        /// <summary>
        /// Decompose this Task into a Partial Order Plan
        /// </summary>
        /// <returns></returns>
        public PartialOrderPlan Decompose()
        {
            //TODO: Unfinished
            PartialOrderPlanner planner = new PartialOrderPlanner(SubTasks.ToArray());

            return planner.PlanOrder(new List<Predicate>(Preconditions), new List<Predicate>(Effects));
        }
        public void PlanOrderTestTireProblem()
        {
            Action RemoveSpare = new Action(Predicate.Create("Remove", false, new ConstantTerm[] { "Spare", "Trunk" }));
            RemoveSpare.AddPrecondition(Predicate.Create("At", false, new ConstantTerm[] { "Spare", "Trunk" }));
            RemoveSpare.AddEffect(Predicate.Create("At", true, new ConstantTerm[] { "Spare", "Trunk" }));
            RemoveSpare.AddEffect(Predicate.Create("At", false, new ConstantTerm[] { "Spare", "Ground" }));

            Action RemoveFlat = new Action(Predicate.Create("Remove", false, ConstantTerm.Create("Flat"), ConstantTerm.Create("Axle")));
            RemoveFlat.AddPrecondition(Predicate.Create("At", false, ConstantTerm.Create("Flat"), ConstantTerm.Create("Axle")));
            RemoveFlat.AddEffect(Predicate.Create("At", true, ConstantTerm.Create("Flat"), ConstantTerm.Create("Axle")));
            RemoveFlat.AddEffect(Predicate.Create("At", false, ConstantTerm.Create("Flat"), ConstantTerm.Create("Ground")));

            Action PutOnSpare = new Action(Predicate.Create("PutOn", false, ConstantTerm.Create("Spare"), ConstantTerm.Create("Axle")));
            PutOnSpare.AddPrecondition(Predicate.Create("At", false, ConstantTerm.Create("Spare"), ConstantTerm.Create("Ground")));
            PutOnSpare.AddPrecondition(Predicate.Create("At", true, ConstantTerm.Create("Flat"), ConstantTerm.Create("Axle")));
            PutOnSpare.AddEffect(Predicate.Create("At", true, ConstantTerm.Create("Spare"), ConstantTerm.Create("Ground")));
            PutOnSpare.AddEffect(Predicate.Create("At", false, ConstantTerm.Create("Spare"), ConstantTerm.Create("Axle")));

            Action LeaveOvernight = new Action(Predicate.Create("LeaveOvernight"));
            LeaveOvernight.AddEffect(Predicate.Create("At", true, ConstantTerm.Create("Spare"), ConstantTerm.Create("Ground")));
            LeaveOvernight.AddEffect(Predicate.Create("At", true, ConstantTerm.Create("Spare"), ConstantTerm.Create("Axle")));
            LeaveOvernight.AddEffect(Predicate.Create("At", true, ConstantTerm.Create("Spare"), ConstantTerm.Create("Trunk")));
            LeaveOvernight.AddEffect(Predicate.Create("At", true, ConstantTerm.Create("Flat"), ConstantTerm.Create("Ground")));
            LeaveOvernight.AddEffect(Predicate.Create("At", true, ConstantTerm.Create("Flat"), ConstantTerm.Create("Axle")));

            PartialOrderPlanner target = new PartialOrderPlanner(RemoveSpare, RemoveFlat, PutOnSpare, LeaveOvernight);

            List<Predicate> voInitialState = new List<Predicate>();
            voInitialState.Add(Predicate.Create("At", false, ConstantTerm.Create("Flat"), ConstantTerm.Create("Axle")));
            voInitialState.Add(Predicate.Create("At", false, ConstantTerm.Create("Spare"), ConstantTerm.Create("Trunk")));
            List<Predicate> voGoalState = new List<Predicate>();
            voGoalState.Add(Predicate.Create("At", false, ConstantTerm.Create("Spare"), ConstantTerm.Create("Axle")));

            PartialOrderPlan plan = target.PlanOrder(voInitialState, voGoalState);
            Assert.IsTrue(plan != null);

            List<Action> theActions = plan.SortedActions;
            foreach (Action action in theActions)
            {
                StringBuilder sb = new StringBuilder();
                sb.AppendFormat("{0}", action.Identity.Name);
                if (action.Identity.Parameters != null && action.Identity.Parameters.Count > 0)
                {
                    sb.Append("(");
                    foreach(Term t in action.Identity.Parameters)
                    {
                        sb.Append(t.Name + ",");
                    }
                    sb.Length--;
                    sb.Append(")");
                }
                Console.Out.WriteLine(sb.ToString());
            }
        }