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 1


nuevo 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 2


nuevo 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 3


nuevo 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 4


nuevo 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 5


nuevo 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 6


nuevo 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 7


nuevo 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 8


nuevo 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 9


nuevo 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 10


nuevo 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 11


nuevo 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 12


nuevo 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 13


nuevo 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 14


nuevo 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 15


nuevo 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 16


nuevo país en paz

También podría gustarte