|
Post
|
Pathfinding
- A-Pathfinding">A* Pathfinding
- Best-first-search">Best-First Search
- Dijkstra-s-algorithm">Dijkstra's Algorithm
Heurísticas
La heurística de A * suele estar representada por
F = G + H
dónde :
G es el costo de movimiento desde el inicio hasta el nodo actual a lo largo de la ruta.
H es el costo probable desde el nodo actual hasta el final a lo largo del camino.
Procedimiento
Desde el nodo actual, busque los nodos vecinos (todos los nodos móviles que no están en el conjunto cerrado) e insértelos en el conjunto abierto. Si el nodo ya está en el conjunto abierto, verifique si el costo G para ese nodo es menor si usamos el cuadrado actual para llegar allí. Si es así, cambie el nodo principal al nodo actual. Si no, no hagas nada.
Encuentre el nodo del conjunto abierto con el menor costo basado en F = G + H.
Tome el nodo recién encontrado del conjunto abierto al conjunto cerrado.
Repita hasta que el final se encuentre en el conjunto abierto.
Seudo-Code
- --searching `map`
- function A_star(start, finish)
- closed = {}
- open = {}
-
- open[start] = true
-
- --start is the start so it has a g of 0
- start.g = 0
- --h calculated normally
- start.h = estimated_cost_between(start, finish)
- --f = g + h
- start.f = start.g + start.h
-
- while #open > 0
- current = node in open with minimum f
- if current == finish then
- --reconstruct the path to goal
- return create_path(current)
- end
- closed[current] = true
- open[current] = nil
-
- for _, v in ipairs(current:neighbors()) do
- if not closed[neighbor] and not open[neighbor] then
- neighbor.g = current.g + current:distanceTo(neighbor) --g is distance from start along path
- neighbor.h = estimated_cost_between(neighbor, finish) --h is estimated distance from node to finish along path
- neighbor.f = neighbor.g + neighbor.h --f=g+h
- open[neighbor] = true
- end
- end
- end
- end
En Delphi
Codigo fuente
INICIO ---------------------------------------------------------------------------------------------------------------------------
|