Está en la página 1de 5

AUTOR:

Angel Yucra Mendoza

Algoritmo
APython
estrella
Code

2020 Curso: Inteligencia Computacional

Universidad Nacional del Altiplano


Algoritmo A estrella

El código se encuentra el el siguiente link:

https://onlinegdb.com/J1RcGPfio

pero debido al uso de librería no es capaz de compilar, utilice los siguiente comando para
descargar las librerías

pip install networkx


pip install git://github.com/networkx/networkx.git#egg=networkx

pip install matplotlib

Ilustración 1: Grafo del problema


Ilustración 2: Camino optimo encontrado

¿Cómo Funciona?

Para el funcionamiento se usó grafos para crear y realizar el algoritmo A* en la variable Cam se
definen los Nodos, heurísticas, Caminos, Costo de los caminos.

Luego se define la función Aestrella y le paso los parámetros: El grafo, el nodo inicial y el nodo final.
La función contiene un bucle que verifica si el nuevo grafo ya llego de inicio a fin luego dentro un
bucle que recorre cada nodo y busca su a que nodo le toca pasar para eso una la función de F(x)=g(x)
+h(x) y pasa al camino que contenga menos valor.

Y una vez que el camino ya llego al final salimos del bucle.

Para mostrar los resultados se implementó de dos formas una se puede ver en el la consola y otra
mediante un gráfico del grafo

Código en Python:
import networkx as nx
import matplotlib.pyplot as plt
Cam = nx.Graph()

Cam.add_nodes_from(['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'])

Cam.add_edges_from([('A', 'F'), ('A', 'B'), ('B', 'D'), ('B', 'C'), ('C', 'D'), ('C', 'E'), ('D', 'E'), ('E', 'J'), ('E', 'I'), ('F', 'G'), ('F', 'H'), ('G', 'I'), ('H', 'I'),
('I', 'J')])

Cam.add_weighted_edges_from([('A', 'F',3), ('A', 'B',6), ('B', 'D',2), ('B', 'C',3), ('C', 'D',1), ('C', 'E',5), ('D', 'E',8), ('E', 'J',5), ('E', 'I',5), ('F',
'G',1), ('F', 'H',7), ('G', 'I',3), ('H', 'I',2), ('I', 'J',3)])

Cam.nodes['A']["heuristica"] = 10
Cam.nodes['B']["heuristica"] = 8
Cam.nodes['C']["heuristica"] = 5
Cam.nodes['D']["heuristica"] = 7
Cam.nodes['E']["heuristica"] = 3
Cam.nodes['F']["heuristica"] = 6
Cam.nodes['G']["heuristica"] = 5
Cam.nodes['H']["heuristica"] = 3
Cam.nodes['I']["heuristica"] = 1
Cam.nodes['J']["heuristica"] = 0

def Aestrella(grafito,inicial,final):
camfin=nx.Graph()
camfin.add_node(inicial)
actual = inicial
costoac=0
while actual != final:
for i in grafito.nodes:
elegido=i
if actual == i:
peso=0
for j in grafito.neighbors(i):
#aplicamos la funcion f(x)=g(x)+b(x)
fdex=grafito.edges[i, j]['weight'] +costoac+ grafito.nodes[j]['heuristica']
if peso == 0:
peso = fdex
elegido=j
else:
if fdex < peso:
peso=fdex
elegido=j
camfin.add_node(elegido)
camfin.add_edge(actual,elegido)
camfin.add_weighted_edges_from([(actual,elegido,grafito.edges[actual, elegido]['weight'])])
costoac=costoac+grafito.edges[actual, elegido]['weight']
actual=elegido
if actual == final:
break
return camfin

gfinal=Aestrella(Cam, 'A', 'J')

print("Nodos del grafo original:")


print(Cam.edges(data=True))
print("nodos del camino optimo encontrado:")
print(gfinal.edges(data=True))

nx.draw(Cam,with_labels=True)
plt.draw()
plt.show()

nx.draw(gfinal,with_labels=True)
plt.draw()
plt.show()

También podría gustarte