Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Algoritmo Bellman Dijsktra PDF
Algoritmo Bellman Dijsktra PDF
UNIVERSIDAD DE PAMPLONA
PAMPLONA NORTE DE SANTANDER
2019
INTRODUCCIÓN
En el presente trabajo se explican algunos ejemplos en los que es posible
emplear los algoritmos de Bellman-Ford y el algoritmo de Dijkstra para resolver
algunos tipos de problemas tanto de la vida cotidiana como en el campo de la
robótica de tal forma que sirve como guía para el planteamiento de otros
problemas en diferentes áreas. Es importante resaltar que estos algoritmos
son bastantes potentes si hablamos de encontrar la ruta más corta de un punto
inicial a otro final, entre diferentes ubicaciones donde conocemos sus pesos
entre ellos, sin la necesidad de emplear una red neuronal compleja la cual
puede emplear mucho más gasto de procesamiento computacional que un
simple algoritmo que emplea una serie de secuencias de forma ordenada, el
cual puede implementarse sin mucho problema.
Algoritmo de Bellman-Ford.
Descripción
El algoritmo de Bellman-Ford determina la ruta más corta desde un nodo origen hacia
los demás nodos para ello es requerido como entrada un grafo cuyas aristas posean
pesos. La diferencia de este algoritmo con los demás es que los pesos pueden tener
valores negativos ya que Bellman-Ford me permite detectar la existencia de un ciclo
negativo. [1]
Como trabaja
El algoritmo parte de un vértice origen que será ingresado, a diferencia de Dijkstra que
utiliza una técnica voraz para seleccionar vértices de menor peso y actualizar sus
distancias mediante el paso de relajación, Bellman-Ford simplemente relaja todas las
aristas y lo hace |V| – 1 veces, siendo |V| el número de vértices del grafo. [1]
Para la detección de ciclos negativos realizamos el paso de relajación una vez más y si
se obtuvieron mejores resultados es porque existe un ciclo negativo, para verificar
porque tenemos un ciclo podemos seguir relajando las veces que queramos y
seguiremos obteniendo mejores resultados. [1]
El primer problema que se planteó es sobre un Drone el cual después de recorrer una
zona determinada de lotes este traza diferentes puntos con sus respectivas distancias
creando una especie de mapeo, de tal forma que desde la posición inicial del Drone
(será nuestro punto de origen) hasta algún Lote escogido (Lote X será nuestro punto
final o punto de destino que el Drone quiere llegar), este problema es un buen ejemplo
ya que se establecen los pesos entre los lotes que en este caso son Km de distancia entre
ellos, de tal forma que conociendo estos datos es posible emplear el algoritmo de
Bellman-Ford para establecer la ruta más corta y por ende reducir los tiempos entre una
posible ruta y otra. Cabe aclarar que en este algoritmo se plantea un grafo que tiene dos
direcciones esto quiere decir que no tiene un sentido establecido, una sola dirección en
cada uno de sus puntos.
Código en Python:
En el siguiente código se observa que se declaró una función la cual va actualizar cada
uno de los valores del Diccionario declarados inicialmente, desde el valor más bajo e
guardando el valor de la ruta más corta.
Se realiza un bucle de tal forma que se pueda comprobar que no exista otro cambio de
valores y así mismo se va recorriendo cada una de las posiciones de la matriz, como se
observa en la siguiente imagen.
Por último mediante un bucle While recorremos la matriz Valores mediante una
condición que nos permitirá determinar el camino más corto para llegar al punto final
o destino establecido.
Por último tenemos como resultado que la Ruta más corta para llegar desde el “Drone”
hasta el punto final de destino que es la “Lote E” se debe hacer el recorrido:
2 + 2 + 6 = 10 Km TOTAL
De tal forma que lo que el algoritmo en Python nos muestra es la siguiente ruta la cual
es señalada en Azul, y observamos que en realidad es la Ruta más óptima para llegar
desde la posición del Drone al Lote E.
2 + 2 + 3 + 1 = 8 Km TOTAL
De tal forma que lo que el algoritmo en Python nos muestra es la siguiente ruta la cual
es señalada en Azul, y observamos que en realidad es la Ruta más óptima para llegar
desde la posición del Drone al Lote D.
Existen diferentes maneras de trabajar con grafos en el lenguaje Python ya que existen
módulos que nos facilitan esta tarea como es el módulo de “Networkx” que existe para
python y poder utilizarlo para la creación de grafos.
Otros Módulos:
Mediante el uso de los módulos GraphPro los cuales fueron desarrollados por una
persona de tal manera que pudieran ser utilizados en Python por mas personas, de tal
forma ques son OpenSource y están alojados en el siguiente link en GitHub.
En el código se observa que se asignan unos pesos y se crea un grafo con al menos 6
ubicaciones, los pesos se asignan de manera aleatoria y se determina que es un grafo
en una sola dirección y el punto inicial es 0 y el punto final o destino es 3 :
Un robot laberinto ha recorrido diferentes puntos de tal forma que ha realizado un tipo
de mapeo donde permite establecer cada uno de los puntos en donde este robot estuvo
además de las distancias que existen entre cada uno de ellos. Si el robot quisiera ir
desde el lugar de origen a uno de los puntos mediante la ruta más corta obteniendo
como resultado un costo-beneficio, esta forma es empleando uno de los algoritmos de
búsqueda más potentes como es el algoritmo de Djikstra.
El grafo entre sus puntos solo contiene una dirección dada en un solo sentido, como se
observa en la figura 7.
Código en Python:
Inicialmente se cuenta con la librería collections la cual utilizamos para utilizar os sub-
modulos como son: namedtiuple y deque.
Para no extender tanto el código con funciones y métodos pasare al código del
algoritmo Dijkstra.
Por ultimo llamamos la función Dijkstra e imprimimos la ruta más óptima en este caso
para llegar desde el punto de origen “Robot” hasta el punto E.
7 + 4 + 6 = 17 TOTAL
Conclusiones.
Bibliografía: