Sie sind auf Seite 1von 8

Ejemplo Algoritmo A*

Encontrar el camino más corto entre Logroño y Valencia usando el algoritmo voraz
primero el mejor y el algoritmo A*

Figura 1. Mapa con distancias en kilómetros entre ciudades.

Además del anterior mapa que indica la distancia entre dos ciudades adyacentes por
medio de líneas entre dichas ciudades y un valor, se tiene la siguiente tabla relativa a
las distancias aéreas (distancia euclídea) entre las diferentes ciudades:
Guadalajara
Tarragona

Castellón
Zaragoza
© Universidad Internacional de La Rioja (UNIR)

Valencia
Logroño

Cuenca
Madrid
Huesca

Burgos
Teruel
Bilbao

Soria

Tarragona 0 419 177 340 424 216 374 187 432 318 308 167 229

Bilbao 419 0 242 97 323 358 293 246 119 171 361 436 473

1
Huesca 177 242 0 172 335 207 284 67 272 176 271 240 296

Logroño 340 97 172 0 251 261 212 157 103 77 267 340 375

Madrid 424 323 335 251 0 220 51 273 214 182 138 314 302

Teruel 216 358 207 261 220 0 176 146 310 195 93 98 115

Guadalajara 374 293 284 212 51 176 0 221 212 138 106 273 270

Zaragoza 187 246 67 157 273 146 221 0 245 133 204 198 246

Burgos 432 119 272 103 214 310 212 245 0 119 284 402 424

Soria 318 171 176 77 182 195 138 133 119 0 191 284 311

Cuenca 308 361 271 267 138 93 106 204 284 191 0 178 164

Castellón 167 436 240 340 314 98 273 198 402 284 178 0 63

Valencia 229 473 296 375 302 115 270 246 424 311 164 63 0

Tabla 1. Distancias aéreas entre ciudades.

Para resolver el problema para el algoritmo a considerar, es necesario definir la


función heurística la cual será utilizada por dichos algoritmos.

Función Heurística (función h(n))


Esta función se define como la distancia en línea recta desde cada ciudad hasta la
ciudad destino (Valencia). La siguiente tabla resume la función heurística para cada
ciudad, la información es tomada de la Tabla 1.
Bilbao 473
Burgos 424
Logroño 375
Huesca 296
© Universidad Internacional de La Rioja (UNIR)

Soria 311
Zaragoza 246
Madrid 302
Guadalajara 270

2
Teruel 115
Tarragona 229
Cuenca 164
Castellón 63
Valencia 0

Tabla 2. Función heurística para cada ciudad tomando como objetivo Valencia.

En este algoritmo se define la función de evaluación f(n) con dos componentes, la


función de coste acumulado g(n) y la función heurística h(n), la forma de definirla es
la siguiente:
f(n) = g(n)+h(n)
Se aclara la función g(n) para un nodo particular i como la suma de todos los
trayectos tomados desde el nodo inicial hasta el nodo i, siguiendo el camino
marcado por el árbol de proceso.
Se inicia el árbol con el nodo de partida Logroño (se especifica en el árbol y en las
listas el valor f(n) de cada nodo).

Al igual que sucedía en el Algoritmo Voraz, se añaden en la lista abierta las opciones
que se pueden seleccionar según los nodos visitados, y de esta lista se tacha la mejor
opción para ser añadida a la lista cerrada, la cual representa los nodos visitados.
Abierta = {Logroño (375)}
Cerrada = {Logroño (375)}
Ahora se expande el nodo añadido en la lista cerrada (Logroño) con los caminos que
salen de él, pero sin tener en cuenta los ya recorridos (en este caso el camino a
© Universidad Internacional de La Rioja (UNIR)

Logroño), esta exclusión se llevará a cabo a la hora de expandir todos los nodos
seleccionados en la lista cerrada.

3
La lista abierta se ordena de mayor a menor valor de f(n), la razón es para siempre
sacar de esta lista el último valor, el cual representa el mejor o más óptimo.
Abierta = {Bilbao (609), Burgos (556), Huesca (535), Zaragoza (416), Soria (411)}
Cerrada = {Logroño (375), Soria (411)}
Se expande el nodo Soria con sus respectivos caminos posibles.

En este caso, y en comparación con el algoritmo voraz, la lista abierta no borra sus
anteriores opciones, esto sucede ya que el algoritmo A* tiene la propiedad de
devolverse si ve que el camino por donde va no es el más óptimo o si se encuentra
encerrado.
Abierta = {Madrid (633), Bilbao (609), Burgos (556), Guadalajara (540), Huesca (535),
Zaragoza (416)}
Cerrada = {Logroño (375), Soria (411), Zaragoza (416)}
© Universidad Internacional de La Rioja (UNIR)

4
El nodo escogido (Zaragoza) no estaba en el camino que se seguía, sin embargo, el
algoritmo permitió pasar hacia él debido a que su valor de f(n) es más bajo, indicando
a su vez que es el más óptimo.
Para Zaragoza aparece la opción Huesca, sin embargo, como Huesca ya estaba en la
lista abierta, se deja solo el valor más bajo entre estos dos, el cual es de 535.
El nodo Guadalajara ya estaba en la lista abierta, así que se deja el valor más bajo que
es de 540.
Abierta = {Tarragona (635), Madrid (633), Bilbao (609), Burgos (556), Guadalajara
(540), Huesca (535), Teruel (455)}
Cerrada = {Logroño (375), Soria (411), Zaragoza (416), Teruel (455)}
Se expande el siguiente mejor nodo que es Teruel.
© Universidad Internacional de La Rioja (UNIR)

El nodo Guadalajara ya estaba en la lista abierta, así que se deja el valor más bajo que
es de 540.
Abierta = {Tarragona (635), Madrid (633), Bilbao (609), Burgos (556), Castellón (547),

5
Guadalajara (540), Huesca (535)}
Cerrada = {Logroño (375), Soria (411), Zaragoza (416), Teruel (455), Huesca (535)}

Ahora se vuelve a cambiar de ruta y se expande el nodo Huesca con el valor más bajo
de f(n) de 535.

El nodo Bilbao ya estaba en la lista abierta, así que se deja el valor más bajo que es
de 609.
El nodo Tarragona ya estaba en la lista abierta, así que se deja el valor más bajo que
es de 635.
Abierta = {Tarragona (635), Madrid (633), Bilbao (609), Burgos (556), Castellón (547),
Guadalajara (540)}
Cerrada = {Logroño (375), Soria (411), Zaragoza (416), Teruel (455), Huesca (535),
Guadalajara (540)}

Se vuelve a cambiar la ruta y se expande el nodo Guadalajara con f(n) = 540.


© Universidad Internacional de La Rioja (UNIR)

6
El nodo Madrid ya estaba en abierta, así que se deja el valor más bajo que es de 633.
Abierta = {Tarragona (635), Madrid (633), Bilbao (609), Cuenca (570), Burgos (556),
Castellón (547)}
Cerrada = {Logroño (375), Soria (411), Zaragoza (416), Teruel (455), Huesca (535),
Guadalajara (540), Castellón (547)}
Nuevamente se cambia la ruta y se expande el nodo Castellón.
© Universidad Internacional de La Rioja (UNIR)

El nodo Tarragona ya estaba en abierta, así que se deja el valor más bajo que es de
635.
Aunque ya aparece Valencia como nodo, aún este no será añadido a la lista cerrada
debido a que hay mejores opciones para añadir a dicha lista.

7
Abierta = {Tarragona (635), Madrid (633), Bilbao (609), Cuenca (570), Valencia (557),
Burgos (556)}
Cerrada = {Logroño (375), Soria (411), Zaragoza (416), Teruel (455), Huesca (535),
Guadalajara (540), Castellón (547), Burgos (556)}
Debido a que Burgos es una mejor opción que Valencia aún no termina el algoritmo,
y se debe expandir el primero que se mencionó.

El nodo Madrid ya estaba en abierta, así que se deja el valor más bajo que es de 633.
Abierta = {Tarragona (635), Madrid (633), Bilbao (609), Cuenca (570), Valencia (557)}
Cerrada = {Logroño (375), Soria (411), Zaragoza (416), Teruel (455), Huesca (535),
Guadalajara (540), Castellón (547), Burgos (556), Valencia (557)}
Ya que se agregó Valencia a la lista cerrada el algoritmo termina.
La lista cerrada a diferencia del algoritmo voraz, no marca el camino óptimo a seguir,
este camino se debe obtener del árbol generado finalmente, y en caso de que se esté
programando, este camino se debe obtener de los punteros que marcan la
trayectoria que se siguió.
El camino señalado como óptimo entre Logroño y Valencia es:
© Universidad Internacional de La Rioja (UNIR)

Logroño – Zaragoza – Teruel – Castellón – Valencia.


En este algoritmo si podemos asegurar que el camino seleccionado es el más óptimo
y, además, podemos asegurar que siempre que hubiese existido un camino entre los
nodos inicio y meta, este algoritmo lo hubiera encontrado.

Das könnte Ihnen auch gefallen