public void Update(AINode newParent) { if (newParent.g + action.Cost < g) { parent = newParent; SetNodeActionDetails(); } }
private bool AchievesPrecondition(AINode node) { foreach (var effect in node.GetAction().GetEffects()) { if (currentNode.GetState().GetPreconditions().ContainsKey(effect.Key) && currentNode.GetState().GetPreconditions()[effect.Key].Equals(effect.Value)) { return(true); } } return(false); }
private AINode FindCheapestNode() { AINode cheapestNode = openNodes[0]; for (int i = 1; i < openNodes.Count; i++) { if (openNodes[i].GetFCost() < cheapestNode.GetFCost()) { cheapestNode = openNodes[i]; } } return(cheapestNode); }
private void InitialiseNodeLists(AIAgent agent, AIPlanner planner) { nullNodes = new List <AINode>(); openNodes = new List <AINode>(); closedNodes = new List <AINode>(); currentNode = new AINode(agent, planner); closedNodes.Add(currentNode); foreach (var action in agent.GetActions()) { nullNodes.Add(new AINode(agent, planner, action)); } }
private void InitialiseNodeLists(IAIAgent <L, V> agent, IAIGoal <L, V> goal) { nullNodes.Clear(); openNodes.Clear(); closedNodes.Clear(); currentNode = new AINode <L, V>(agent, goal); closedNodes.Add(currentNode); foreach (var action in agent.Actions.GetActions()) { nullNodes.Add(new AINode <L, V>(agent, goal, action)); } }
public Queue <AIAction> GetActionPlan() { Queue <AIAction> queue = new Queue <AIAction>(); while (currentNode.GetAction() != null) { queue.Enqueue(currentNode.GetAction()); currentNode = currentNode.GetParent(); } Queue <AIAction> actionPlan = new Queue <AIAction>(); while (queue.Count > 0) { actionPlan.Enqueue(queue.Dequeue()); } return(actionPlan); }
public Queue <IAIAction <L, V> > GetActionPlan() { var queue = new Queue <IAIAction <L, V> >(); while (currentNode.GetAction() != null) { queue.Enqueue(currentNode.GetAction()); currentNode = currentNode.GetParent(); } var actionPlan = new Queue <IAIAction <L, V> >(); while (queue.Count > 0) { actionPlan.Enqueue(queue.Dequeue()); } return(actionPlan); }
public bool FindActionPlan(AIAgent agent, AIPlanner planner) { InitialiseNodeLists(agent, planner); while (!currentNode.ConditionsMet()) { FindNeighbouringNodes(); if (openNodes.Count == 0) { return(false); } currentNode = FindCheapestNode(); closedNodes.Add(currentNode); openNodes.Remove(currentNode); } return(true); }
public AINode(AIAgent agent, AIPlanner planner, AIAction action = null, AINode parent = null) { this.agent = agent; this.planner = planner; this.action = action; this.parent = parent; if (action == null) { // This is a goal node state = new AIState(planner.GetGoal(), agent.GetMemory().CloneState()); state.AddUnmetPreconditions(planner.GetGoal().GetConditions()); g = 0; } else { // Initialise Action node state = new AIState(); g = float.MaxValue; } }