Archivo de Enero de 2009
MasterMind y los algoritmos genéticos
Miércoles, 14 de Enero de 2009Para los que no conozcan MasterMind, es un juego de ingenio y reflexión donde uno de los dos jugadores genera un código con 4 fichas de colores de una colección de 6 fichas, a este jugador se le conocerá como el codeMaker y también se encargará de validar las secuencias que el otro jugador, el codeBraker genere para intentar descifrar el código del codeMaker. Para validar este código el codeMaker utilizará 4 fichas de colores blanco y negro, donde el color blanco significa que las fichas son las correctas pero están en la posición incorrecta y el color negro significa que las fichas son correctas y están en la posición correcta.
Para mejor entendimiento, porque no juegas una partida en el siguiente juego.
Bien, ahora vamos a aplicar algoritmos genéticos para descifrar el código del codeMaker.
Pero antes ¿Qué son los algoritmos genéticos?, pues son una técnica de programación que imita a la evolución biológica como estrategia pra resolver problemas. Dado un problema especÃfico a resolver, la entrada del algoritmo genético es un conjunto de soluciones potenciales a ese problema, codificadas de alguna manera, y una métrica llamada función de aptitud que permite evaluar cuantitativamente a cada candidata. Estas candidatas pueden ser soluciones que ya se sabe que funcionan, con el objetivo de que el algoritmo genético las mejore, pero se suelen generar aleatoriamente.
Luego el algoritmo genético evalúa cada candidata de acuerdo con la función de aptitud. En un acervo de candidatas generadas aleatoriamente, por supuesto, la mayorÃa no funcionarán en absoluto, y serán eliminadas. Sin embargo, por puro azar, unas pocas pueden ser prometedoras, pueden mostar actividad, aunque sólo sea actividad débil e imperfecta, hacia la solución del problema.
Estas candidatas prometedoras se conserva y se les permite reproducirse. Se realizan múltiple copias de ellas, pero las copias no son perfectas; se introducen cambios aleatorios durante el proceso de copia. Luego, esta descendencia digital prosigue con la siguiente generación, formando un nuevo acervo de soluciones candidatas, y son sometidas a una ronda de evaluación de aptitud. Las candidatas que han empeorado o no han mejorado con los cambios en su código son eliminadas de nuevo; pero, de nuevo, por puro azar, las variaciones aleatorias introducidas en la población pueden haber mejorado a algunos individuos, convirtiéndolos en mejores soluciones del problema, más completas o más eficinetes. De nuevo, se seleccionan y coppian estos individuos vencedores hacia la siguiente generación con cambios aleatorios, y el proceso se repite. Las expectativas son que la aptitud media de la población se incrementará en cada ronda y , por tanto, repitiendo este proceso cientos o miles de rondas, pueden descrubrirse soluciones muy buenas del problema.
Aunque a algunos los puede parecer asombroso y antiintuitivo, los algoritmos genéticos han demostrado ser una estrategia enormemente poderosa y exitosa para resolver problemas, demostrando de manera espectacular el poder de los principios evolutivos. Se han utilizado algoritmos genéticos en una amplia variedad de campos para desarrollar soluciones a problemas tan difÃciles o más difÃciles que los abordados por los diseñadores humanos. Además, las soluciones que consiguen son a menudo más eficientes, más elegantes o más complejas que nada que un ingeniero humano producierÃa. ¡En algunos casos, los algoritmos genéticos han producido soluciones que dejas perplejos a los programadores que escribieron los algoritmos en primer instancia!
Implementando el algoritmo genético en el juego MasterMind
La implementación se la realizó en java, utilizando eclipse.
Como en la implementación se utilizan algoritmos genéticos, es necesarÃo contar con los siguientes métodos:
- Crear Población
- Fitness (Consistencia)
- Seleccionar un individuo
- Calificar un individuo
- Operadores genéticos (Cruza, Mutación circular, transposición e impermutación)
La implementación se realizó en dos paquetes: ga y masterMind; donde ga contiene las clases necesarias para implementar las funciones mencionadas anteriormente y por su parte masterMind es la interfaz gráfica de usuario.
Estos son los archivos del proyecto
Proyecto realizado por Roberto Loaeza











