Интеллектуальное завершение кода? Есть ли ИИ для написания кода при обучении? - PullRequest
7 голосов
/ 02 апреля 2009

Я задаю этот вопрос, потому что я знаю, что здесь много читаемых типов CS, которые могут дать четкий ответ.

Мне интересно, существует ли такой ИИ (или его исследуют / разрабатывают), чтобы он писал программы, генерируя и компилируя код самостоятельно, а затем развивался, извлекая уроки из предыдущих итераций. Я говорю о работе, чтобы сделать нас, программистов, устаревшими. Я представляю себе что-то, что узнает, что работает, а что нет на языках программирования методом проб и ошибок.

Я знаю, это звучит круто, поэтому я прошу выяснить, что было сделано, если что-нибудь.

Конечно, даже человеку-программисту нужны входные данные и спецификации, поэтому такой эксперимент должен иметь тщательно определенные параметры. Например, если ИИ собирался исследовать различные функции синхронизации, этот аспект должен быть четко определен.

Но с помощью сложного учебного ИИ мне было бы интересно посмотреть, что он может генерировать.

Я знаю, что многие человеческие качества компьютеры не могут воспроизвести, как наши суждения, вкусы и предрассудки. Но моему воображению нравится идея программы, которая после дня размышлений выплевывает веб-сайт и позволяет мне увидеть, что он придумал, и даже до сих пор я часто ожидаю, что это будет мусором; но, может быть, один раз в день я могу дать ему обратную связь и помочь ей учиться.

Еще один путь к этой мысли - было бы неплохо дать описание высокого уровня, такое как «веб-сайт с меню» или «инструменты изображения», и оно генерирует код с достаточной глубиной, который был бы полезен для меня в качестве модуля завершения кода. код в деталях. Но я предполагаю, что это можно представить как неинтеллектуальную статическую иерархическую схему завершения кода.

Как насчет этого?

Ответы [ 2 ]

12 голосов
/ 02 апреля 2009

Такие инструменты существуют. Они являются предметом дисциплины под названием Генетическое программирование . Как вы оцениваете их успех, зависит от сферы их применения.

Они были чрезвычайно успешны (на порядок более эффективны, чем люди) для разработки оптимальных программ для управления производственными процессами, автоматической медицинской диагностики или проектирования интегральных схем. Эти процессы хорошо ограничены, с явной и неизменной мерой успеха и большим количеством «вселенских знаний», которые представляют собой большой набор правил о том, что является действительной, работающей, программой, а что нет.

Они были абсолютно бесполезны в попытках создать основные программы, которые требуют взаимодействия с пользователем, потому что основным элементом, который изучает система, является явная « функция пригодности », или оценка качества текущее решение, которое оно придумало.

Еще одна область, которую можно увидеть при работе с «обучением по программам», - это Индуктивное логическое программирование , хотя она больше используется для автоматического демонстрационного обучения или изучения языка / таксономии.

8 голосов
/ 16 октября 2009

Отказ от ответственности: Я не являюсь носителем английского языка и не являюсь экспертом в этой области, я любитель - ожидайте неточностей и / или ошибок в каких следовать. Итак, в духе stackoverflow, не бойтесь исправлять и улучшать мою прозу и / или мой контент. Также обратите внимание, что это , а не полный обзор методов автоматического программирования ( генерация кода (CG) из модельно-управляемых архитектур (MDA) ) заслуживает хотя бы мимолетного упоминания).

Я хочу добавить больше к тому, на что Varkhan ответил (что по существу правильно).

Подход Генетическое программирование (GP) к Автоматическое программирование объединяет с его фитнес-функциями две разные проблемы ("самокомпиляция" концептуально ежу понятно):

  • самосовершенствование / адаптация - синтезированной программы и, если необходимо, самого синтезатора; и
  • программа синтеза .

w.r.t. самосовершенствование / адаптация см. машины Гёделя Юргена Шмидхубера : самореферентные универсальные решения проблем, обеспечивающие доказуемо оптимальное самосовершенствование . (В качестве примечания: интересна его работа по искусственному любопытству .) Для этого обсуждения также важны Автономные системы .

w.r.t. программный синтез , я думаю, можно классифицировать 3 основные ветви: стохастический (вероятностный - как вышеупомянутый GP), индуктивные и дедуктивные .

GP по существу стохастик , поскольку он создает пространство вероятных программ с эвристиками, такими как кроссовер, случайная мутация, дупликация генов , удаление генов и т. д. (чем он тестирует программы с фитнес-функцией и позволяет выжившим и размножаться наиболее приспособленным).

Индуктивный программный синтез обычно известен как Индуктивное программирование (IP), из которых Индуктивное логическое программирование (ILP) является подполем. То есть, в общем, метод не ограничен логической программой синтезом или синтезаторами, написанными на языке логического программирования (ни оба не ограничены " .. автоматической демонстрацией или изучением языка / таксономии * 1084" * ").

IP часто детерминированный (но есть исключения): начинается с неполной спецификации (такой как пример пар ввода / вывода) и используется для ограничить пространство поиска вероятных программ, удовлетворяющих такой спецификации, а затем протестировать ее ( метод генерации и тестирования ) или непосредственно синтезировать программу, обнаруживающую повторения в данных примерах, которые затем обобщаются ( управляемый данными или аналитический подход). Процесс в целом по существу статистический индукция / логический вывод - т.е. рассмотрение того, что включить в неполную спецификацию, похоже на случайную выборку.

Генерирование и тестирование и управляемые данными / аналитические § подходы могут быть довольно быстрыми, поэтому оба являются многообещающими (даже если только небольшие синтезированные программы до сих пор демонстрировались публично), но генерировать-и-тестировать (как и GP) - смущающе параллельны , и тогда можно ожидать заметных улучшений (масштабирование до реалистичных размеров программы). Но обратите внимание, что Постепенное индуктивное программирование (IIP) §, которое по своей природе является последовательным, показало, что оно на несколько порядков более эффективно для неинкрементных подходов.

§ Эти ссылки непосредственно на файлы PDF: извините, я не могу найти реферат.

Программирование с помощью демонстрации (PbD) и Программирование на примере (PbE) - это разработка для конечного пользователя методы, известные для использования индуктивный синтез программ практически.

Синтез дедуктивной программы начинается с (предполагаемой) полной (формальной) спецификации (логических условий). Одна из техник использует автоматические средства доказательства теорем : чтобы синтезировать программу, она создает доказательство существования объекта, соответствующего спецификации; следовательно, через изоморфизм Карри-Говарда-де-Брюина (соответствие доказательств как программ и соответствий формул как типов) он извлекает программу из доказательства. Другие варианты включают использование решения ограничений и дедуктивной композиции подпрограммных библиотек .

По моему мнению индуктивный и дедуктивный синтез на практике атакуют одну и ту же проблему под двумя несколько разными углами, потому что то, что составляет полный * Спецификация 1154 * является дискуссионной (кроме того, полная спецификация сегодня может стать неполной завтра - мир не статичен).

Когда (если) эти методы (самосовершенствование / адаптация и программный синтез) станут зрелыми, они обещают повысить степень автоматизации, обеспечиваемую декларативным программированием (что такой параметр следует учитывать " программирование"* иногда обсуждается ): мы сконцентрируемся больше на Разработка предметной области и Анализ требований и разработка , чем на проектировании и разработке программного обеспечения, ручная отладка, ручная настройка производительности системы и т. д. (возможно, с меньшей случайной сложностью по сравнению с той, что была введена в текущем руководстве, а не в методах самосовершенствования / адаптации). Это также повысит уровень ловкости , который еще должен быть продемонстрирован современными методами.

...