You are on page 1of 12

Cruce de Mapeo Parcial (PMX)

El PMX puede ser visto como una extensin del mtodo crossover de dos
puntos aplicado a
una cadena binaria. Emplea un mtodo especial de
reparacin para resolver la ilegitimidad causada por el simple mtodo
crossover de dos puntos. As que lo esencial del PMX es un simple mtodo
crossover de dos puntos junto con un mtodo de reparacin.
Paso 1. Seleccione dos posiciones a lo largo de la cadena uniformemente al
azar. Las subcadenas definidas por las dos posiciones son llamadas las
secciones de mapeo.
Paso 2. Intercambie dos subcadenas entre padres para producir un protohijo.
Paso 3. Determine la relacin de mapeo entre las dos secciones de mapeo.
Paso 4. Legalice la descendencia con la relacin de mapeo.
Cruce en Orden (OX)
Este puede ser visto como una clase de variacin del PMX con un diferente
mtodo de reparacin. OX trabaja de la siguiente manera:
Paso 1. Seleccione una subcadena de un padre al azar
Paso 2. Se produce un proto-hijo mediante la copia de la subcadena dentro de
la correspondiente posicin de este.
Paso 3. En el segundo padre borre las ciudades que estn ya en la subcadena.
La secuencia resultada de ciudades contiene las ciudades que el proto-hijo
necesita.
Paso 4. Coloque las ciudades dentro de las posiciones sin arreglo del protohijo
de izquierda a derecha de acuerdo a la orden de la secuencia para producir una
descendencia.
Cruce en Ciclo (CX)
CX toma algunas ciudades de un padre y selecciona las restantes ciudades del
otro padre, las ciudades del primer padre no son seleccionadas aleatoriamente
sino que en este caso se define un ciclo el cual decide que ciudades con sus
posiciones sern seleccionadas. CX trabaja de la siguiente manera:
Paso 1. Encuentre el ciclo con el cual define la correspondencia de posiciones
entre las ciudades de los dos padres
Paso 2. Copie las ciudades en el ciclo para un hijo con la correspondencia de
posiciones de un padre.
Paso 3. Determine las ciudades restantes para el hijo mediante la eliminacin
de estas ciudades las cuales ya estn en el ciclo del otro padre.
Paso 4. A completar el hijo con las ciudades restantes.

Mtodos de seleccin
Ejemplo 1
Vamos a partir de una funcin f(x) muy sencilla:
f(x) =x2
Imagina que deseas encontrar el valor de x que hace que la funcin f(x)
alcance su valor mximo, pero restringiendo a la variable x a tomar valores
comprendidos entre 0 y 31. An ms, a x slo le vamos a permitir tomar
valores enteros, es decir: 0,1, 2, 3,..., 30, 31. Obviamente el mximo se tiene
para x =31, donde f vale 961. No necesitamos saber algoritmos genticos para
resolver este problema, pero su sencillez hace que el algoritmo sea ms fcil
de comprender.
Lo primero que debemos hacer es encontrar una manera de codificar las
posibles soluciones (posible valores de x). Una manera de hacerlo es con la
codificacin binaria. Con esta codificacin un posible valor de x es: (0, 1, 0, 1,
1).
Cmo se interpreta esto? Muy sencillo: multiplica la ltima componente (un 1)
por 1, la penltima (un 1) por 2, la anterior (un 0) por 4, la segunda (un 1) por y
la primera (un 0) por 16 y a continuacin haz la suma: 11. Observa que (0, 0,
0, 0, 0) equivale a x = 0 y que (1, 1, 1, 1, 1) equivale a x = 31.
A cada posible valor de la variable x en representacin binaria le vamos a
llamar individuo. Una coleccin de individuos constituye lo que se denomina
poblacin y el nmero de individuos que la componen es el tamao de la
poblacin.
Una vez que tenemos codificada la solucin, debemos escoger un tamao de
poblacin. Para este ejemplo ilustrativo vamos a escoger 6 individuos.
Debemos partir de una poblacin inicial. Una manera de generarla es
aleatoriamente: coge una moneda y lnzala al aire; si sale cara, la primera
componente del primer individuo es un 0 y en caso contrario un 1. Repite el
lanzamiento de la moneda y tendremos la segunda componente del primer
individuo (un 0 si sale cara y un 1 si sale cruz). As hasta 5 veces y obtendrs el
primer individuo. Repite ahora la secuencia anterior para generar los individuos
de la poblacin restantes. En total tienes que lanzar 5 * 6 = 30 veces la
moneda.
Nuestro siguiente paso es hacer competir a los individuos entre s. Este proceso
se conoce como seleccin. La tabla 1 resume el proceso.
Tabla 1.- SELECCION
(1) (2) (3) (4) (5)
1 (0,1,1,0,0) 12 144 6

2
3
4
5
6

(1,0,0,1,0)
(0,1,1,1,1)
(1,1,0,0,0)
(1,1,0,1,0)
(0,0,0,0,1)

18 324
15 225
24 576
26 676
111

3
2
5
4

Cada fila en la tabla 1 est asociada a un individuo de la poblacin inicial. El


significado de cada columna de la tabla es el siguiente:
(1)
(2)
(3)
(4)

=
=
=
=

Nmero que le asignamos al individuo.


Individuo en codificacin binaria.
Valor de x.
Valor de f(x).

Observa que el mejor individuo es el 5 con f = 676. Calcula la media de f y


obtendrs fmed =324.3.
En cuanto a la columna (5) ahora te lo explico. Una manera de realizar el
proceso de seleccin es mediante un torneo entre dos. A cada individuo de la
poblacin se le asigna una pareja y entre ellos se establece un torneo: el mejor
genera dos copias y el peor se desecha. La columna (5) indica la pareja
asignada a cada individuo, lo cual se ha realizado aleatoriamente. Existen
muchas variantes de este proceso de seleccin, aunque este mtodo nos vale
para ilustrar el ejemplo.
Despus de realizar el proceso de seleccin, la poblacin que tenemos es la
mostrada en la columna (2) de la tabla 2. Observa, por ejemplo, que en el
torneo entre el individuo 1 y el 6 de la poblacin inicial, el primero de ellos ha
recibido dos copias, mientras que el segundo cae en el olvido.
Tabla 2.- CRUCE
(1) (2) (3) (4)
1 (0,1,1,0,0) 5 1
2 (0,1,1,0,0) 3 3
3 (1,0,0,1,0) 2 3
4 (1,0,0,1,0) 6 1
5 (1,1,0,1,0) 1 1
6 (1,1,0,1,0) 4 1
Tras realizar la seleccin, se realiza el cruce. Una manera de hacerlo es
mediante el cruce 1X: se forman parejas entre los individuos aleatoriamente de
forma similar a la seleccin. Dados dos individuos pareja se establece un punto
de cruce aleatorio, que no es ms que un nmero aleatorio entre 1 y 4 (la
longitud del individuo menos 1). Por ejemplo, en la pareja 2-3 el punto de cruce
es 3, lo que significa que un hijo de la pareja conserva los tres primeros bits del
padre y hereda los dos ltimos de la madre, mientras que el otro hijo de la
pareja conserva los tres primeros bits de la madre y hereda los dos ltimos del
padre. La poblacin resultante se muestra en la columna (2) de la tabla 3.

Tabla 3.- POBLACION TRAS EL CRUCE


(1) (2) (3) (4)
1 (0,1,0,1,0) 10 100
2 (1,1,1,0,0) 28 784
3 (0,1,1,1,0) 14 196
4 (1,0,0,0,0) 16 256
5 (1,1,0,1,0) 26 676
6 (1,0,0,1,0) 18 324
En la columna (3) tienes el valor de x; en la siguiente tienes el valor de f
correspondiente.
Fjate en que ahora el valor mximo de f es 784 (para el individuo 2), mientras
que antes de la seleccin y el cruce era de 676. Adems fmed ha subido de
324.3 a 389.3. Qu quiere decir esto? Simplemente que los individuos
despus de la seleccin y el cruce son mejores que antes de estas
transformaciones.
El siguiente paso es volver a realizar la seleccin y el cruce tomando como
poblacin inicial la de la tabla 3. Esta manera de proceder se repite tantas
veces como nmero de iteraciones t fijes. Y cul es el ptimo? En realidad un
algoritmo gentico no te garantiza la obtencin del ptimo pero, si est bien
construido, te proporcionar una solucin razonablemente buena. Puede que
obtengas el ptimo, pero el algoritmo no te confirma que lo sea. As que
qudate con la mejor solucin de la ltima iteracin. Tambin es buena idea ir
guardando la mejor solucin de todas las iteraciones anteriores y al final
quedarte con la mejor solucin de las exploradas.
CONSIDERACIONES ADICIONALES
En problemas reales en los que se aplican los algoritmos genticos, existe la
tendencia a la homogenizacin de la poblacin, es decir a que todos los
individuos de la misma sean idnticos. Esto impide que el algoritmo siga
cexplorando nuevas soluciones, con lo que podemos quedar estancados en un
mnimo local no muy bueno.
Existen tcnicas para contrarrestar esta "deriva gentica". El mecanismo ms
elemental, aunque no siempre suficientemente eficaz, es introducir una
mutacin tras la seleccin y el cruce. Una vez que has realizado la seleccin y
el cruce escoges un nmero determinado de bits de la poblacin y los alteras
aleatoriamente. En nuestro ejemplo consiste simplemente en cambiar
algunos(s) bit(s) de 1 a 0 de 0 a 1.

Ejemplo 2
En esta entrada vamos a poner un ejemplo de cmo obtener el mximo de la
funcin que se muestra a continuacin en el rango de [0-15] utilizando un
algoritmo gentico (el argumento del seno de la funcin se da en radianes). En
este ejemplo que ponemos, esta funcin sera la Funcin de Fitness o
funcin de calidad que utilizaremos en este problema, ya que la x que
maximize esta funcin, sera la mejor solucin al problema.

Antes de ver como solucionar el problema, vamos a mostrar en la siguiente


imagen la grfica de esta funcin para comprobar que el mximo de esta
funcin para el intervalo [0-15] es x=11 y de esta forma podremos ver lo
bueno o malo que son los algoritmos genticos:

El primer problema que se nos plantea es como representar a los


individuos que tendremos en este algoritmo gentico. Pues en este caso es
muy sencillo y el problema esta planteado adrede para ello. Como en los
algoritmos genticos los individuos se representan con cadenas binarias es
muy intuitivo que si queremos encontrar el mximo entre el intervalo [0-15]
representemos a los individuos como nmeros binarios en este caso como
nmeros binarios de longitud 4. Con un numero binario de 4 bits podremos
representar 16 nmeros (2^4=16) con lo cual decimos que los individuos van
a estar representados por un cromosoma de longitud 4. Ejemplo:

Una vez llegado a este punto en el que tenemos definida la funcin de fitness y
como representar a los individuos, tenemos que ver: como generamos la
primera generacin de individuos, como los emparejamos y como mutan. Para
realizar todas estas cosas se generar un conjunto de nmeros aleatorios con
los que trabajaremos y que veremos su significado a continuacin. Para ello y
antes de nada deberemos definir con que numero de individuos queremos
trabajar, la probabilidad de generacin del cromosoma, la probabilidad de
emparejamiento y la probabilidad de mutacin. Para ver de forma detallada
todo este proceso y siguiendo el pseudocdigo mostrado en la entrada
de Que es la Computacin Evolutiva? vamos a definir todas estas cosas y
ver de forma detallada el transcurso del algoritmo:
1. Longitud del cromosoma: 4
2. Conjunto de elementos del cromosoma: {0,1}
3. Nmero de individuos de la poblacin: 2
4. Para
la
creacin
de
la
primera
generacin:
3.1.- Probabilidad del elemento 0: num aleatorio < 0.5
3.2.- Probabilidad del elemento 1: num aleatorio >0.5
5. Probabilidad de emparejamiento: 0.7
6. Probabilidad de mutacin: 0.3

El conjunto de nmeros aleatorios con los que vamos a trabajar va a ser


el siguiente:

En primer lugar vamos a obtener los dos primeros individuos que van a
formar la generacin inicial. Para obtener los cromosomas de los dos
individuos vamos a utilizar los 8 primeros nmeros aleatorios (4 por
individuo). Si el numero aleatorio es menor que 0.5 pondremos el
elemento 0 al cromosoma y si es mayor que 0.5 le daremos valor 1. A
continuacin mostramos como generamos los individuos:

Una vez que conocemos los individuos, aplicamos la funcin de fitness para
que nos diga que individuo es el mejor de los dos y cuanto mejor es uno que
otro para ver posteriormente que probabilidad de emparejamiento tiene cada
uno:

Como vemos ambos individuos son muy parecidos porque tienen una calidad
similar aunque el individuo 2 es un poco mejor que el individuo 1 ya que lo que
pretendemos es encontrar el mximo de la funcin. Ahora pasamos a calcular
las probabilidades de cada individuo para el emparejamiento y esto lo hacemos
con una regla de tres simple:

Lo que pretendemos con esto es ver que individuos seleccionamos para


emparejarse. Para ello cogeremos los dos siguientes nmeros aleatorios y si
estn dentro de los rangos de seleccin, ese individuo ser apto para el
emparejamiento (en el caso de que haya emparejamiento es esa generacin).
Esto quiere decir que si sacamos un nmero aleatorio dentro del intervalo [00.48) el individuo 1 se emparejar y si otro nmero aleatorio esta en el
intervalo [0.48-1] tambien sera apto el individuo 2 para emparejarse. A
continuacin vemos si son aptos para emparejarse o no:

Con esto vemos que los dos individuos son aptos para el emparejamiento, pero
habr emparejamiento en esta generacin?. Para ver si en esta
generacin hay emparejamiento hay que ver si el siguiente numero aleatorio
esta dentro de la probabilidad de emparejamiento que la definimos como 0.7,
lo que quiere decir que si el nmero aleatorio esta en el rango [0-0.7) habr
emparejamiento y si esta entre [0.7-1] no habr emparejamiento. Esto lo
mostramos a continuacin:

Vemos que en esta generacin hay emparejamiento y que adems los dos
individuos se van a emparejar, as que ahora hay que ver como se emparejan
estos dos individuo. Para ello hay que calcular el punto de corte del
cromosoma sobre el que se va ha hacer el intercambio. Como se muestra a
continuacin se ve que hay 3 puntos de corte en el cromosoma para que se
puedan emparejar:

Esto quiere decir que volvemos a crear rangos de seleccin y seleccionaremos


uno de los tres puntos de corte para el emparejamiento. Esta seleccin del
punto de corte lo mostramos a continuacin:

Con todo lo calculado podemos ya generar unos nuevos individuos. Dado que
hemos seleccionado como punto de corte al tercer cromosoma, querr decir
que el primer individuo tendr como valor de la ltima posicin del cromosoma
el valor de la ultima posicin del cromosoma del individuo 2, lo que quiere decir
que el emparejamiento dar como resultado dos nuevos individuos con el
intercambio en los valores del cromosoma. Esta intercambio lo mostramos a
continuacin:

Ya por ltimo queda ver si alguno de los individuos sufrir alguna mutacin.
Para ello cogemos un nmero aleatorio por cromosoma (8 nmeros aleatorio, 4
por cada individuo) y vemos si esta dentro de la probabilidad de mutacin, es
decir, que si el numero aleatorio esta dentro del rango [0-0.3) el elemento del
cromosoma mutar a su complementario y sino esta en ese rango no habr
mutacin. A continuacin vemos las mutaciones que se producen:

Llegados a este punto ya tenemos una nueva generacin de individuos creada


que es una generacin en la cual tenemos un individuo (individuo 2 con x=1)
que es un individuo mejor que los de la generacin anterior ya que su valor
aplicando la funcin de fitness es de 1,41 tal y como se muestra a
continuacin:

Tambien vemos que el individuo 1 es peor individuo que sus progenitores.


Como podris observar solamente con una nica generacin no nos hemos
acercado al mejor individuo que seria el individuo con valor x=11 con lo cual
necesitaramos ms individuos y hacer esto con muchas ms generaciones, es
decir repetir este proceso n veces y en la generacin n coger el mejor
individuo.

You might also like