Un Algoritmo Genético H´ıbrido Paralelo para Instancias Complejas ...
Un Algoritmo Genético H´ıbrido Paralelo para Instancias Complejas ...
Un Algoritmo Genético H´ıbrido Paralelo para Instancias Complejas ...
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
implementaciones <strong>para</strong>lelas en clusters de máquinas<br />
distribuidas se propusieron inicialmente en [11].<br />
A. <strong>Algoritmo</strong> genético celular<br />
En esta sección se describe el cGA utilizado en cada<br />
una de las islas. En el <strong>Algoritmo</strong> 1 se puede ver<br />
el pseudocódigo del cGA utilizado en este trabajo.<br />
Usualmente, la población se encuentra estructurada<br />
en una rejilla toroidal de 2 dimensiones, en el que se<br />
define una estructura de vecindario. Iterativamente,<br />
el algoritmo va considerando cada uno de los individuos<br />
que forman la población actual (líneas 3 y 4).<br />
Los individuos sólo pueden interactuar con sus vecinos<br />
(línea 5), por lo que los padres son elegidos del<br />
vecindario del individuo actual (línea 6) de acuerdo a<br />
un criterio dado. Los operadores de recombinación y<br />
mutación son aplicados a los individuos en las líneas<br />
7 y 8 con probabilidades Pc y Pm, respectivamente.<br />
Tras esto, se le aplica la búsqueda local al individuo<br />
resultante (línea 9), y a continuación se calcula su<br />
valor de fitness (i.e., el coste de la solución representada).<br />
El método de búsqueda local aplicado se<br />
explica más abajo. Tras la búsqueda local, el mejor<br />
individuo de entre el actual y el descendiente se<br />
coloca en la posición equivalente de una población<br />
auxiliar (línea 11).<br />
<strong>Un</strong>a vez aplicado el ciclo reproductor explicado<br />
<strong>para</strong> todos los individuos de la población, la población<br />
actual se sustituye por la auxiliar (línea 14),<br />
y se actualizan las estadísticas (línea 15). Este bucle<br />
se repite hasta que la condición de terminación<br />
se cumpla (línea 2). En nuestro caso, la condición<br />
de terminación será realizar 5 000 generaciones o, lo<br />
que es lo mismo, 500 000 evaluaciones.<br />
A continuación se detallan algunos aspectos importantes<br />
de la implementación del cGA utilizado:<br />
Representación de los individuos. La representación<br />
utilizada <strong>para</strong> los individuos es la llamada<br />
GVR (Genetic Vehicle Representation) [12]. En<br />
GVR, el genotipo contiene una permutación de enteros<br />
(representando a los distintos clientes), así como<br />
información de la posición en la que termina cada<br />
ruta. En nuestro algoritmo no se admite la existencia<br />
de individuos no factibles, por lo que cuando se<br />
exceden bien la capacidad del vehículo o bien la lon-<br />
Algorithm 1 Pseudocódigo de un cGA.<br />
1: proc Evoluciona(cga) //Parametros del algoritmo en ‘cga’<br />
2: while not Condición Terminación() do<br />
3: for x ← 1 to WIDTH do<br />
4: for y ← 1 to HEIGHT do<br />
5: vecinos←Obtener Vecindario(cga,posición(x,y));<br />
6: padres←Selección(vecinos);<br />
7: indiv aux←Recombinación(cga.Pc,padres);<br />
8: indivaux aux←Mutación(cga.Pm,indiv aux);<br />
9: indiv aux←Búsqueda Local(cga.Pl,indiv aux);<br />
10: Evalua Fitness(indiv aux);<br />
11: Reemplazo(posición(x,y),indiv aux,cga,pop aux);<br />
12: end for<br />
13: end for<br />
14: cga.pop←pop aux;<br />
15: Actualiza Estadísticas(cga);<br />
16: end while<br />
17: end proc Evoluciona;<br />
Algorithm 2 Pseudocódigo del operador de cruce.<br />
// Sean I1 e I2 los padres seleccionados del vecindario;<br />
Seleccionar una sub-ruta aleatoria SR = {a1, . . . , an} de I2<br />
Buscar el cliente c /∈ SR más cercano geográficamente a a1<br />
Eliminar todos los clientes de I1 que están en SR<br />
El descendiente se obtiene tras insertar SR en el material<br />
genético de I1 de forma que a1 esté situado inmediatamente<br />
después de c<br />
gitud máxima en una ruta, se procede a su re<strong>para</strong>ción<br />
mediante la partición de la ruta en dos rutas (o<br />
más si es necesario) distintas que no violen ninguna<br />
restricción.<br />
Generación de la población inicial. Los individuos<br />
de la población inicial son generados de forma<br />
aleatoria y a continuación son modificados como se<br />
detalla en [12] <strong>para</strong> forzar que representen soluciones<br />
válidas al problema (i.e., no incumplen ninguna<br />
restricción).<br />
Operador de cruce. El operador de cruce utilizado<br />
en PEGA es generic crossover, propuesto originalmente<br />
en [12]. Este operador tiene la principal<br />
característica de promover de una forma importante<br />
la diversidad en la población. Consideramos que<br />
ésta es una característica muy importante del operador,<br />
ya que en nuestra experiencia en trabajos anteriores<br />
[8], [13], [14] la población completa termina<br />
convergiendo hacia un mismo óptimo local en multitud<br />
de ocasiones. Este operador de cruce es algo<br />
inusual, puesto que el descendiente generado no contiene<br />
exactamente una mezcla del material genético<br />
de los padres, como puede verse en la Fig. 3. En el<br />
<strong>Algoritmo</strong> 2 se muestra un pseudocódigo del operador<br />
de cruce utilizado.<br />
Padre 1<br />
Padre 2<br />
Si el cliente<br />
más próximo<br />
geográficamente<br />
a 9 es 6<br />
Sub-ruta<br />
Aleatoria<br />
Descendiente<br />
Fig. 3. El operador de cruce utilizado: Generic crossover.<br />
Mutación. La mutación está compuesta por cuatro<br />
tipos de mutaciones distintas que se aplican con<br />
diferentes probabilidades (sólo se aplica una de ellas<br />
en cada caso), igual que en [12]. El uso de estos cuatro<br />
operadores de mutación nos permite modificar<br />
el itinerario de una ruta, mover clientes entre rutas,<br />
y añadir o eliminar rutas, al igual que sucede con<br />
el operador de cruce utilizado. Estos operadores son<br />
(ver Fig. 4):<br />
• Intercambio. Consiste en intercambiar la posición<br />
de dos clientes (pertenecientes a la misma ruta<br />
o no) elegidos aleatoriamente.<br />
• Inversión. Invierte el orden de visita de los clientes<br />
que se encuentran entre dos clientes elegidos alea-