<jupyter_start><jupyter_text>Algoritmo A*  Mapa de Colombia Inteligencia Atificial 2017-2, UTP <NAME>, <NAME>, <NAME> ---La siguiente implementación tiene por objetivo demostrar el funcionamiento del algoritmo A\* un algoritmo de busqueda  informada que tiene en cuenta diferentes parametros antes de iniciar su ejecución, este es implementado para hallar, el camino de menor costo entre un par de nodos, siendo un nodo origen ***a*** y uno objetivo o destino ***b***. Todo esto es posible siempre y cuando se cumplan unas determinadas condiciones, como la existencia de caminos entre ellos. El algoritmo A\* utiliza una función de evaluación $f(n)=g(n)+h(n)$ , donde $h(n)$ representa el valor heurístico del nodo a evaluar desde el actual, $n$, hasta el final, y $g(n)$, el coste real del camino recorrido para llegar a dicho nodo, $n$, desde el nodo inicial. A\* mantiene dos estructuras de datos auxiliares, que podemos denominar abiertos, implementado como una cola de prioridad (ordenada por el valor $f(n)$ de cada nodo), y cerrados, donde se guarda la información de los nodos que ya han sido visitados. En cada paso del algoritmo, se expande el nodo que esté primero en abiertos, y en caso de que no sea un nodo objetivo, calcula la $f(n)$ de todos sus hijos, los inserta en abiertos, y pasa el nodo evaluado a cerrados.A continuacion se presenta un pseudocodigo de la implmentacion de A\* obtenido en [Wikipedia](https://en.wikipedia.org/wiki/A*_search_algorithm) :El desarrollo del algoritmo estrella es como se ve en la siguiente imagen :<jupyter_code>#Networkx es una libreria para realizar
#NetworkX is a Python language software package for
#the creation, manipulation, and study of the structure, 
#dynamics, and function of complex networks.
import networkx as nx
# We are going to use  a Undirected Graph
G=nx.Graph()
#By Default Networkx create a Dictionary of dictionary, 
#in order to have a O(1) access complexity.
G.clear()
citynames=['Medellin','Barranquilla','Cartagena','Monteria','Bogota','Neiva','Santa','Marta','Armenia','Pereira','Cali']
#G.add_nodes_from(citynames)
for i in citynames : 
    G.add_node(i)
import matplotlib.pyplot as plt
nx.draw(G)
nx.draw_networkx(G)
plt.show()
G.nodes()
for i in G.nodes():
    for j in G.nodes():
        G.add_edge(i,j)

nx.draw_networkx(G)
plt.show()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.0902127659574468, 'fraction_numerical': 0.002553191489361702, 'mean_word_length': 5.154450261780105, 'pattern_counts': {'":': 0, '<': 8, '<?xml version=': 0, '>': 8, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '1', 'dir': 'jupyter-structured-clean-dedup', 'id': '247644', 'license': 'MIT', 'n_tokens_mistral': 783, 'n_tokens_neox': 767, 'n_words': 321, 'path': 'AINetworkx.ipynb', 'repo_name': 'h3ct0rjs/ArtificialIntelligence', 'size': '2380'}