Mastermind es un juego clásico de lógica y deducción entre dos jugadores. Uno de ellos elige una combinación secreta de colores (sin repeticiones), y el otro intenta adivinarla proponiendo distintas combinaciones. Después de cada intento, el jugador que conoce la solución proporciona una pista:
El objetivo es deducir la combinación exacta con el menor número posible de intentos.
Un Algoritmo Genético (GA) es una técnica de optimización inspirada en los procesos de selección natural. En este enfoque, una población de soluciones candidatas evoluciona generación tras generación mediante operadores como:
El juego de Mastermind representa un problema ideal para ser abordado mediante algoritmos genéticos, debido a que::
Dado que el código objetivo contiene cinco colores únicos, la solución se considera correcta únicamente cuando la función de ajuste alcanza exactamente 5.0, lo que indica que todos los colores están en la posición correcta.
El espacio de soluciones (fenotipos) —es decir, las combinaciones de colores válidas— se puede codificar de forma simple como listas de letras.
El espacio de representación (genotipos) es directamente computacional: cada individuo puede representarse como una lista de caracteres sin repeticiones, lo que permite definir mutaciones, cruces y comparaciones de forma eficiente.
Este proyecto explora dos enfoques diferentes:
Un algoritmo genético clásico, con población, cruce, mutación y elitismo.
Una versión simplificada, que mantiene un solo individuo y lo mejora iterativamente (búsqueda local evolutiva).
Este proyecto está desarrollado en Python 3.8+ y no requiere dependencias externas.
Puedes clonar el repositorio con el siguiente comando:
git clone https://github.com/imarranz/genetic-algorithm-mastermind.git
cd genetic-algorithm-mastermind
Hay dos scripts principales que puedes ejecutar directamente:
Ejecuta el enfoque tradicional con población, cruce, mutación y elitismo:
python genetic-algoritm-mastermind-full.py
Este script mostrará en consola la evolución generación a generación hasta encontrar la solución o agotar el número de generaciones.
Ejecuta el enfoque simplificado con mutaciones progresivas:
python genetic-algorithm-mastermind-single.py
Y obtendremos una salida como la siguiente:
🎯 Código secreto: ['Y', 'C', 'R', 'P', 'M']
🔁 Solución inicial: ['G', 'Y', 'O', 'R', 'B'] -> fitness: 1.0
----------------------------------------------
✅ Gen 1: ['G', 'Y', 'O', 'R', 'C'] -> fitness: 1.5
✅ Gen 4: ['G', 'Y', 'O', 'R', 'M'] -> fitness: 2.0
✅ Gen 5: ['G', 'Y', 'R', 'O', 'M'] -> fitness: 2.5
✅ Gen 10: ['Y', 'G', 'R', 'O', 'M'] -> fitness: 3.0
✅ Gen 18: ['Y', 'G', 'R', 'P', 'M'] -> fitness: 4.0
✅ Gen 21: ['Y', 'C', 'R', 'P', 'M'] -> fitness: 5.0
Este script parte de una única solución aleatoria e intenta mejorarla con mutaciones que se aceptan solo si mejoran el fitness.
Este proyecto permite ajustar varios parámetros que afectan al comportamiento del algoritmo genético y la estrategia evolutiva. Estos parámetros se definen en el archivo config.py
y pueden modificarse fácilmente según el tipo de ejecución (genetic-algorithm-mastermind-full.py
o genetic-algorithm-mastermind-single.py
). La siguiente tabla resume los principales parámetros disponibles:
Parámetro | Descripción | Se aplica en |
---|---|---|
COLORES |
Lista de colores posibles que forman las combinaciones | -single y -full |
TAMANO_CODIGO |
Número de colores que tiene el código secreto | -single y -full |
MAX_FITNESS |
Valor de la función de ajuste que indica solución perfecta (=5.0 ) |
-single y -full |
GENERACIONES |
Número máximo de generaciones o iteraciones permitidas | -single y -full |
TASA_MUTACION |
Probabilidad de aplicar mutación a un individuo | -single y -full |
POBLACION_INICIAL |
Número de individuos por generación | -full |
TASA_CRUZA |
Probabilidad de que dos padres se crucen en lugar de copiar uno de ellos | -full |
NUM_ELITE |
Número de mejores individuos que se preservan sin cambios (elitismo) | -full |
genetic-algorithm-mastermind/
├── genetic-algorithm-mastermind-full.py # Algoritmo genético clásico (población + cruce)
├── genetic-algorithm-mastermind-single.py # Versión simplificada con un solo individuo
├── config.py # Parámetros globales de configuración
├── utils.py # Funciones comunes (fitness, mutación, etc.)
├── README.md # Documentación del proyecto
–