6

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

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

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

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

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

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

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

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

+0

Я часто задавался вопросом об этом. По-видимому, это десятилетиями было опробовано на посредственных результатах, согласно AI: «Современный подход». – AaronLS

+0

У меня есть эта книга, она ее не читала. Я слышал, что это стандарт. Никогда не брал AI в колледж и всегда хотел прочитать теорию, в основном, чтобы я мог писать лучшие игры. – tkotitan

ответ

12

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

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

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

Другим доменом, который можно увидеть при работе с «программным обучением», является Inductive Logic Programming, хотя он больше используется для обеспечения автоматической демонстрации или изучения языка/таксономии.

7

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

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

Genetic Programming (GP) подход к Automatic Programming этому отождествлению, с его fitness functions, две разных проблемами ("сама-компиляция" не концептуальна легкой задачей):

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

w.r.t. самосовершенствование/адаптация относятся к 0 Goedel machines Юрген Шмидхубер: самореферентные универсальные решатели задач, делающие доказуемо оптимальные самосовершенствования. (В качестве примечания: интересным является его работа на artificial curiosity.) Также актуальны для этой дискуссии Autonomic Systems.

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

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

Индуктивный синтез программы обычно известен как Inductive Programming (IP), из которых Inductive Logic Programming (ILP) является суб-поле. То есть, как правило, этот метод не ограничивается синтезом logic program или синтезаторами, написанными на языке логического программирования (оба они ограничены только «..автоматическая демонстрация или изучение языка/таксономии»).

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

Generate-and-test and data-driven/analytical § подходы могут быть довольно быстро, так как обещают (даже если только немного синтезированные программы не демонстрируются в общественных местах до сих пор), но генерировать-и-тест (например, GP) является embarrassingly parallel, а затем заметные улучшения (масштабирование до реалистичных размеров программ).Но обратите внимание, что Incremental Inductive Programming (IIP) §, который по своей сути является последовательным, продемонстрировал на порядок более эффективные неинкрементные подходы.

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

Programming by Demonstration (PBD) и Programming by Example (РОВ) end-user development методика, известная использовать синтезиндуктивной программы практически.

Deductive program synthesis начать с (предположительно) полный (формальный) спецификация (логических условий) вместо этого. Один из методов использует automated theorem provers: для синтеза программы он строит доказательство существования объекта, отвечающего спецификации; следовательно, через Curry-Howard-de Bruijn isomorphism (соответствие формул-корреляторов и соответствие формулам-типам), он извлекает программу из доказательства. Другие варианты включают использование constraint solving и deductive composition of subroutine libraries.

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

Когда (если) эти методы (самосовершенствование/адаптация и синтез программы) созревает, они обещают расти количества автоматизации, предоставляемое declarative programming (что такая установка будет считаться «программированием» является sometimes debated) : мы сконцентрируемся больше на Domain Engineering и Requirements Analysis and Engineering, чем на разработке и разработке программного обеспечения, ручной отладке, ручной настройке производительности системы и т. д. (возможно, с меньшим accidental complexity по сравнению с тем, что представлено в настоящем руководстве, а не в самосовершенствовании/адаптации). Это также будет способствовать повышению уровня agility, который будет продемонстрирован современными технологиями.