Anda di halaman 1dari 11

Ejemplo de resolucion paso a paso:

Siguiend la codificacin y mtodo de evaluacin anteriormente comen- tados, a


continuacin se mostrar paso a paso la resolucin del sistema de ecuaciones
planteado.

Figura 1.11: Sistema de ecuaciones de partida

Tal y como se ha comentado anteriormente, la fortaleza de los algorit- mos


evolutivos reside en la evolucin en paralelo de mltiples soluciones. Sin
embargo, con el objetivo de hacer comprensible la simulacin se escogern
valores fuera del rango normal de operacin de este tipo de algoritmos, como
puede ser el tamao de poblacin. As, en este caso los parmetros de configu-
racin del algoritmo gentico sern los siguientes:
Tamao de poblacin: 10 individuos
Elitismo: 2 individuos
Algoritmo seleccin: torneo determinstico+aleatorio
Algoritmo cruce: 1 punto
Tasa de Cruce (P ): 90% c
Tasa de Mutacin (P ): 2.5%m
Algoritmo mutacin: puntual

El primer paso en la ejecucin del algoritmo gentico consistir en la ini-


cializacin de la poblacin gentica. En este caso, por simplicidad podemos
suponer que se restringen los valores de los genes al rango [-10..10] y que se
permiten nicamente 2 valores decimales.
1 -2,68 -7,68 6,53 Fitnes Fitness
2 1,36 0,02 1,62 s Normalizad
3,57
Puro 0,0046
o
3 -6,36 5,67 0,74 14,64 0,0187
4 2,5 -3,18 2,36 28,97 0,0370
5 -5,20 2,69 -1,27 32 0,0408
33,18 0,0808
6 2,79 9,54 1,25
63,32 0,0423
7 9,89 1,28 7,67 91,02 0,1161
8 4,5 0,69 -4,58 117,15 0,1495
-4,08 6,25 8,63 166,04 0,2119
9
233,81 0,2983
10 4,68 -8,72 -6,45
Obsrvese que la poblacin aparece ordenada, tal y como suele ser habi- tual,
en funcin del valor de bondad de cada individuo.
Siguiendo las pautas mostradas en el pseudocdigo de la Figura 1.5 y, puesto
que se ha establecido un valor de elitismo de 2, los dos primeros indi- viduos
de la poblacin pasaran a formar parte de la poblacin temporal.

El resto de la poblacin temporal se rellenar como resultado de los ope-


radores de cruce, copia y/o mutacin. El siguiente paso consistir en selec-
cionar dos individuos para la realizacin del cruce. El primero de ellos se
seleccionar mediante el algoritmo de torneo determinstico (p=2), por lo que
previamente debern seleccionarse al azar dos individuos de la poblacin, su-
pngase que sean los individuos 3 y 8 de la poblacin. De entre estos, el que
presenta mejor fitness es el individuo 3, por lo que ser seleccionado como
primer padre para el algoritmo de cruce. El segundo de los padres del algorit-
mo de cruce se seleccionar al azar, por ejemplo el individuo nmero 7.
Una vez seleccionados los padres se deber determinar si se procede o no a la
aplicacin del algoritmo de cruce. Para ello se genera un nmero al azar . En
este caso el algoritmo de cruce escogido es el cruce en un punto, por lo que
deber es-
cogerse un punto de cruce dentro del genotipo de los individuos. Suponiendo
que el punto escogido es el 1, el resultado del cruce sera el siguiente:

Una vez realizado el cruce deber comprobarse si es o no necesario reali- zar la


operacin de mutacin. En este caso supngase que se genera un valor 0,02 que,
al ser menor que P determinar la necesidad de realizar la muta- cin. En esta
ocasin se mutar de manera aleatoria el tercer gen del primer descendiente
generado en la operacin de cruce

4,5 0,69 2,13 3,08


Ambos individuos debern ser insertados en la poblacin temporal que,
llegado este punto, ya se encuentra completa. Por lo tanto, la poblacin genti-
ca actual se descarta y se establece como poblacin de la siguiente generacin,
en este caso la 1, la actual poblacin temporal.

Obsrvese cmo tras esta primera iteracin el individuo ms adaptado


obtenido ya mejora al mejor individuo previo. Es decir, la poblacin gentica
se va adaptando paulatinamente al medio, en este caso, a la resolucin del
sistema de ecuaciones.
Ahora sera el momento de determinar si la ejecucin del algoritmo gen-
tico contina o bien si ha de detenerse. Esta comprobacin suele realizarse en
base al nmero de generaciones transcurridas o en base a la aptitud del mejor
individuo. Tambin puede hacerse en base a criterios algo ms complejos,
como el hecho de que la mejor solucin proporcionada por el algoritmo gen-
tico vare en un porcentaje menor a uno prefijado durante determinado nmero
de generaciones.

1.8.1.2. Implementacin en Matlab


Para la implementacin de la solucin propuesta mediante Matlab se
emplear la versin 2.1 de su toolbox de algoritmos genticos. En las dos
siguientes secciones se recoge el cdigo necesario para la inicializacin del
algoritmo gentico y para la definicin de la funcin de evaluacin.

1.8.1.5.1. InIcIalIzacIn algorItmo gentIco


El fichero de inicializacin se encarga de la configuracin de los diferen-
tes parmetros del algoritmo gentico: tamao y tipo de poblacin, definicin
de los algoritmos de seleccin, cruce y mutacin, establecimiento de los cri-
terios de parada, etc.
Adems, en este fichero se establecen los coeficientes y trminos inde-
pendientes del sistema de ecuaciones que desea resolverse (variable sistemaE-
cuaciones). Esta variable se declara global para que sea directamente accesi-
ble desde el fichero de evaluacin

1.8.1.5.2. DefInIcIn De la funcIn De evaluacIn


La funcin evaluacin es una traduccin directa a cdigo Matlab del
pseudocdigo mostrado anteriormente.
As, el valor de ajuste de un individuo sera el sumatorio de las diferencias en
valor absoluto entre cada uno de los trminos independientes del sistema y los
trminos independientes obtenidos al sustituir los valores del genotipo en la
ecuacin correspondiente.
El bucle interno reemplaza en cada una de las ecuaciones del sistema los
valores proporcionados por el individuo para cada incgnita, mientras que el
bucle externo acumula las diferencias en valor absoluto entre el valor obtenido
tras dicha substitucin y el trmino independiente del sistema de ecuaciones.

1.8.2. N Reinas
A continuacin se muestra un ejemplo prctico resuelto mediante la apli- cacin
de algoritmos genticos. El problema de las N-Reinas, debido a sus pe- culiares
caractersticas, permitir observar un proceso de codificacin y confi- guracin
especial de un algoritmo gentico para proceder a su resolucin. Una vez
mostrados los pasos necesarios para abordar la solucin del problema, se
muestra su implementacin mediante el lenguaje de programacin MATLAB
(Mathworks, 2005)

1.8.2.1. Descripcin del problema


A grandes rasgos, el problema de las N Reinas consiste en situar N rei- nas
sobre un hipottico tablero de ajedrez de NxN celdas, de tal manera que ninguna
reina pueda atacar la posicin del resto de reinas. Es decir, colocar N reinas
sobre el tablero NxN sin que ninguna comparta fila, columna o diagonal de dicho
tablero.
Una bsqueda secuencial de todas las posibles combinaciones implicara la
bsqueda de N(N-1) 1 = N! posibilidades. Concretamente, para un ta-
blero tradicional de 8x8 casillas, existiran 8! = 40.320 posibilidades, de las
cuales nicamente 92 seran soluciones vlidas. En la Figura 1.12 se muestra
una de estas soluciones vlidas, con la ubicacin de las 8 reinas sobre el ta-
blero de ajedrez
1.8.2.2. Codificacin del problema

Si desea abordarse el problema mediante el empleo de algoritmos genti-


cos, en primer lugar ser necesario codificarlo en los trminos adecuados.
Una primera aproximacin a la codificacin del problema se podra plan- tear
como una matriz de NxN elementos binarios. En este caso un valor 1
significara que se encuentra una reina en esa posicin, y un 0 que esa casilla
del tablero est vaca. Se tratara de una codificacin claramente ineficiente ya
que se est almacenando mucha ms informacin de la necesaria, puesto que el
hecho de conocer en que posiciones se colocan las reinas implica directa- mente
el conocimiento acerca de las casillas que se encuentran vacas.
Por lo tanto puede plantearse otra codificacin, mucho ms eficiente. Para ello,
hay que recordar que cada reina ha de estar en una fila y columna dife- rente.
Partiendo de que en cada fila existir una reina, el problema se puede replantear
de tal manera que consista en determinar la columna dentro de la fila
correspondiente en la que haya que colocar la reina, de tal manera que ninguna
se haga jaque. Por lo tanto, la solucin al problema podr codificarse en forma
de una tupla de n valores S = (X1, X2, , Xn) en la que cada Xi representa la
columna en la que se coloca la reina de la fila i. Para evitar situar ms
de una reina en la misma columna, los valores de S sern una permutacin de la
tupla (1, 2, , N).

Retomando la solucin mostrada en la Figura 1.12, sta se codificara segn la


siguiente tupla S = (5, 3, 8, 4, 7, 1, 6, 2), de tal manera que la reina de
la primera fila se sita en la columna 5, la reina de la segunda fila se sita en
la columna 3, y as sucesivamente.

1.8.2.3. Funcin de Evaluacin


Una vez determinada la codificacin del problema, ser necesario propor- cionar
una funcin de fitness que permita determinar la validez de cada uno de los
individuos generados por el algoritmo gentico.
Para ello deber tenerse en cuenta que una solucin ser vlida cuando ninguna
reina amenaza al resto. Es decir, cuando ninguna comparta fila, co- lumna o
diagonal. En la codificacin escogida, cada posicin i del vector se corresponde
con la posicin de la reina dentro de la fila i del tablero, con lo cual no podr
haber dos reinas compartiendo fila. Por otra parte, el vector de posiciones
representa posiciones de columnas, con lo que si en dicho vector no existen
valores repetidos, tampoco habra conflictos en cuanto a situar ms de una reina
en la misma columna. Restara por determinar si dos reinas com- parten
diagonal. Ello ocurrir cuando para algn par de posiciones del vector
(X1, X2, , Xn) se cumple que tienen el mismo valor para (fila-columna) o bien
para (fila+columna). Es decir, expresado de manera ms formal, existir un
conflicto cuando se cumpla la siguiente condicin:

Esta expresin puede simplificarse de la siguiente manera con el objetivo de


determinar si existe o no colisin en diagonal para dos reinas situadas en las
columnas i y j:

Tal y como se ha indicado, la propia codificacin del problema elimina la


existencia de problemas como que una reina sea atacada por otra de la misma
fila.
Utilizando convenientemente las operaciones de cruce y mutacin es posible
tambin eliminar la probabilidad de que en una misma columna se ubique ms
de una reina. Ambas operaciones deben tener en cuenta que el cro- mosoma es
realmente una permutacin de los valores 1 a N, y que por lo tanto, tras la
aplicacin de las operaciones genticas, el cromosoma debe mantener dicha
propiedad. En cuanto a la mutacin, simplemente con aplicar la muta- cin por
intercambio de 2 valores comentada anteriormente se mantendra el
cromosoma correctamente formado. El operador de cruce es ligeramente
distinto a los explicados anteriormente. La idea es construir una operacin de
cruce que mantenga el orden relativo en el que aparecen los valores dentro del
vector de columnas. Una aproximacin vlida sera la siguiente, basada en el
cruce en un punto:

1. Escoger un punto aleatorio dentro del primer padre

2. Copiar la primera parte del cromosoma del progenitor al primer des-


cendiente

3. Copiar en el primer descendiente los valores no incluidos en esta pri- mera


parte, manteniendo el orden en el que aparecen en el segundo progenitor

4. Proceder de igual manera, pero intercambiado los papeles de los pro-


genitores, para generar el segundo descendiente.

An con la codificacin escogida y los operadores genticos definidos, lo que no


se elimina es la posibilidad de conflictos con respecto a que una reina sea
atacada por otra que est en su misma diagonal. La funcin de fitness de- ber
ser capaz de determinar lo cerca que est de una solucin vlida cada una de
las soluciones proporcionadas por el algoritmo gentico. Por lo tanto, una
opcin ser considerar el valor de ajuste de un individuo como el nmero de
conflictos que se presentan en la diagonal. As, cuantos ms conflictos haya,
ms errnea ser la solucin, mientras que si el nmero de conflictos es 0, el
individuo gentico representar una solucin vlida.

1.8.2.4. Implementacin en Matlab


Para la implementacin de la solucin propuesta mediante Matlab se em-
plear la versin 2.1 de su toolbox de algoritmos genticos. En las siguientes
secciones se recogen todos los pasos necesarios. As, se incluye la implemen-
tacin de la funcin de creacin de la poblacin gentica (para forzar a que los
individuos sean una permutacin de valores), la implementacin de los
algoritmos de cruce y mutacin que tengan en cuenta esta peculiaridad de los
individuos, y, por ltimo, la funcin de evaluacin, que calcular el nmero de
colisiones que se producen sobre la diagonal para determinar la bondad de cada
solucin.
1.8.2.4.1. creacIn De la poblacIn gentIca

La funcin de creacin inicializa la poblacin mediante individuos con- sistentes


en una permutacin de valores, manteniendo los individuos propor- cionados
por el usuario (mediante el parmetro options.InitialPopulation) en caso de que
estos existan.

1.8.2.1.1. operaDor De mutacIn

El operador de mutacin simplemente realiza el intercambio entre dos genes


escogidos al azar dentro del cromosoma de los individuos genticos
seleccionados para la mutacin.

El vector parents empleado en la implementacin del operador recoge los


ndices de los individuos seleccionados para la mutacin. El propio funciona-
miento determina que la aplicacin del operador de mutacin no se hace de
manera individual, sino en conjunto a todos aquellos individuos seleccionados
para la mutacin gentica.
1.8.2.1.1. oPeRaDoR De CRuCe

El operador de cruce recoge el comportamiento explicado con anterio- ridad


(copia de un segmento inicial de los padres y copia de los valores no incluidos
en dicho segmento conservando el orden del segundo progenitor).

En este caso, el funcionamiento del propio toolbox de Matlab fuerza a que se


genere un nico descendiente por cada dos progenitores. Asimismo, los cruces
se realizan tambin en bloque a partir de los ndices de los progenitores
(parents) previamente seleccionados

1.8.2.1.1. FunCin De evaluaCin

Tal y como se coment anteriormente, la bondad de un individuo se de- termina


en base al nmero de colisiones, o posibles ataques entre reinas, que se
producen en la diagonal del tablero. Para ello es necesario comprobar cada
reina con cada una de las restantes para verificar si pueden atacarse entre s.

1.8.2.1.1. ConFiGuRaCin Del alGoRitmo GentiCo

Una vez definidos los diferentes operadores, slo resta configurar el algo- ritmo
gentico para que haga uso de ellos. Adems, es necesario configurar las
dimensiones del tablero (numeroReinas), el tamao de la poblacin gentica
(PopulationSize), el nmero mximo de generaciones (Generations), etc.

Ejemplo de Ejecucin

Una vez mostrado el cdigo necesario para la resolucin del problema de las N-
Reinas, se muestra una ejecucin de ejemplo. sta corresponde a la resolucin
del problema para un tablero de 8x8 casillas.

Empleando un tamao de poblacin tpico (del orden de 100 individuos) la


resolucin es prcticamente instantnea, del orden de 3 o 4 iteraciones. Sin
embargo, para que pueda mostrarse la evolucin del error de la Figura 1.13 se
ha reducido este nmero hasta los 25 individuos. En esta figura, puede obser-
varse tanto la evolucin del error del mejor individuo y la media de la pobla-
cin, como la mejor solucin finalmente encontrada (5, 8, 4, 1, 7, 2, 6, 3).

Anda mungkin juga menyukai