private bool depthSearch(WorldState WorldState) { if (destiny.Evaluate(WorldState) == true) { return(true); } List <Action> acts = new List <Action>(); foreach (var item in Actions) { if (item.GetPreConditions(WorldState).isCompatibleSource(WorldState)) { if (item.ProceduralPreConditions(WorldState)) { acts.Add(item); } } } if (acts.Count == 0) { return(false); } foreach (var item in acts) { WorldState ws = WorldState.Clone(); foreach (var item2 in item.GetEffects(WorldState).GetSymbols()) { ws.SetSymbol(item2.Clone()); } item.ApplyEffects(ws); iter++; if (iter > MaxIteration) { return(false); } if (depthSearch(ws) == true) { act.AddFirst(item); return(true); } } return(false); }
public override PlanSet CreatePlan(WorldState actual, Goal destiny) { PlanSet PlanSet = new PlanSet(); WorldState current = actual.Clone(); int iter = 0; while (!destiny.Evaluate(current)) { Action act = null; foreach (var item in Actions) { if (item.GetPreConditions(current).isCompatibleSource(current)) { if (item.ProceduralPreConditions(current)) { act = item; break; } } } if (act != null) { foreach (var item in act.GetEffects(current).GetSymbols()) { current.SetSymbol(item.Clone()); } act.ApplyEffects(current); } else { return(null); } iter++; if (iter > MaxIteration) { return(null); } System.Diagnostics.Debug.WriteLine(act.Name); } System.Diagnostics.Debug.WriteLine(destiny.Name); return(PlanSet); }