viernes, 8 de marzo de 2013

Practica #2 - Optimizacion por Colonia de Hormigas



Introducción

Tema elegido: Optimización mediante Ant Colony Optimization (ACO)

¿Qué es?

Es una meta heurística que se basa en aplicar la metáfora del comportamiento en las colonias de hormigas reales para encontrar los caminos más cortos entre las fuentes de comida y el hormiguero. 

Mientras las hormigas se mueven entre el hormiguero y la fuente de comida, las hormigas van depositando feromonas (sustancia que puede “olerse”). Entre más restos de feromona se encuentren en el camino, las hormigas tienden a seguir ese camino más seguido. Las feromonas se van evaporando al pasar el tiempo, si una hormiga deja de pasar por determinado camino, el olor a feromona desaparecerá y si no encuentran algún rastro de feromonas, las hormigas ya no seguirán pasando por el mismo lugar. Cabe aclarar que las hormigas se mueven de forma aleatoria.

Esta técnica es usada para la resolución de problemas complejos  de optimización combinatoria  y búsqueda.


Objetivo

Desarrollar un algoritmo basado en ACO para la resolución del problema del viajero.


Justificación

Elegimos este método por que nos pareció una manera muy interesante para optimizar un resultado (en este caso, el del problema del viajero).


Desarrollo

Tenemos 8 ciudades a las que queremos visitar, las ciudades con sus costos y distancias son:

Ciudad
Costo
Distancia
1
40
60
2
15
25
3
30
50
4
10
20
5
90
110
6
140
170
7
110
95
8
75
130

Para determinar cual será la probabilidad de que las hormigas pasen mas por cierto camino según la cantidad de feromona es, es:


Donde:

Pkij (t) es la probabilidad con la que, en una iteración t del algoritmo, la hormiga k, situada actualmente en la ciudad i, elige a la ciudad j como próxima parada. Nki es el conjunto de ciudades no visitadas todavía por la hormiga k. tij (t) es la cantidad de feromona acumulada sobre el arco (i, j) de la red en la iteración tij es la información heurística para la que, en el caso del TSP, se utiliza la inversa de la distancia existente entre las ciudades  i y j alfa y beta son dos parámetros del algoritmo, los cuales hay que ajustar.

También necesitamos una formula que nos diga el tiempo de actualización de la feromona, la cual es:
tij = (1- P) tij

Donde P es la constante de evaporación. Para este problema usamos una constante de evaporación de 0.1.


Código

Realizamos el programa en lenguaje JAVA usando el compilador ECLIPSE, para este problema usamos 3 clases:


*ACO.java: Clase principal del programa, es donde se desarrolla el mismo:
*Datos.java: Donde tenemos las constantes a utilizar en el problema
*Gráficos.java: Done se inicializan las ciudades


Dentro de la clase ACO tenemos la función calcularprob() donde aplicamos la formula de probabilidad donde las hormigas eligen el camino según el rastro de feromona.




También tenemos la función actualizarferomona(), la cual como su nombre lo dice, actualiza las feromonas, usando la formula mencionada anteriormente.





Resultados

Realizamos con éxito la practica, vemos como funciona correctamente la implementación de las formulas en el programa, solo tenemos que arreglar la manera en que se muestran los resultados (los enumera del 0 al 7).




Conclusiones

Es obvio que podemos mejorar el programa, por ejemplo, dar una opción para que el usuario pueda ingresar los valores de los costos, distancia entre las ciudades o cantidad de ciudades a recorrer
Aprendimos mucho en esta práctica sobre ACO y vimos esta manera de optimizar de forma más entendible.