Ir a Inicio

Motor de Vida Artificial: Motor 09: Sutil

Si usted fuera un escultor y deseara hacer una escultura sobre una piedra, estos serían los pasos:

  1. Dirigirse a una mina de piedras y escoger la mejor para su propósito.
  2. Escogida la piedra, tomar herramientas fuertes y comenzar a tallarla.
  3. Tomar herramientas mas delicadas para retocar la escultura.

Similarmente trabaja esta simulación de vida artificial, estos serían los pasos:

  1. Se escoge aleatoriamente un algoritmo que se adapte al ambiente (serie de entrada y salida).
  2. Escogido el algoritmo, se muta cada instrucción (gen) para ir adaptándolo mejor.
  3. Finalmente, se mutan instrucciones de manera menos brusca, mas sutil.

El usuario puede modificar estos nuevos parámetros:

  1. Número de veces que se generarán algoritmos aleatorios: m_iGeneraAzar
  2. Número de veces que se mutarán instrucciones (genes): m_iMutaTodoGen
  3. Número de veces que se mutarán instrucciones (genes) mas suavemente: m_iMutaParcGen
  4. Número de instrucciones mínimas que se generarán: m_iNumInstMin
  5. N'umero de instrucciones máximas que se generarán: m_iNumInstMax

El programa esta escrito en C++, tiene dos caminos para probarlo:

  1. Descargar el programa ejecutable (Windows 95/98/NT/2000). De clic aquí.
  2. Descargar el programa fuente (C++). De clic aquí.

Para configurarlo, debe modificar el archivo de inicialización Motor09.ini, observe la figura:

image

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?.