private bool singleAgentAStar(AgentState agent) { AgentState.EquivalenceOverDifferentTimes = false; BinaryHeap <AgentState> openList = new BinaryHeap <AgentState>(); // TODO: Safe to use OpenList here instead? HashSet <AgentState> closedList = new HashSet <AgentState>(); agent.h = this.problem.GetSingleAgentOptimalCost(agent); openList.Add(agent); AgentState node; this.initialEstimate += agent.h; TimedMove queryTimedMove = new TimedMove(); while (openList.Count > 0) { if (this.runner.ElapsedMilliseconds() > Constants.MAX_TIME) { return(false); } node = openList.Remove(); if (node.h == 0) { bool valid = true; for (int i = node.lastMove.time; i <= maxPathCostSoFar; i++) { queryTimedMove.setup(node.lastMove.x, node.lastMove.y, Move.Direction.NO_DIRECTION, i); if (reservationTable.Contains(queryTimedMove)) { valid = false; } } if (valid) { this.paths[agent.agent.agentNum] = new SinglePlan(node); reservePath(node); totalcost += node.lastMove.time; parked.Add(new Move(node.lastMove.x, node.lastMove.y, Move.Direction.NO_DIRECTION), node.lastMove.time); return(true); } } expandNode(node, openList, closedList); expanded++; } return(false); }
private void expandNode(AgentState node, BinaryHeap <AgentState> openList, HashSet <AgentState> closedList) { foreach (TimedMove move in node.lastMove.GetNextMoves()) { if (this.isValidMove(move)) { AgentState child = new AgentState(node); child.prev = node; child.MoveTo(move); if (closedList.Contains(child) == false) { closedList.Add(child); child.h = this.problem.GetSingleAgentOptimalCost(child); openList.Add(child); generated++; } } } }
public A_Star_MDDs(MDD[] problem, Run runner, ConflictAvoidanceTable CAT) { this.expanded = 0; this.generated = 0; A_Star_MDDs_Node root; this.problem = problem; this.runner = runner; this.CAT = CAT; this.closedList = new Dictionary <A_Star_MDDs_Node, A_Star_MDDs_Node>(); this.openList = new BinaryHeap <A_Star_MDDs_Node>(); MDDNode[] sRoot = new MDDNode[problem.Length]; for (int i = 0; i < problem.Length; i++) { sRoot[i] = problem[i].levels[0].First.Value; } root = new A_Star_MDDs_Node(sRoot, null); openList.Add(root); closedList.Add(root, root); // There will never be a hit. This is only done for consistancy conflictCount = 0; }