Прочитайте полную статью, используя искусственный интеллект для написания самомодирующих/улучшенных программ
Прочитайте исследовательский программист AI: автономно создание программ с использованием генетических алгоритмов.
AI-Programmer-это эксперимент с использованием искусственного интеллекта и генетических алгоритмов для автоматического генерации программ. Успешно созданные программы с помощью ИИ включают: Hello World, Hello, добавление, вычитание, изменение струны, последовательность Fibonnaci, 99 бутылок пива на стене и многое другое. Это становится умнее. Короче говоря, это реализация генетического алгоритма ИИ с кодом самостоятельного изменения.
Можно ли компьютер писать свои собственные программы? Нужен текстовый процессор? Позвольте компьютеру создать один для вас. Нужен инструмент захвата экрана? Позвольте компьютеру создать один для вас. Сделайте еще один шаг, и позвольте компьютеру создавать программы, которые упрощают вашу жизнь, что вы даже не знали, что вам нужно!
Это идея эксперимента AI-Programmer. Цель состоит в том, чтобы в конечном итоге создать компьютерную программу, которая может написать свои собственные компьютерные программы для решения конкретных вычислительных задач. В то время как возможность компьютера решает, какой тип программы написать, выходит за рамки наших текущих средств, у нас все еще может быть компьютер, генерирующий программы для решения очень конкретных задач, таких как вывод текста «Hello World». AI Programmer использует эзотерический язык программирования для создания программных программ.
Основной язык программирования состоит только из 8 инструкций, в то время как его завершено. Теоретически, он способен решать любую вычислительную проблему. Это позволяет легко разрабатывать переводчика, способного запускать программы, сгенерированные AI в моделируемой среде. Таким образом, каждая сгенерированная программа может быть выполнена, и ее производительность оценена как оценка пригодности. Поскольку ИИ использует полный язык программирования, сам ИИ, также теоретически способен решать любую вычислительную проблему. Однако для этого эксперимента ИИ будет сосредоточен на выводе простой строки в консоли.
AI-программист работает следующим образом:
Метод фитнеса работает, набрав выход вывода сгенерированной программы. Оценка рассчитывается путем рассмотрения каждого символа, выводящего программы и вычитая его значение из желаемого символа:
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.
Имейте в виду, это доказательство концепции. До сих пор программа успешно написала несколько программ на своем целевом языке программирования. Вы можете просмотреть скриншоты всех результатов в папке /результатов. Эти тесты были проведены на intel core 2 Quad 2,5 ГГц.
ИИ успешно написал программу для вывода «Привет» после 5700 поколений примерно за 1 минуту. Он создал следующий код:
+[+++++-+>++>++-++++++<<]>++.[+.]-.,-#>>]<]
В то время как вышеуказанный код содержит ошибки анализа, такие как не совпадающие кронштейны, наш интерпретатор моделирования вычисляет результат до тех пор, пока программа не сработает, поэтому в вышеупомянутом случае ошибка синтаксиса (которая позже включена в код, после того, как решение будет найдено ) не влияет на физическую форму.
Вы можете попробовать вставить приведенный выше код в онлайн -переводчик. Нажмите «Начать отладчик», игнорируйте предупреждения, затем нажмите «Запустить», чтобы остановить точку. Обратите внимание на вывод.
Если мы обрезаем избыточный код, мы увидим следующий синтаксически корнальный код:
+[+++++-+>++>++-++++++<<]>++.[+.]
ИИ успешно написал программу для вывода «Привет» после 252 0000 поколений за 29 минут. Он создал следующий код:
+-+-+>-<[++++>+++++<+<>++]>[-[---.--[[-.++++[+++..].+]],]<-+<+,.+>[[.,],+<.+-<,--+.]],+][[[.+.,,+].-
Во время процесса генерации ИИ приблизился к решению, но пара букв была связана друг с другом, в цикле. ИИ смог преодолеть это, создав внутреннюю петлю, в пределах проблемной, которая успешно выводит правильный символ и продолжительную обработку.
В другом примере ИИ успешно написал программу для вывода «Привет!» После 1219 400 поколений примерно за 2 часа 7 минут. Он создал следующий код:
>-----------<++[[++>++<+][]>-.+[+++++++++++++++++++++++++++++><+++.<><-->>>+].]
ИИ успешно написал программу для вывода «Я люблю всех людей» после 6 057 200 поколений примерно за 10 часов. Он создал следующий код:
+[>+<+++]+>------------.+<+++++++++++++++++++++++++++++++.>++++++++++++++++++++++++++++++++++.+++.+++++++.-----------------.--<.>--.+++++++++++..---<.>-.+++++++++++++.--------.------------.+++++++++++++.+++++.
Скорее всего, более сложные программы могут быть созданы при использовании более быстрых ПК. Следующие шаги включают попытку принять ввод пользователя и результаты процесса.
По умолчанию код настроен на использование классического набора инструкций и для написания программы для вывода строки. Чтобы изменить генерируемую строку, просто разверните раздел «частные переменные» и измените текст для TargetString на ваше желаемое значение.
private static TargetParams _targetParams = new TargetParams { TargetString = "hello world" };
Чтобы изменить тип программы, которую пишет ИИ, измените метод фитнеса внутри getFitnessMethod ().
private static IFitness GetFitnessMethod()
{
return new StringStrictFitness(_ga, _maxIterationCount, _targetParams.TargetString, _appendCode);
}
Вы можете изменить это на любой класс в рамках проекта AI.Programmer.fitness/concrete. Примеры:
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);
Чтобы использовать подкзадачивания, вам нужно будет включить функции. Это позволит ИИ производить программы намного быстрее. Не понаблюдайте код для FunctionGenerator, следующим образом:
private static IFunction _functionGenerator = new StringFunction(() => GetFitnessMethod(), _bestStatus, fitnessFunction, OnGeneration, _crossoverRate, _mutationRate, _genomeSize, _targetParams);
Установите App.config для использования BrainPlus, поэтому AI имеет доступ к подпрограммным инструкциям:
<appSettings>
<add key="BrainfuckVersion" value="2"/> <!-- 1 = BF Classic, 2 = BrainPlus (BF Extended Type 3, Functions, Faster) -->
</appSettings>
При использовании подкрипин требуется меньше кода. Таким образом, вы можете использовать меньший геном для скорости. Разверните раздел «Настройки генетического алгоритма» и измените _genomesize на меньшее значение:
private static int _genomeSize = 50;
Экспериментируйте и получайте удовольствие!
Кори Беккер http://www.primaryobjects.com/kory-becker
Использование искусственного интеллекта для написания самомодирующих/улучшенных программ
Раздвигая границы самопрограммирования искусственного интеллекта
Самопрограммирование искусственного интеллекта учится использовать функции
BF-Programmer: противоречивый подход к автономному созданию упрощенных программ с использованием генетических алгоритмов
View @ github https://github.com/primaryobjects/ai-programmer
Copyright (c) 2018 Kory Becker http://primaryobjects.com/kory-becker