Si usted fuera un escultor y deseara hacer una escultura sobre una piedra, estos serían los pasos:
- Dirigirse a una mina de piedras y escoger la mejor para su propósito.
- Escogida la piedra, tomar herramientas fuertes y comenzar a tallarla.
- Tomar herramientas mas delicadas para retocar la escultura.
Similarmente trabaja esta simulación de vida artificial, estos serían los pasos:
- Se escoge aleatoriamente un algoritmo que se adapte al ambiente (serie de entrada y salida).
- Escogido el algoritmo, se muta cada instrucción (gen) para ir adaptándolo mejor.
- Finalmente, se mutan instrucciones de manera menos brusca, mas sutil.
El usuario puede modificar estos nuevos parámetros:
- Número de veces que se generarán algoritmos aleatorios: m_iGeneraAzar
- Número de veces que se mutarán instrucciones (genes): m_iMutaTodoGen
- Número de veces que se mutarán instrucciones (genes) mas suavemente: m_iMutaParcGen
- Número de instrucciones mínimas que se generarán: m_iNumInstMin
- N'umero de instrucciones máximas que se generarán: m_iNumInstMax
El programa esta escrito en C++, tiene dos caminos para probarlo:
- Descargar el programa ejecutable (Windows 95/98/NT/2000). De clic aquí.
- Descargar el programa fuente (C++). De clic aquí.
Para configurarlo, debe modificar el archivo de inicialización Motor09.ini, observe la figura:
Ejecute el programa, dependiendo de los parámetros en Motor09.ini, puede tardar en terminar.
1. Serie de salida ascendente;
Serie Entrada: 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,
Serie Salida: 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,
Estrategia | Intento | Valor de mayor aproximación |
---|---|---|
Aleatorio | 228479 | 87.000000 |
Mutación Fuerte | 759718 | 27.000000 |
Mutación Débil (Sutil) | 326542 | 26.999992 |
Posibilidades:
1. Tipo de Instrucciones. If Condicional: 50%, Asignación: 50%
2. En Instrucciones de If Condicional, el operador de comparación es: '==':25%, '>':25%, '<':25%, '!=':25%
3. Longitud de la expresión (número de operadores): 2
4. Construcción de las expresiones, posibilidad de salir X=33%, Paréntesis:33%, Números=34%
5. Variables que se asignaran, compararan o estarán al interior de las expresiones: W=25%, X=25%, Y=25%, Z=25%
Número de veces que se generará algoritmos al azar: 300.000
Número de veces que se mutará todo un Gen: 900.000
Número de veces que se mutará parcialmente un Gen: 900.000
Número de Genes mínimo: 10
Número de Genes máximo: 40
Número de ciclos CPU: 130
Descargue el listado generado. De clic aquí.
Número de veces que se generará algoritmos al azar: 3.000.000
Número de veces que se mutará todo un Gen: 9.000.000
Número de veces que se mutará parcialmente un Gen: 9.000.000
Número de Genes mínimo: 10
Número de Genes máximo: 40
Número de ciclos CPU: 130
Estrategia | Intento | Valor de mayor aproximación |
---|---|---|
Aleatorio | 2.021.441 | 63.185715 |
Mutación Fuerte | 2.620.899 | 24.999989 |
Mutación Débil (Sutil) | N/A | N/A |
Descargue el listado generado. De clic aquí.
2. Serie de salida descendente;
Serie Entrada: 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,
Serie Salida: 97,89,83,79,73,71,67,61,59,53,47,43,41,37,31,29,23,19,17,13,11,7,5,3,2,
Posibilidades:
1. Tipo de Instrucciones. If Condicional: 50, Asignación: 50
2. En Instrucciones de If Condicional, el operador de comparación es: '==':25, '>':25, '<':25, '!=':25
3. Longitud de la expresión (número de operadores): 2
4. Construcción de las expresiones, posibilidad de salir X=33, Paréntesis:33, Números=34
5. Variables que se asignaran, compararan o estarán al interior de las expresiones: W=25, X=25, Y=25, Z=25
Número de veces que se generará algoritmos al azar: 1.000.000
Número de veces que se mutará todo un Gen: 7.000.000
Número de veces que se mutará parcialmente un Gen: 7.000.000
Número de Genes mínimo: 10
Número de Genes máximo: 60
Número de ciclos CPU: 130
Estrategia | Intento | Valor de mayor aproximación |
---|---|---|
Aleatorio | 624.410 | 307.000000 |
Mutación Fuerte | 4.948.286 | 30.195324 |
Mutación Débil (Sutil) | 3.208.528 | 30.195322 |
Descargue el listado generado. De clic aquí.
3. Serie de salida alterna;
Serie Entrada: 1,2,3,4,5,6,7,8,9,10,11,12,13,
Serie Salida: -1,2,-3,4,-5,6,-7,8,-9,10,-11,12,-13,
Posibilidades:
1. Tipo de Instrucciones. If Condicional: 50%, Asignación: 50%
2. En Instrucciones de If Condicional, el operador de comparación es: '==':25%, '>':25%, '<':25%, '!=':25%
3. Longitud de la expresión (número de operadores): 2
4. Construcción de las expresiones, posibilidad de salir X=33%, Paréntesis:33%, Números=34%
5. Variables que se asignaran, compararan o estarán al interior de las expresiones: W=25%, X=25%, Y=25%, Z=25%
Número de veces que se generará algoritmos al azar: 200.000
Número de veces que se mutará todo un Gen: 300.000
Número de veces que se mutará parcialmente un Gen: 500.000
Número de Genes mínimo: 10
Número de Genes máximo: 40
Número de ciclos CPU: 130
Estrategia | Intento | Valor de mayor aproximación |
Aleatorio | 147894 | 81.571419 |
Mutación Fuerte | 158607 | 8.809524 |
Mutación Débil (Sutil) | N/A | N/A |
Descargue el listado generado. De clic aquí.
Conclusiones:
1. Las aproximaciones usando esta estrategia son mejores que con las simulaciones anteriores. La libertad en generar el número de instrucciones fue una buena estrategia.
2. En la última prueba se observa que la Mutación Débil (Sutil) no tuvo efecto, esto puede suceder.
3. Igualmente se enfrentan al problema de que las mutaciones afecten instrucciones que nunca se ejecuten. ¿Será necesario arreglar esto?.