Lea el artículo completo utilizando inteligencia artificial para escribir programas de auto modificación/mejora
Lea el programador de IA de Investigación del Documento: Creación de software de forma autónoma que utilizan algoritmos genéticos.
AI-Programmer es un experimento con el uso de inteligencia artificial y algoritmos genéticos para generar automáticamente programas. Los programas creados con éxito por la IA incluyen: Hello World, hola, adición, resta, revertir una cuerda, secuencia de fibonnaci, 99 botellas de cerveza en la pared y más. Se está volviendo más inteligente. En resumen, es una implementación de algoritmo genético de IA con código auto -modificador.
¿Es posible que una computadora escriba sus propios programas? ¿Necesita un procesador de textos? Deje que la computadora cree una para usted. ¿Necesita una herramienta de captura de pantalla? Deje que la computadora cree una para usted. ¡Da un paso más allá y deja que la computadora cree programas que simplifiquen tu vida, que ni siquiera sabías que necesitabas que necesitabas!
Esta es la idea detrás del experimento del programa AI-AI. El objetivo es crear un programa de computadora que pueda escribir sus propios programas de computadora para resolver problemas computacionales específicos. Si bien la capacidad de una computadora que decide qué tipo de programa escribir está más allá de nuestros medios actuales, aún podemos tener una computadora generar programas para resolver tareas muy específicas, como la salida del texto, "Hola mundo". El programador de IA utiliza un lenguaje de programación esotérico para generar programas de software.
El lenguaje de programación subyacente consta de solo 8 instrucciones, mientras se completa. Teóricamente, es capaz de resolver cualquier problema computacional. Esto facilita desarrollar un intérprete, capaz de ejecutar los programas generados por IA en un entorno simulado. De esta manera, cada programa generado puede ejecutarse y su rendimiento se clasifica como un puntaje de acondicionamiento físico. Dado que la IA está utilizando un lenguaje de programación completo de Turing, la IA en sí misma también es teóricamente capaz de resolver cualquier problema computacional. Sin embargo, para este experimento, la IA se centrará en generar una cadena simple a la consola.
AI-Programmer funciona de la siguiente manera:
El método de acondicionamiento físico funciona puntuando la salida del programa generado. El programa calcula la puntuación observando cada salida de caracteres por el programa y restando su valor del carácter deseado:
fitness += 256 - Math.Abs(console[i] - targetString[i]);
> Increment the pointer.
< Decrement the pointer.
+ Increment the byte at the pointer.
- Decrement the byte at the pointer.
. Output the byte at the pointer.
, Input a byte and store it in the byte at the pointer.
[ Jump forward past the matching ] if the byte at the pointer is zero.
] Jump backward to the matching [ unless the byte at the pointer is zero.
Tenga en cuenta que esta es una prueba de concepto. Hasta ahora, el programa ha escrito con éxito varios programas en su lenguaje de programación objetivo. Puede ver capturas de pantalla de todos los resultados en la carpeta /resultados. Estas pruebas se realizaron en un Intel Core 2 Quad 2.5GHz.
La IA escribió con éxito un programa para obtener "Hola" después de 5,700 generaciones en aproximadamente 1 minuto. Produjo el siguiente código:
+[+++++-+>++>++-++++++<<]>++.[+.]-.,-#>>]<]
Mientras que el código anterior contiene errores de análisis, como los soportes no coincidentes, nuestro intérprete de simulación calcula el resultado hasta que el programa falla, por lo que en el caso anterior, el error de sintaxis (que luego se encuentra en el código, después de que se encuentra una solución. ) no afecta la aptitud.
Puede intentar pegar el código anterior en un intérprete en línea. Haga clic en "Inicie el depurador", ignore las advertencias, luego haga clic en Ejecutar al punto de interrupción. Tenga en cuenta la salida.
Si recortamos el código excesivo, vemos el siguiente código sintácticamente válido:
+[+++++-+>++>++-++++++<<]>++.[+.]
La IA escribió con éxito un programa para emitir "hola" después de 252,0000 generaciones en aproximadamente 29 minutos. Produjo el siguiente código:
+-+-+>-<[++++>+++++<+<>++]>[-[---.--[[-.++++[+++..].+]],]<-+<+,.+>[[.,],+<.+-<,--+.]],+][[[.+.,,+].-
Durante el proceso de generación, la IA se acercó bastante a una solución, pero un par de letras se unieron entre sí, dentro de un bucle. La IA pudo superar esto creando un bucle interno, dentro del problemático, que produce con éxito el carácter correcto y el procesamiento continuo.
En otro ejemplo, la IA escribió con éxito un programa para producir "¡Hola!" Después de 1.219.400 generaciones en aproximadamente 2 horas y 7 minutos. Produjo el siguiente código:
>-----------<++[[++>++<+][]>-.+[+++++++++++++++++++++++++++++><+++.<><-->>>+].]
La IA escribió con éxito un programa para generar "Amo a todos los humanos" después de 6,057,200 generaciones en aproximadamente 10 horas. Produjo el siguiente código:
+[>+<+++]+>------------.+<+++++++++++++++++++++++++++++++.>++++++++++++++++++++++++++++++++++.+++.+++++++.-----------------.--<.>--.+++++++++++..---<.>-.+++++++++++++.--------.------------.+++++++++++++.+++++.
Es probable que se puedan generar programas más complejos mientras usan PC más rápidas. Los próximos pasos incluyen intentar aceptar la entrada del usuario y los resultados del proceso.
De manera predeterminada, el código está configurado para usar el conjunto de instrucciones clásico y escribir un programa para emitir una cadena. Para cambiar la cadena que se genera, simplemente expanda la sección "Variables privadas" y cambie el texto para TargetString a su valor deseado.
private static TargetParams _targetParams = new TargetParams { TargetString = "hello world" };
Para cambiar el tipo de programa que escribe la IA, cambie el método de aptitud física dentro de GetFitnessMethod ().
private static IFitness GetFitnessMethod()
{
return new StringStrictFitness(_ga, _maxIterationCount, _targetParams.TargetString, _appendCode);
}
Puede cambiar esto a cualquier clase dentro del proyecto Ai.Programmer.Fitness/Concrete. Ejemplos:
return new StringStrictFitness(_ga, _maxIterationCount, _targetParams.TargetString, _appendCode);
return new AddFitness(_ga, _maxIterationCount);
return new SubtractFitness(_ga, _maxIterationCount);
return new ReverseStringFitness(_ga, _maxIterationCount);
return new HelloUserFitness(_ga, _maxIterationCount, _targetString);
Para usar sub-rutinas, deberá habilitar funciones. Esto permitirá que la IA produce programas mucho más rápido. Descopment el código para el functionGenerator, como sigue:
private static IFunction _functionGenerator = new StringFunction(() => GetFitnessMethod(), _bestStatus, fitnessFunction, OnGeneration, _crossoverRate, _mutationRate, _genomeSize, _targetParams);
Establezca la App.Config para usar BrainPlus, para que la IA tenga acceso a instrucciones de sub-rutina:
<appSettings>
<add key="BrainfuckVersion" value="2"/> <!-- 1 = BF Classic, 2 = BrainPlus (BF Extended Type 3, Functions, Faster) -->
</appSettings>
Al usar sub-rutinas, se requiere menos código. Por lo tanto, puede usar un genomesizado más pequeño para la velocidad. Expanda la sección Configuración del algoritmo genético y cambie el _GENOMESIZE a un valor más pequeño:
private static int _genomeSize = 50;
¡Experimente y diviértete!
Kory Becker http://www.primaryobjects.com/kory-becker
Uso de inteligencia artificial para escribir programas auto modificadores/mejorando
Empujando los límites de la inteligencia artificial autoprogramatoria
La inteligencia artificial de autoprogramación aprende a usar funciones
BF-Programmer: un enfoque contradictorio para construir programas simplistas autónomos utilizando algoritmos genéticos
Ver @ github https://github.com/primaryobjects/ai-programmer
Copyright (c) 2018 Kory Becker http://primaryobjects.com/kory-becker