Vous êtes sur la page 1sur 6

1.

Explique cmo dise cada individuo o solucin


Para el diseo de los individuos y las poblaciones de individuos se utiliz la
clase Vector, para crear vectores de individuos y vectores de poblaciones; es decir
para almacenar en memoria todos estos objetos y poder realizar todas las
operaciones solicitadas, de forma optimizada y muy escalada.

Se parti del siguiente esquema de clases, para crear cada individuo como se
muestra a continuacin:

Ambiente o Entorno

Poblaciones

Individuos

IndividuosA

IndividuosB

La clase individuo representa una clase generalizada abstracta de la cual se


pueden derivar individuos tipo A y B. En esta se centralizan todas las
propiedades y mtodos comunes de ambos tipos de individuos; y en sus clases
hijas se implementa la funcin de fitness para cada individuo particularmente,
de acuerdo a la naturaleza y planteamiento del problema en estudio.

2. Indique cul es la funcin de fitness


En el planteamiento del problema en estudio se consideran dos funciones
matemticas, que representan la funcin de fitness de cada tipo de individuos.
Para la clase IndividuoA, se implement la funcin de Ackley 1

Los intervalos del dominio de la funcin estn errados y por tanto se


tomaron los probados -32 <= Xi <= 32. A continuacin la implementacin del
mtodo en la clase IndividuoA:

public void fitness (int val){


int i;
double sum1, sum2, term1, term2, res;
this.valInd_i=val;
sum1 = 0.0;
sum2 = 0.0;
for (i=0; i<dimensiones; i++)
{
sum1 += val*val;
sum2 += Math.cos(2*Math.PI*val);
}
term1 = -0.02 * Math.sqrt(sum1/dimensiones);
term2 = sum2 / dimensiones;
res = -20.0 * Math.exp(term1) - Math.exp(term2) + 20.0 + Math.E;
this.setFitness(res);
sumFitness = sumFitness + res;
}

Para la clase IndividuoB, se implement la funcin de Ackley 2

public void fitness (int val){


int i;
double sum1, term1, res;
this.valInd_i=val;
sum1 = 0.0;
for (i=0; i<dimensiones; i++)
{
sum1 += val*val;
}
term1 = -0.02 * Math.sqrt(sum1);
res = -200 * Math.exp(term1);
this.setFitness(res);
sumFitness = sumFitness + res;
}

3. Explique cmo gener los nmeros aleatorios


Para la generacin de los nmeros aleatorios se implement un mtodo en la
Clase Poblacion que genera un nmero aleatorio entero utilizando el objeto
Random() y su funcin nextInt(). Para luego crear una poblacin inicial de
individuos generados aleatoriamente dentro de los rangos de dominio
establecidos por la funcin de fitness. A continuacin la implementacin de ambos
mtodos:
void poblacionIni(Vector vind){
IndividuosA iA;
int i=0, num, valid;
for (i=0; i<cantIndividuos; i++)
{
num = generaAleatorio();
indA.addElement(new IndividuosA(num));
indB.addElement(new IndividuosB(num));
}
}

int generaAleatorio(){
int i=0, num;

Random rnd = new Random();


num = rnd.nextInt(64 + 1)+(-32);
return num;

4. Explique cmo manej qu mtodo emple para la seleccin de los


padres que se cruzarn en cada iteracin
Para la seleccin de los padres, se seleccionan dos individuos al azar
empleando el mtodo de la ruleta; el principio de este mtodo nos dice que los
individuos mejores adaptados tienen mayor probabilidad de ser seleccionados. El
mtodo se implement en la clase Poblacion, como se muestra a continuacin:

public int ruleta(Vector vindiv, int excluir){


double p, intervalA=0, intervalB=0;
int i =0, k = 0, iband=0;
Individuos ind;

Random rnd = new Random();


p = 0 + rnd.nextDouble() * ( 1 - 0 );
for (i=0; i<cantIndividuos && iband == 0; i++){
ind = (Individuos) vindiv.elementAt(i);
intervalB = ind.acumAdaptacion;
if (i == 0) {
intervalA = 0;
}else{
ind = (Individuos) vindiv.elementAt(i-1);
intervalA = ind.acumAdaptacion;
}
if (p > intervalA && p <= intervalB && i != excluir){
k = i;
iband=1;
}
}
return k;
}

5. Indique el lenguaje de programacin empleado


Para el desarrollo de este programa se emple el lenguaje de programacin
Java y se utiliz como herramienta de desarrollo el entorno Eclipse Luna 4.4.0. Se
escogi este lenguaje debido a la potencia con que se manejan los vectores de
objetos y al nivel de escalabilidad que se puede alcanzar. El programa permite
crear las poblaciones dinmicamente igualmente la cantidad de individuos de cada
poblacin; lo cual permite estudiar diferentes dimensiones de poblacin e
individuos y as poder visualizar y analizar los resultados en pantalla, obtenidos en
cada generacin simplemente cambiando los parmetros directamente en la
interfaz de usuario.

Conclusiones y Recomendaciones
Despus de la aplicacin del algoritmo gentico en la minimizacin de las
funciones de Ackley, se puede concluir que las soluciones varan entre una corrida
y otra dependiendo de la aleatoriedad de la poblacin de individuos entre
iteraciones; y de acuerdo a las operaciones de reproduccin de individuos que se
van generando a medida que se crean las nuevas poblaciones.

Los mtodos ms crticos que definen la proyeccin de la calidad de la


solucin son las operaciones de cruce con la implementacin del mtodo de la
ruleta y la aplicacin del operador de mutacin. Estos son determinantes en la
obtencin de puntos locales o globales ptimos y aceptables en cada generacin
de individuos.

Cabe destacar la importancia de los algoritmos genticos despus de esta


experiencia de aprendizaje; permiten encontrar soluciones ptimas y suboptimas
desde un enfoque diferente al que normalmente podramos aplicar. Se pueden
crear objetos altamente escalables y adaptables y si se conjugan con las matrices
o vectores, se convierten en una potente herramienta de desarrollo, para generar
clases muy bien confeccionadas.

Podemos mencionar tambin que minimizan considerablemente las


operaciones de bsquedas exhaustivas, gracias a sus metodologas heursticas
para encontrar soluciones aceptables; esto se resume en una administracin
adecuada de los recursos de hardware computacionales, especialmente en cuanto
a solicitudes de recursos de memoria RAM y tiempo de procesador se refiere.