Esempio n. 1
0
        public List <Action> SolveII(Problem p, Domain d)
        {
            State        sStart    = p.GetInitialBelief().ChooseState(true);
            List <State> lOpenList = new List <State>();

            lOpenList.Add(sStart);
            State sCurrent = null, sNext = null;
            Dictionary <State, Action> dMapStateToGeneratingAction = new Dictionary <State, Action>();

            dMapStateToGeneratingAction[sStart] = null;
            Dictionary <State, State> dParents = new Dictionary <State, State>();
            Dictionary <State, int>   dDepth = new Dictionary <State, int>();

            dDepth[sStart]   = 0;
            dParents[sStart] = null;
            int           cProcessed           = 0;
            List <string> lActionNames         = new List <string>();

            while (lOpenList.Count > 0)
            {
                sCurrent = lOpenList[0];
                lOpenList.RemoveAt(0);
                List <Action> lActions = d.GroundAllActions(sCurrent.Predicates, false);
                foreach (Action a in lActions)
                {
                    sNext = sCurrent.Apply(a);
                    bool bGiven = false;
                    foreach (Predicate pGiven in sNext.Predicates)
                    {
                        if (pGiven.Name.ToLower().Contains("given"))
                        {
                            bGiven = true;
                        }
                    }
                    if (!lActionNames.Contains(a.Name))
                    {
                        lActionNames.Add(a.Name);
                    }
                    if (sNext != null && p.IsGoalState(sNext))
                    {
                        return(GeneratePlan(sCurrent, a, dParents, dMapStateToGeneratingAction));
                    }
                    if (!dParents.Keys.Contains(sNext))
                    {
                        dDepth[sNext]   = dDepth[sCurrent] + 1;
                        dParents[sNext] = sCurrent;
                        dMapStateToGeneratingAction[sNext] = a;
                        lOpenList.Add(sNext);
                    }
                }
                cProcessed++;
                if (cProcessed % 10 == 0)
                {
                    Debug.WriteLine(cProcessed + ") " + dDepth[sCurrent] + "," + lOpenList.Count);
                }
            }
            return(null);
        }
Esempio n. 2
0
        public List <Action> RadnomSolve(Problem p, Domain d)
        {
            State         sStart   = p.GetInitialBelief().ChooseState(true);
            List <Action> lActions = d.GroundAllActions(sStart.Predicates, false);
            int           iRnd     = RandomGenerator.Next(lActions.Count);
            List <Action> lPlan    = new List <Action>();

            lPlan.Add(lActions[iRnd]);
            return(lPlan);
        }
Esempio n. 3
0
        public List <Action> SolveOld(Problem p, Domain d)
        {
            State         sStart    = p.GetInitialBelief().ChooseState(true);
            List <Action> lActions  = new List <Action>();
            State         sObserved = ObserveAll(sStart, lActions, d);
            State         sFixed    = ApplyAxiom(sObserved, lActions, d);
            //State sClosed = CloseAll(sFixed, lActions, d);
            //State sFixed2 = ApplyAxiom(sClosed, lActions, d);
            State sObserved2 = ObserveAll(sFixed, lActions, d);

            return(lActions);
        }
Esempio n. 4
0
        public List <Action> Solve(Problem p, Domain d)
        {
            State         sStart   = p.GetInitialBelief().ChooseState(true);
            List <Action> lActions = new List <Action>();
            Action        aClear   = d.GroundActionByName(new string[] { "clear-all", "" }, sStart.Predicates, false);

            sStart = sStart.Apply(aClear);
            lActions.Add(aClear);
            State sComputeUpstream = ApplyCompute(sStart, "upstream", lActions, d);
            State sComputeAffected = ApplyCompute(sComputeUpstream, "affected", lActions, d);
            State sComputePath     = ApplyCompute(sComputeAffected, "path", lActions, d);
            State sComputeLine     = ApplyCompute(sComputePath, "line", lActions, d);

            //State sObserveAll = ObserveAll(sComputeLine, lActions, d);
            return(lActions);
        }
Esempio n. 5
0
        public List <Action> ManualSolve(Problem p, Domain d)
        {
            State sStart = p.GetInitialBelief().ChooseState(true);
            State sCurrent = null, sNext = null;
            Dictionary <State, Action> dMapStateToGeneratingAction = new Dictionary <State, Action>();

            dMapStateToGeneratingAction[sStart] = null;
            Dictionary <State, State> dParents = new Dictionary <State, State>();

            dParents[sStart] = null;
            int           cProcessed           = 0;
            List <string> lActionNames         = new List <string>();

            sCurrent = sStart;
            while (!p.IsGoalState(sCurrent))
            {
                List <Action> lActions = d.GroundAllActions(sCurrent.Predicates, false);
                Debug.WriteLine("Available actions:");
                for (int i = 0; i < lActions.Count; i++)
                {
                    Debug.WriteLine(i + ") " + lActions[i].Name);
                }
                Debug.Write("Choose action number: ");
                int    iAction = int.Parse(Console.ReadLine());
                Action a       = lActions[iAction];
                sNext = sCurrent.Apply(a);

                foreach (Predicate pNew in sNext.Predicates)
                {
                    if (!sCurrent.Predicates.Contains(pNew))
                    {
                        Debug.WriteLine(pNew);
                    }
                }

                if (!dParents.Keys.Contains(sNext))
                {
                    dParents[sNext] = sCurrent;
                    dMapStateToGeneratingAction[sNext] = a;
                }

                sCurrent = sNext;

                cProcessed++;
            }
            return(GeneratePlan(sCurrent, null, dParents, dMapStateToGeneratingAction));
        }