Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Informe - Algoritmo Aestrella
Informe - Algoritmo Aestrella
Algoritmo
APython
estrella
Code
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
¿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.
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
nx.draw(Cam,with_labels=True)
plt.draw()
plt.show()
nx.draw(gfinal,with_labels=True)
plt.draw()
plt.show()