La ruta más óptima entre n ciudades aplicando un …...la ruta más corta para nuestro mapa de 20...

9
1 La ruta más óptima entre n ciudades aplicando un algoritmo genético The most optimal route between n cities applying a genetic algorithm Jhonatan Pineda Gómez Sebastián Huertas Cardona Facultad de ingeniería, universidad tecnológica de Pereira, Colombia Correo-e: [email protected] ResumenEn este documento se pretende implementar un algoritmo genético con el cual se puede hallar la ruta más óptima entre n ciudades aplicando un algoritmo genético. Palabras clave, Ruta más óptima, algoritmo genético. Abstractin this document we intend to implement a genetic algorithm with which the most optimal route between n cities can be found by applying a genetic algorithm Key Word , the most optimal route, genetic algorithm. I. INTRODUCCIÓN TSP (Travelling Salesman Problem) En el problema se presentan N! rutas posibles, aunque se puede simplificar ya que dada una ruta nos da igual el punto de partida y esto reduce el número de rutas a examinar en un factor N quedando (N-1)! Como no importa la dirección en que se desplace el viajante, el número de rutas a examinar se reduce nuevamente en un factor 2. Por lo tanto, hay que considerar (N- 1)!/2 rutas posibles. Puede comprobarse que por cada ciudad nueva que incorporemos, el número de rutas se multiplica por el factor N y crece exponencialmente (factorialmente). Por ello el problema pertenece a la clase de problemas NP-completos. Se va a codificar un algoritmo genético que sea capaz de resolver este problema para n ciudades. Imagina que eres un vendedor y te han dado un mapa como el opuesto. En él se ve que el mapa contiene un total de 20 ubicaciones y le dicen que es su trabajo visitar cada una de estas ubicaciones para realizar una venta. Antes de emprender el viaje, es probable que desee planificar una ruta para minimizar el tiempo de viaje. Afortunadamente, los humanos somos bastante buenos en esto, podemos encontrar una ruta razonablemente buena sin necesidad de hacer mucho más que mirar el mapa. Sin embargo, cuando encontramos una ruta que consideramos óptima, ¿cómo podemos probar si realmente es la ruta óptima? Para entender por qué es tan difícil probar la ruta óptima, consideremos un mapa similar con solo 3 ubicaciones en lugar de las 20 originales. Para encontrar una ruta única, primero debemos elegir una ubicación de inicio entre las tres ubicaciones posibles en el mapa. A continuación, tendríamos una opción de 2 ciudades para la segunda ubicación, y finalmente, solo queda 1 ciudad para elegir para completar nuestra ruta. Esto significa que hay 3 x 2 x 1 rutas diferentes para elegir en total. Eso significa que, para este ejemplo, solo hay 6 rutas diferentes para elegir. Entonces, para este caso de solo 3 ubicaciones, es razonablemente trivial calcular cada una de esas 6 rutas y encontrar la más corta. Si eres bueno en matemáticas, es posible

Transcript of La ruta más óptima entre n ciudades aplicando un …...la ruta más corta para nuestro mapa de 20...

Page 1: La ruta más óptima entre n ciudades aplicando un …...la ruta más corta para nuestro mapa de 20 ubicaciones, ¡tendríamos que evaluar 2432902008176640000 rutas diferentes! Incluso

1

La ruta más óptima entre n ciudades

aplicando un algoritmo genético

The most optimal route between n cities applying a genetic algorithm

Jhonatan Pineda Gómez – Sebastián Huertas Cardona Facultad de ingeniería, universidad tecnológica de Pereira, Colombia

Correo-e: [email protected]

Resumen— En este documento se pretende implementar un

algoritmo genético con el cual se puede hallar la ruta más óptima

entre n ciudades aplicando un algoritmo genético.

Palabras clave—, Ruta más óptima, algoritmo genético.

Abstract— in this document we intend to implement a genetic

algorithm with which the most optimal route between n cities can

be found by applying a genetic algorithm

Key Word —, the most optimal route, genetic algorithm.

I. INTRODUCCIÓN

TSP (Travelling Salesman Problem)

En el problema se presentan N! rutas posibles, aunque se puede

simplificar ya que dada una ruta nos da igual el punto de partida

y esto reduce el número de rutas a examinar en un factor N

quedando (N-1)! Como no importa la dirección en que se

desplace el viajante, el número de rutas a examinar se reduce

nuevamente en un factor 2. Por lo tanto, hay que considerar (N-

1)!/2 rutas posibles.

Puede comprobarse que por cada ciudad nueva que

incorporemos, el número de rutas se multiplica por el factor N

y crece exponencialmente (factorialmente). Por ello el

problema pertenece a la clase de problemas NP-completos.

Se va a codificar un algoritmo genético que sea capaz de

resolver este problema para n ciudades.

Imagina que eres un vendedor y te han dado un mapa como el

opuesto. En él se ve que el mapa contiene un total de 20

ubicaciones y le dicen que es su trabajo visitar cada una de estas

ubicaciones para realizar una venta.

Antes de emprender el viaje, es probable que desee planificar

una ruta para minimizar el tiempo de viaje. Afortunadamente,

los humanos somos bastante buenos en esto, podemos

encontrar una ruta razonablemente buena sin necesidad de

hacer mucho más que mirar el mapa. Sin embargo, cuando

encontramos una ruta que consideramos óptima, ¿cómo

podemos probar si realmente es la ruta óptima?

Para entender por qué es tan difícil probar la ruta óptima,

consideremos un mapa similar con solo 3 ubicaciones en lugar

de las 20 originales. Para encontrar una ruta única, primero

debemos elegir una ubicación de inicio entre las tres

ubicaciones posibles en el mapa. A continuación, tendríamos

una opción de 2 ciudades para la segunda ubicación, y

finalmente, solo queda 1 ciudad para elegir para completar

nuestra ruta. Esto significa que hay 3 x 2 x 1 rutas diferentes

para elegir en total.

Eso significa que, para este ejemplo, solo hay 6 rutas diferentes

para elegir. Entonces, para este caso de solo 3 ubicaciones, es

razonablemente trivial calcular cada una de esas 6 rutas y

encontrar la más corta. Si eres bueno en matemáticas, es posible

Page 2: La ruta más óptima entre n ciudades aplicando un …...la ruta más corta para nuestro mapa de 20 ubicaciones, ¡tendríamos que evaluar 2432902008176640000 rutas diferentes! Incluso

2

que ya te hayas dado cuenta de cuál es el problema. La cantidad

de rutas posibles es un factorial de la cantidad de ubicaciones

que se pueden visitar, y los problemas con los factoriales es que

crecen en tamaño notablemente rápido.

Por ejemplo, el factorial de 10 es 3628800, pero el factorial de

20 es un gigantesco, 2432902008176640000.

Volviendo a nuestro problema original, si queremos encontrar

la ruta más corta para nuestro mapa de 20 ubicaciones,

¡tendríamos que evaluar 2432902008176640000 rutas

diferentes! Incluso con el poder de la informática moderna, esto

es terriblemente poco práctico, y para problemas aún mayores,

es casi imposible.

Encontrar una solución al problema del agente viajero requiere

que establezcamos un algoritmo genético de una manera

especializada. Por ejemplo, una solución válida debería

representar una ruta en la que cada ubicación se incluye al

menos una vez y solo una vez. Si una ruta contiene una sola

ubicación más de una vez, o se pierde una ubicación por

completo, no sería válida y sería un valioso tiempo de cálculo

para calcular su distancia.

Para garantizar que el algoritmo genético cumpla con este

requisito, se necesitan tipos especiales de métodos de mutación

y cruce.

En primer lugar, el método de mutación solo debería ser capaz

de barajar la ruta, nunca debería agregar o quitar una ubicación

de la ruta, de lo contrario correría el riesgo de crear una solución

no válida. Un tipo de método de mutación que podríamos usar

es la mutación de intercambio.

Con la mutación de intercambio dos ubicaciones en la ruta se

seleccionan al azar, entonces sus posiciones simplemente se

intercambian. Por ejemplo, si aplicamos la mutación de

intercambio a la siguiente lista, [1, 2, 3, 4, 5] podríamos

terminar con [1,2,5,4,3]. Aquí, las posiciones 3 y 5 se

cambiaron creando una nueva lista con exactamente los

mismos valores, solo un orden diferente. Debido a que la

mutación de intercambio solo está intercambiando valores

preexistentes, nunca creará una lista que tenga valores faltantes

o duplicados en comparación con el original, y eso es

exactamente lo que queremos para el problema del vendedor

viajero.

Ahora que hemos tratado el método de mutación, debemos

elegir un método de cruce que pueda imponer la misma

restricción.

Un método de cruce que puede producir una ruta válida es un

cruce ordenado. En este método de cruce, seleccionamos un

subconjunto del primer padre y luego agregamos ese

subconjunto a la descendencia. Cualquier valor faltante se

agrega a la descendencia del segundo padre para que se

encuentren.

Para aclarar un poco esta explicación, considere el siguiente

ejemplo:

Aquí un subconjunto de la ruta se toma del primer padre (6,7,8)

y se agrega a la ruta de la descendencia. A continuación, las

ubicaciones de ruta faltantes se suman en orden desde el

segundo padre. La primera ubicación en la ruta del segundo

padre es 9, que no está en la ruta de la descendencia, por lo que

se agrega en la primera posición disponible. La siguiente

posición en la ruta de los padres es 8, que está en la ruta de la

descendencia, por lo que se omite. Este proceso continúa hasta

que la descendencia no tenga valores vacíos restantes. Si se

implementa correctamente, el resultado final debe ser una ruta

que contenga todas las posiciones que hicieron sus padres sin

perder ni duplicar posiciones.

Aplicando el algoritmo genético con una población inicial de

50 cromosomas, un numero evolutivo de 100 generaciones y 20

ciudades

Page 3: La ruta más óptima entre n ciudades aplicando un …...la ruta más corta para nuestro mapa de 20 ubicaciones, ¡tendríamos que evaluar 2432902008176640000 rutas diferentes! Incluso

3

II. CONTENIDO

1. El primer proceso Generar población inicial.

2. el segundo proceso Evaluar individuos.

3. El tercer proceso Selección se ha optado por el

método de Selección por torneo que consiste

básicamente en seleccionar k individuos que

participaran en un torneo el cual ganara el que

tenga la mejor función de adaptabilidad.

4. Después del proceso de selección ya conocemos

cuales son los individuos más actos para sobrevivir

y cuantos descendientes van a tener. Lo siguiente

que tenemos que hacer es el cuarto proceso de

cruzamiento

5. El quinto proceso Mutación que es el encargado de

cambiar la información de algún hijo

aleatoriamente con el objetivo de alcanzar zonas de

soluciones que el cruzamiento haya descartado.

6. Después de tener codificado todos los procesos del

algoritmo genético se tienen que unir todos en un

orden específico para que el algoritmo funcione

correctamente.

La solución del problema se implementó en el lenguaje de

programación Java y para los gráficos la librería Javafx.

Para empezar, se creó una clase que pueda codificar las

ciudades.

City.java

Ahora se tiene una clase que contenga todas las ciudades de

destino para el recorrido.

TourManager.java

Page 4: La ruta más óptima entre n ciudades aplicando un …...la ruta más corta para nuestro mapa de 20 ubicaciones, ¡tendríamos que evaluar 2432902008176640000 rutas diferentes! Incluso

4

A continuación, se necesita una clase que pueda codificar las

rutas, estas generalmente se conocen como recorridos (Tours)

Tour.java

Clase que pueda tener a una población de recorridos candidatos

Población.java

Clase Algoritmo_Genetico que manejará el funcionamiento del

algoritmo genético y evolucionará nuestra población de

soluciones

Algoritmo_Genetico.java

Page 5: La ruta más óptima entre n ciudades aplicando un …...la ruta más corta para nuestro mapa de 20 ubicaciones, ¡tendríamos que evaluar 2432902008176640000 rutas diferentes! Incluso

5

Clase para iniciar el algoritmo genético la cual tiene dos

funciones una que es con las ciudades ya preestablecidas y la

otra con las ciudades aleatorias, recibe la cantidad de ciudades,

la población inicial de cromosomas y el numero evolutivo de

generaciones.

TSP_Algoritmo_Genetico.java

Page 6: La ruta más óptima entre n ciudades aplicando un …...la ruta más corta para nuestro mapa de 20 ubicaciones, ¡tendríamos que evaluar 2432902008176640000 rutas diferentes! Incluso

6

Finalmente se tiene la clase para probar que el programa

funcione correctamente y nos muestre en pantalla gráficamente

usando Javafx la ruta más óptima.

Prueba.java

Pruebas del algoritmo genético

Page 7: La ruta más óptima entre n ciudades aplicando un …...la ruta más corta para nuestro mapa de 20 ubicaciones, ¡tendríamos que evaluar 2432902008176640000 rutas diferentes! Incluso

7

Page 8: La ruta más óptima entre n ciudades aplicando un …...la ruta más corta para nuestro mapa de 20 ubicaciones, ¡tendríamos que evaluar 2432902008176640000 rutas diferentes! Incluso

8

Se puede observar gráfica y estadísticamente que al aumentar

la cantidad de generaciones, es más óptima la distancia y la ruta

elegida por el algoritmo.

Page 9: La ruta más óptima entre n ciudades aplicando un …...la ruta más corta para nuestro mapa de 20 ubicaciones, ¡tendríamos que evaluar 2432902008176640000 rutas diferentes! Incluso

9

III. Conclusiones

Se aprendió a implementar un algoritmo genético para

hallar la ruta más óptima entre n ciudades.

Los algoritmos genéticos reducen la complejidad en

gran escala.

una solución válida debería representar una ruta en la

que cada ubicación se incluye al menos una vez y solo

una vez.

Para resolver el problema se necesitaron tipos

especiales de métodos de mutación y cruce.

Se hizo una ardua investigación sobre el tema y se

aplicaron los conceptos vistos en clase.

IV. Referencias

http://www.sc.ehu.es/ccwbayes/docencia/mmcc/docs/

temageneticos.pdf

http://eddyalfaro.galeon.com/geneticos.html

http://www.it.uc3m.es/jvillena/irc/practicas/06-

07/05.pdf

http://sci2s.ugr.es/sites/default/files/files/Teaching/Gr

aduatesCourses/Bioinformatica/Tema%2006%20-

%20AGs%20I.pdf

https://iccl.inf.tu-

dresden.de/w/images/b/b7/GA_for_TSP.pdf

https://scholar.google.com.co/scholar?q=tsp+algorithm

+genetic&hl=es&as_sdt=0&as_vis=1&oi=scholart&sa=X

&ved=0ahUKEwj27_XD4ubXAhUGOCYKHUHBCHgQgQM

IIzAA

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10

.1.1.371.7771&rep=rep1&type=pdf

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10

.1.1.91.9167&rep=rep1&type=pdf

https://es.slideshare.net/shivankshah3/travelling-

salesman-problem-using-genetic-algorithms

https://github.com/parano/GeneticAlgorithm-TSP

https://link.springer.com/article/10.1023/A:100652901

2972

http://www.theprojectspot.com/tutorial-post/applying-

a-genetic-algorithm-to-the-travelling-salesman-

problem/5

http://code.makery.ch/library/javafx-8-tutorial/es/

https://docs.oracle.com/javase/8/javase-

clienttechnologies.htm

http://www.oracle.com/technetwork/es/java/javafx/ov

erview/index.html

http://www.tutorialspoint.com/javafx/

https://netbeans.org/features/java-on-

client/javafx.html

https://docs.oracle.com/javase/7/docs/api/

https://www.codeproject.com/Articles/1403/Genetic-

Algorithms-and-the-Traveling-Salesman-Prob

http://www.obitko.com/tutorials/genetic-

algorithms/tsp-example.php

http://pcbunn.cithep.caltech.edu/Java/Genetic.html