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); }
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)); }