Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Alumnos:
Luciano Gimenez
Nicols Rago
Profesora a cargo:
2
1. Introduccin
En el presente trabajo se pretende desarrollar una herramienta que ayude a los usuarios de
colectivo de Tandil a elegir los colectivos y recorridos que optimicen sus viajes.
La tcnica de colonia de hormigas fue propuesta por Marco Dorigo en 1992 y se basa en el
comportamiento de las hormigas cuando estas estn buscando un camino entre la colonia y
una fuente de alimentos.
3
2. Descripcin de la tcnica Colonia de Hormigas
La tcnica colonia de hormigas es una metaheurstica desarrollada a partir de la
observacin de las hormigas en nuestro mundo natural. Los algoritmos metaheursticos son
algoritmos aproximados de optimizacin y bsqueda de propsito general. Son
procedimientos iterativos que guan una heurstica subordinada combinando de forma
inteligente distintos conceptos para explorar y explotar adecuadamente el espacio de
bsqueda.
Las hormigas reales son capaces de encontrar el camino ms corto desde una fuente de
alimento a su colonia, sin usar ayuda visual, usando informacin de una sustancia qumica
que depositan a medida que realizan su recorrido denominada feromona.
Las hormigas inicialmente vagan de manera aleatoria, y una vez encontrada comida
regresan a su colonia dejando un rastro de feromonas. Ante una bifurcacin, las hormigas
eligen el camino a tomar teniendo en cuenta la cantidad de feromonas en los posibles
caminos. Esta eleccin no es exacta sino probabilstica, de hecho se asume que cuando
ciertos individuos eligen un camino que no es el que tiene mayor cantidad de feromonas
promueven el descubrimiento de nuevas rutas.
Por tanto, cuando una hormiga encuentra un buen camino entre la colonia y la fuente de
comida, hay ms posibilidades de que otras hormigas sigan este camino y con una
retroalimentacin positiva se conduce finalmente a todas las hormigas a un solo camino.
Por otro lado, las hormigas son agentes computacionales independientes unos de otros y
construyen soluciones tomando decisiones en cada interseccin teniendo en cuenta la
informacin mencionada anteriormente. Cada hormiga representa una solucin completa
del problema. En la variante clsica cuando las hormigas finalizan su recorrido se evala la
calidad de las soluciones obtenidas y en base a estos resultados se deposita mayor o
4
menor cantidad de feromona. Se desarrollaron distintas variantes de esta metaheurstica y
sus diferencias principales radican en cmo se deposita la feromona, ya sea durante el
recorrido o al finalizarlo, en base a la cantidad de hormigas que se tomarn en cuenta para
realizar el depsito, o bien el tratamiento especial que se le dar a la feromona depositada
por la mejor hormiga.
procedure AS {
InicializarDatos
while(not CriterioFin) {
ConstruirSoluciones
BusquedaLocal
ActualizarFeromonas
}
}
ALGORITMO 1 - ESQUEMA AS
Inicializacin (InicializarDatos):
En esta fase se introducen los datos del problema y se inicializan los parmetros del
algoritmo, por lo que es dependiente del problema que se pretende resolver y tambin del
tipo de ACO (Optimizacin por colonia de hormigas) que se implemente.
En primer lugar, se leen los valores que definen la instancia del problema y se manipulan
los datos para obtener la informacin necesaria para la resolucin, como puede ser la
informacin heurstica.
5
Construccin de soluciones (ConstruirSoluciones)
Aqu cada hormiga artificial construye una solucin al problema(sh). La eleccin se lleva a
cabo mediante una regla proporcional aleatoria, donde a cada elemento posible se le asigna
una probabilidad que depende del rastro de feromonas acumuladas y de la informacin
heurstica asociada de acuerdo a la siguiente frmula:
[ ] [ ]
= { [ ] [ ]
El factor informacin heurstica permite guiar la bsqueda hacia aquellas zonas del espacio
de soluciones ms prometedoras segn las caractersticas del problema. Por otro lado, las
feromonas inducen la bsqueda hacia soluciones de calidad ya visitadas. Los parmetros
y son los que permiten ajustar el peso especfico de ambos factores en el clculo de la
probabilidad.
6
Actualizacin de feromonas (ActualizarFeromonas)
Una vez que cada una de las hormigas ha construido una solucin y ha finalizado el
proceso de bsqueda local, se actualiza el rastro de feromonas a partir de las soluciones
obtenidas.
En primer lugar, se realiza la evaporacin de feromonas en todos los elementos del rastro,
simulando el proceso que ocurre en la naturaleza, de acuerdo a la siguiente frmula:
= (1 ). (, )
Aunque para los insectos no es crucial a la hora de formar los rastros, s lo es cuando
tratamos con hormigas artificiales, porque favorece la atenuacin de los depsitos iniciales,
realizados normalmente por soluciones de baja calidad.
Tras esto, el siguiente paso es el depsito de feromonas. Cada hormiga artificial deposita
una cantidad de feromonas en cada uno de los elementos del rastro que forman la solucin,
aumentando as la intensidad del rastro. El depsito se realiza de acuerdo a la siguiente
frmula:
= + (, )
=1
1 (, )
= {
0 (, )
7
Criterios de finalizacin (CriterioFin)
En el AS optaron nicamente por fijar un nmero de iteraciones de la colonia de hormigas,
aunque se puede aplicar cualquiera de los siguientes criterios de finalizacin:
{ [ ] } 0
={
> 0
En este tipo de ACO, slo evapora y deposita feromonas en el rastro la hormiga con la
mejor solucin encontrada hasta el momento de acuerdo a la siguiente frmula:
= (1 ) + (, )
Con esta frmula se logra ponderar el nuevo valor del rastro entre el valor antiguo y la
cantidad de feromona depositada.
Adems de la actualizacin del rastro de feromonas global, se aplica una actualizacin local
cada vez que una hormiga hace una eleccin de acuerdo a la siguiente frmula:
= (1 ) + 0
8
Donde (0<<1) es un parmetro del algoritmo y 0 es el valor de inicializacin del rastro de
feromonas.
ACS no tiene fase de exploracin, sino que se centra en explotar desde el principio la mejor
solucin encontrada a partir de pequeas variaciones de sta, estableciendo un valor
elevado de 0. Gracias a la actualizacin local de las feromonas, se favorece la exploracin
de las elecciones menos visitadas. La convergencia de este tipo de ACO es rpida, debido
a la poca exploracin que hace del espacio de soluciones.
9
3. Hacia una implementacin
Para comenzar a atacar el problema utilizando la tcnica, primero definimos el grafo que
vamos a utilizar. Creamos un grafo cuyos vrtices son nmeros enteros que representan
algunas esquinas representativas para los recorridos de los colectivos, y en los arcos
usamos como costo una aproximacin de la cantidad de cuadras entre los vrtices (ya que
los colectivos hacen un recorrido distinto de ida y de vuelta). Creamos un vrtice para cada
lnea de colectivo en las esquinas elegidas, y para saber rpidamente a que lnea pertenece
el vrtice utilizamos la siguiente distribucin de los nmeros utilizando aritmtica mdulo 7:
Los nmeros pertenecientes a la clase de congruencia del 0 (es decir todos aquellos
cuyo mdulo 7 da 0) pertenecen al recorrido de la Lnea 500 (colectivos amarillos).
Los nmeros pertenecientes a la clase de congruencia del 1 pertenecen al recorrido de
la Lnea 501 (colectivos rojos).
Los nmeros pertenecientes a la clase de congruencia del 2 pertenecen al recorrido de
la Lnea 502 (colectivos blancos).
Los nmeros pertenecientes a la clase de congruencia del 3 pertenecen al recorrido de
la Lnea 503 (colectivos azules).
Los nmeros pertenecientes a la clase de congruencia del 4 pertenecen al recorrido de
la Lnea 504 (colectivos verdes).
Los nmeros pertenecientes a la clase de congruencia del 5 pertenecen al recorrido de
la Lnea 505 (colectivos marrones).
Dejamos los nmeros pertenecientes a la clase de congruencia del 6 libres por si en
un futuro se desea representar esquinas donde no pasa ningn colectivo, para
modelar lugares a donde solo se puede acceder caminando.
10
Para representar la posibilidad de cambiar de una lnea de colectivo a otra en el recorrido,
conectamos todos los nodos pertenecientes a la misma esquina entre s (un arco de ida y
uno de vuelta). El costo asignado a estos arcos se va a discutir en la seccin 4.1.
Debido a que cada nodo representa una lnea de colectivo en un lugar y el objetivo de la
herramienta es encontrar el mejor recorrido entre dos lugares (es responsabilidad de la
herramienta elegir la mejor lnea), creamos una abstraccin para el usuario del grafo
anteriormente descripto, donde se juntan todos los nodos de las diferentes lneas de una
esquina en un solo nodo. De esta abstraccin el usuario va a elegir el nodo de origen y
destino deseado. El grafo con los nodos generales es el siguiente:
Como heurstica para el algoritmo utilizamos una funcin inversa al costo asociado al grafo
(es decir 1/Distancia al prximo nodo).
El mismo utiliza como estructura de almacenamiento interno un mapa, que asocia cada
vrtice (int) con la lista de los arcos que salen de ste. Todas las funciones del grafo se ven
reflejadas en el siguiente diagrama de clases:
11
DIAGRAMA 1 - CLASE GRAFO
InicializarFeromonas
InicializarVisitados
for n veces
list<camino> Soluciones= ConstruirSoluciones(Grafo, Inicio, Final, Feromonas, Visitados)
camino MejorSolucionLocal=CalcularMejorSolucion(Soluciones)
if (MejorSolucionLocal<MejorSolucionGlobal)
MejorSolucionGlobal=MejorSolucionLocal
ActualizarFermonasGlobal(MejorSolucionGlobal)
end for
12
La funcin ConstruirSoluciones tiene la siguiente estructura:
NodoActual=Inicio
int i=1
int Costo=0
list<int> NodosVisitados
list<camino> Soluciones
while (i<=Cantidad de Hormigas && HayCamino)
while (not LlegoAlfinal(NodoActual, Final) && HayCamino)
VerticeSiguiente= SeleccionarEstado(Grafo,NodoActual,Feromonas,Visitados)
if NoHayVerticeSiguiente
if (VerticeActual!=Inicio) ||
(VerticeActual==Inicio&&QuedanAdyacentesPorVisitar(Grafo,Inicio,Visitado)) //An se pueden
explorar otros caminos
Costo=Costo-UltimoCostoAadido
NodoActual=AnteUltimoNodoVisitado
NodosVisitados.eliminarUltimo()
else
NoHayCamino
else // Hay vrtice siguiente
Visitado[VerticeSiguiente]=true
Costo=Costo+Costo(NodoActual,VerticeSiguiente)
NodosVisitados.agregarUltimo(VerticeSiguiente)
NodoActual=VerticeSiguiente
end while
if (LlegoAlFinal(NodoActual,Final))
NodosVisitados.agregarUltimo(VerticeSiguiente)
ActualizarFeromonasLocal(Feromonas,NodosVisitados,Costo)
Soluciones.agregar(nuevoCamino(Costo,NodosVisitados))
end if
NodoActual=Inicio
NodosVisitados.vaciar()
Costo=0
Visitados[nodo]=false nodos del grafo
end while
return Soluciones
13
4. Implementacin
4.1. Estructuras de datos
Como ya se mencion, el grafo con los recorridos se almacena en un mapa de listas.
Para una mayor comodidad, definimos una estructura para almacenar los caminos, la cual
encapsula una lista de enteros (los nodos que forman el camino) junto a un entero (el costo del
camino).
Para saber si un nodo ya fue visitado o no usamos un arreglo (tambin dinmico) de booleans.
Ya que los nmeros de los nodos no son consecutivos por el hecho de usar la aritmtica mdulo
7 para cada lnea y de que no hay la misma cantidad de nodos de cada lnea (por ejemplo los
nodos 72 y 63 no existen, pero existen nodos ms grandes que ellos), para no tener en la matriz
de feromonas y en el arreglo de visitados celdas vacas que pertenecen a nodos que no existen,
creamos la matriz y el arreglo con un tamao igual a la cantidad de nodos del grafo y para
direccionar los nodos en stas estructuras usamos un arreglo de indirecciones (arreglo de
enteros) que tiene como tamao el mximo nmero de nodo (ste arreglo s queda con espacios
vacos de los nodos que no existen), el cual guarda para cada nodo la direccin que usa en la
matriz de feromonas y el arreglo de visitados.
Para juntar los nodos de una misma esquina en un nodo general, usamos un array que guarda
en cada posicin la lista de nodos (lista de enteros) que pertenecen a ese nodo general.
14
Cantidad de hormigas y condicin de corte: De igual forma que en el trabajo de Dorigo,
fijamos una cantidad de 10 hormigas en cada iteracin (cada hormiga genera un
camino), y la cantidad de iteraciones del algoritmo igual a la cantidad de nodos del grafo.
Por lo tanto, la complejidad total del algoritmo queda determinada ya sea por la actualizacin de
feromonas global o por la construccin de las soluciones, y por las n iteraciones. En
consecuencia O(V3).
15
4.4. Complejidad espacial
Con respecto al espacio utilizado por el algoritmo, se necesita considerar lo siguiente (siendo n
la cantidad de nodos del grafo):
Un mapa que asocia un entero con una lista de enteros para almacenar el grafo.
Una matriz de floats de tamao n x n para almacenar las feromonas.
Un arreglo de booleans de tamao n para almacenar el estado de los nodos (visitado/no
visitado).
Un arreglo de int que tiene como tamao el mximo valor en el grafo para el arreglo de
indirecciones
Una matriz de booleans de tamao n x n que se utiliza en la actualizacin global de
feromonas para marcar las feromonas que fueron actualizadas por pertenecer a la mejor
solucin global (para que no vuelvan a ser actualizadas).
16
5. Gua de uso de la aplicacin
1. Considerando los puntos del mapa mostrado, se debe seleccionar el punto de bsqueda
de origen y destino.
2. Luego se debe hacer clic en el botn buscar.
3. La solucin obtenida aparecer en el cuadro de texto de la parte inferior derecha de la
aplicacin.
17
6. Conclusiones
Se logr implementar un algoritmo que, siguiendo la tcnica Colonia de Hormigas encuentra el
mejor camino entre dos puntos de un grafo con una complejidad temporal no tan elevada
(O(V3)). Utilizando este algoritmo se logr construir utilizando Qt una herramienta simple que
permite a los usuarios encontrar las mejores lneas y recorridos para el viaje en colectivo que
desean hacer.
Aunque se obtuvo una buena complejidad temporal, sta se ve superada por la del algoritmo de
Dijkstra: O(|V|2+|A|) = O(|V|2) sin utilizar cola de prioridad, O((|A|+|V|) log |V|) = O(|A| log |V|)
utilizando cola de prioridad (por ejemplo un montculo).
Incluyendo en el grafo un nodo por cada esquina (todas las esquinas de los recorridos
de colectivos y nodos en las esquinas donde no hay colectivos disponibles que
representen la opcin de ir caminando, ponindole un costo asociado a esa opcin) se
podra obtener el recorrido completo que debera hacer un usuario para ir desde
cualquier esquina de la ciudad a cualquier otra, incluyendo el trayecto que debera hacer
caminando.
La heurstica usada se podra mejorar guardando para cada esquina sus coordenadas
en el mapa, y calculando cada vez que se elige el prximo nodo la distancia de Euclides
entre la posible eleccin y el nodo final, direccionando la bsqueda hacia los nodos que
tengan una menor distancia.
18
7. Bibliografa
Aparicio Guirao, D. (2012). Aplicacin de los algoritmos de hormigas para la resolucin de un
problema de equilibrado de lneas de montaje con robotizados. Escola Tcnica Superior
d'Enginyeria Industrial de Barcelona, Trabajo final de carrera Enginyeria Industrial.
Dorigo, M. (1992). Optimization, learning and natural algorithms. Ph. D. Thesis, Politecnico di
Milano, Italy.
Dorigo, M., & Gambardella, L. M. (1997). Ant colony system: a cooperative learning approach to
the traveling salesman problem. IEEE Transactions on evolutionary computation, 53-66.
Soifer, A. (2015). Algoritmos de Colonia de Hormigas para el Problema del Viajante de Comercio
por Familias y para el problema de Ruteo de Vehculos por Familias. Buenos Aires:
Tesis presentada para optar al ttulo de Licenciado en Ciencias de la Computacin,
Universidad de Buenos Aires - Facultad de Ciencias Exactas y Naturales.
Swarm Algorithms - Ant Colony System. (2012). En J. Brownlee, Clever Algorithms: Nature-
Inspired Programming Recipes.
19