Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Introduccin
Los Algoritmos Genticos (AGs) son mtodos adaptativos que pueden
usarse para resolver problemas de bsqueda y optimizacin. Estn
basados en el proceso gentico de los organismos vivos. A lo largo de las
INTELIGENCIA ARTIFICIAL
Algoritmos
Genticos
usan
una
anloga
directa
con
el
cruzando
su
material
gentico
con
otro
individuo
INTELIGENCIA ARTIFICIAL
INTELIGENCIA ARTIFICIAL
=
=
=
=
INTELIGENCIA ARTIFICIAL
INTELIGENCIA ARTIFICIAL
INTELIGENCIA ARTIFICIAL
1 individuo = 2 cromosomas
1 cromosoma = 2 genes
1 individuo = 4 genes
Se tomara cada movimiento del barco como individuo, cada lado del rio
como cromosoma y cada grupo de misioneros y canbales de cada lado
como los 4 genes como se lo detalla a continuacin en el grfico:
JUEGO MISIONEROS Y CANIBALES
INTELIGENCIA ARTIFICIAL
Gen
Gen
Cromosoma
Individuo
Gen
Gen
Cromosoma
Para poder llegar a la solucin final del juego que es pasar a todos los
misioneros y canbales de un lado del rio hacia el otro, se toara en
cuenta que el algoritmo gentico estar compuesto de tantos individuos
sean necesarios.
El algoritmo iniciara con 3 misioneros y 3 canbales del lado derecho del
rio, luego se realizar el cruce o seleccin de los 4 genes indicados para
realizar el primer movimiento que ser el nmero de canbales y
misioneros que pasaran hacia el otro lado del rio y el nmero de
canbales y misioneros que se quedaran en el mismo lado, este
movimiento ser el primer individuo como ya se mencion
anteriormente.
El algoritmo generar individuos a partir del resultado del individuo
anterior hasta que el algoritmo como tal logre cruzar a todos los
misioneros y canbales hacia el otro lado, obviamente respetando todas
las reglas anteriormente planteadas.
INTELIGENCIA ARTIFICIAL
Fin
SI
NO
INTELIGENCIA ARTIFICIAL
INTELIGENCIA ARTIFICIAL
boolean
boolean
boolean
boolean
cruce1 = true;
cruce2 = true;
vivo1 = true;
vivo2 = true;
while(seguir){
//inicio de eleccion de primeros 2 genes
while(vivo1){
//si es que todo esta bien se de tiene el primer
cromosoma
vivo1=false;
cruce1 = true;
//primer cruce //eleccin random
while(cruce1){
cruce1 = false;
Gen1 = (int)(rnd.nextDouble()*3+0);//canivales
Gen2 = (int)(rnd.nextDouble()*3+0);//misioneros
if(Gen1>LadoACanivales){
cruce1 = true;
}
if(Gen2>LadoAMisioneros){
cruce1 = true;
}
if(!((Gen1+Gen2)>=1)){
cruce1 = true;
}
if(!((Gen1+Gen2)<=2)){
cruce1 = true;
}
}
//preguntar si es valido el cruce o no
LadoACanivales = LadoACanivales - Gen1;
LadoAMisioneros = LadoAMisioneros - Gen2;
LadoBCanibales = LadoBCanibales + Gen1;
LadoBMisioneros = LadoBMisioneros + Gen2;
if(LadoBMisioneros!=0){
//no es igual a cero - hay misioneros
if(LadoAMisioneros!=0){
//hay misioneros de ambos lados
if(LadoACanivales>LadoAMisioneros){
INTELIGENCIA ARTIFICIAL