Está en la página 1de 16

Universidad de Pamplona

Pamplona - Norte de Santander - Colombia


Tels: (7) 5685303 - 5685304 - 5685305 - Fax: 5682750 - www.unipamplona.edu.co

ALGORITMO DE BELLMAN-FORD Y DIJKSTRA


IMPLEMENTADOS EN PROGRAMACIÓN

ASIGNATURA: REDES NEURONALES

DOC. CRISTHIAN RIAÑO

PEDRO NEL VARGAS OCHOA


CC. 1006558320

UNIVERSIDAD DE PAMPLONA
PAMPLONA NORTE DE SANTANDER
2019

Formando líderes para la construcción de un nuevo 1


país en paz
Universidad de Pamplona
Pamplona - Norte de Santander - Colombia
Tels: (7) 5685303 - 5685304 - 5685305 - Fax: 5682750 - www.unipamplona.edu.co

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.

Los algoritmos se emplearon en el lenguaje de programación Python de tal


forma que sea lo más sencillo posible entenderlos, ya que este lenguaje de
programación es de alto nivel lo que quiere decir que su escritura es muy
similar a lenguaje natural y por lo tanto el algoritmo es más aproximado a un
Pseudocódigo, además de explican algunas librerías que pueden utilizarse
en este lenguaje de programación.

Formando líderes para la construcción de un nuevo 2


país en paz
Universidad de Pamplona
Pamplona - Norte de Santander - Colombia
Tels: (7) 5685303 - 5685304 - 5685305 - Fax: 5682750 - www.unipamplona.edu.co

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]

Problema planteado para el Algoritmo de Bellman Ford.

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.

Formando líderes para la construcción de un nuevo 3


país en paz
Universidad de Pamplona
Pamplona - Norte de Santander - Colombia
Tels: (7) 5685303 - 5685304 - 5685305 - Fax: 5682750 - www.unipamplona.edu.co

Grafo que representa la situación del problema.

El siguiente esquema del Grafo se desarrolló mediante el software GraphYed el cual


fue una herramienta sugerida por el docente, la cual permite elaborar este tipo de
esquemas para poder visualizar la situación del problema de una forma más sencilla.
El punto de Origen es el posición inicial del Drone, las letras A, B, C, D, E y F, son
cada uno de los Lotes, además de que los pesos se establecieron de tal forma que
estos representan en Km de distancia entre un punto y Otro.

Fig 1. Grafo del planteamiento del problema.

Fig 2. Herramienta Utilizada.

Formando líderes para la construcción de un nuevo 4


país en paz
Universidad de Pamplona
Pamplona - Norte de Santander - Colombia
Tels: (7) 5685303 - 5685304 - 5685305 - Fax: 5682750 - www.unipamplona.edu.co

Código en Python:

En el siguiente código empleado en Python se observa que se crea un diccionario con


el nombre “Valores”, pero que se hace necesario el uso de Importar un módulo
denominado Math la cual es bastante empleada cuando se requiere el uso de
operaciones matemáticas las cuales son bastantes complejas emplear mediante solo
código. Inicialmente en el diccionario, se asigna un valor a cada variable mediante
Math.inf en este diccionario se almacenarán los caminos más óptimos para llegar de
un punto a otro.

Se crea un matriz la cual se declara con el nombre “Caminos”, en esta matriz se


establecen todas las rutas que existen entre cada uno de los puntos:

Formando líderes para la construcción de un nuevo 5


país en paz
Universidad de Pamplona
Pamplona - Norte de Santander - Colombia
Tels: (7) 5685303 - 5685304 - 5685305 - Fax: 5682750 - www.unipamplona.edu.co

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.

Luego declaramos desde donde queremos ir (inicio) hasta un destino (final), al


principio el problema se planteó que se tomaría como origen que el Drone se
encuentra en el punto de origen que en este caso sería el mismo “Drone” en su
ubicación inicial y se quiere desplazar hasta un Lote “X” de tal forma que el lote que
seleccionemos será el valor destino (final). Se declaró como inicio Drone y este
quiere establecer la Ruta más corta hasta el Lote E.

Formando líderes para la construcción de un nuevo 6


país en paz
Universidad de Pamplona
Pamplona - Norte de Santander - Colombia
Tels: (7) 5685303 - 5685304 - 5685305 - Fax: 5682750 - www.unipamplona.edu.co

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.

Formando líderes para la construcción de un nuevo 7


país en paz
Universidad de Pamplona
Pamplona - Norte de Santander - Colombia
Tels: (7) 5685303 - 5685304 - 5685305 - Fax: 5682750 - www.unipamplona.edu.co

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:

“Drone”  “Lote B”  “Lote C”  “Lote E”

2 + 2 + 6 = 10 Km  TOTAL

Fig 3. Resultado obtenido por el algoritmo.

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.

Fig 4.Grafo que muestra la ruta de solución.

Si quisiéramos utilizar nuevamente el algoritmo para establecer otra nueva ruta y


observar la posible solución que el algoritmo nos arroja, se procede a proponer como
ejemplo que ahora el “Drone” quiere llegar hasta el “Lote D” usando la ruta más corta
posible.

Formando líderes para la construcción de un nuevo 8


país en paz
Universidad de Pamplona
Pamplona - Norte de Santander - Colombia
Tels: (7) 5685303 - 5685304 - 5685305 - Fax: 5682750 - www.unipamplona.edu.co

“Drone”  “Lote B”  “Lote C”  “Lote A”  “Lote D”

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.

Fig 5.Grafo que muestra la ruta de otra solución.

Otras opciones de poder utilizar Python y los Grafos:

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:

Formando líderes para la construcción de un nuevo 9


país en paz
Universidad de Pamplona
Pamplona - Norte de Santander - Colombia
Tels: (7) 5685303 - 5685304 - 5685305 - Fax: 5682750 - www.unipamplona.edu.co

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.

Link GitHub para descargar los Módulos:


https://github.com/arturoverbel/graph_python

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 :

Fig 6.Algoritmo usado mediante los módulos.

El algoritmo que se usa internamente en los módulos es el algoritmo de Dijkstra,


como se observa después de ejecutar el código tenemos el grafo en una figura, este
grafo es dibujado por el módulo ya que es una ventaja que nos ofrece, además nos
señala de color azul la ruta más corta que existe entre el punto inicial que escogimos
y el final.

Formando líderes para la construcción de un nuevo 10


país en paz
Universidad de Pamplona
Pamplona - Norte de Santander - Colombia
Tels: (7) 5685303 - 5685304 - 5685305 - Fax: 5682750 - www.unipamplona.edu.co

Algoritmo Dijkstra en el módulo:

Fig 7. Algoritmo Dijkstra internamente en el módulo.

Formando líderes para la construcción de un nuevo 11


país en paz
Universidad de Pamplona
Pamplona - Norte de Santander - Colombia
Tels: (7) 5685303 - 5685304 - 5685305 - Fax: 5682750 - www.unipamplona.edu.co

Algoritmo de Dijkstra en Python Aplicado en una situación:

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.

Grafo que representa la situación del problema.

El grafo entre sus puntos solo contiene una dirección dada en un solo sentido, como
se observa en la figura 7.

Fig 8. Grafo del planteamiento del segundo problema.

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.

Formando líderes para la construcción de un nuevo 12


país en paz
Universidad de Pamplona
Pamplona - Norte de Santander - Colombia
Tels: (7) 5685303 - 5685304 - 5685305 - Fax: 5682750 - www.unipamplona.edu.co

Fig 9.Sub-modulos de la librería collections.

En el siguiente código se observan los módulos importados, además de una función


principal la cual recibe como parámetros el valor inicial el cual será nuestro “Robot”
ya que él se encuentra en el origen y quiere desplazarse a uno de los puntos
seleccionadas el cual será nuestro punto final, el cost=1 es el tipo de grafo con el que
estamos trabajando si tiene solo una dirección o va en ambas direcciones en nuestro
caso se había determinado que solo sería en una dirección.

En la siguiente instrucción se declara la matriz de tal forma en cómo estará


constituido la forma del grafo de acuerdo a los datos obtenidos por el robot laberinto.

Formando líderes para la construcción de un nuevo 13


país en paz
Universidad de Pamplona
Pamplona - Norte de Santander - Colombia
Tels: (7) 5685303 - 5685304 - 5685305 - Fax: 5682750 - www.unipamplona.edu.co

Para no extender tanto el código con funciones y métodos pasare al código del
algoritmo Dijkstra.

Fig 10. Algoritmo Dijkstra en Python empleando una clase y funciones.

Formando líderes para la construcción de un nuevo 14


país en paz
Universidad de Pamplona
Pamplona - Norte de Santander - Colombia
Tels: (7) 5685303 - 5685304 - 5685305 - Fax: 5682750 - www.unipamplona.edu.co

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.

Como resultado obtenemos la siguiente ruta:

“Robot”  “A”  “D”  “E”

7 + 4 + 6 = 17  TOTAL

Fig 11.Grafo que muestra la ruta de solución.

Formando líderes para la construcción de un nuevo 15


país en paz
Universidad de Pamplona
Pamplona - Norte de Santander - Colombia
Tels: (7) 5685303 - 5685304 - 5685305 - Fax: 5682750 - www.unipamplona.edu.co

Conclusiones.

 Estos algoritmos son bastantes eficientes para resolver problemas o


situaciones en donde es necesario establecer la ruta más corta entre un punto
inicial y un punto final en un espacio en donde pueden existir diferentes
combinaciones la idea es ofrecer una solución costo-beneficio sin emplear
inteligencia artificial la cual tiene un alto costo computacional en
comparación de los algoritmos de Bellman-ford yDijkstra.

 En la primera solución del Drone el algoritmo fue bastante eficiente respecto


al momento de trazar la ruta más óptima, además de reducir el costo de la ruta
y si mismo los tiempos es bastante eficiente, así como es posible aplicar este
tipo de soluciones a otros tipos de problemas tanto en la vida cotidiana como
en el campo de la robótica, así como en muchos otros campos más.

Bibliografía:

[1] (Moderno, 2007)Moderno, U. N. E. (2007). Inteligencia Artificial. In


Inteligencia Artificial (Vol. 2). https://doi.org/10.4114/ia.v2i6.614

Formando líderes para la construcción de un nuevo 16


país en paz

También podría gustarte