Автоматический генератор приложений - PullRequest
3 голосов
/ 04 декабря 2009

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

Кто знает, мы можем начать получать 100% безошибочные решения.

Ответы [ 6 ]

7 голосов
/ 04 декабря 2009

Допустим, вы генерировали двоичные файлы размером 1 КБ (довольно маленький). 1 КБ составляет 8192 бита. Это означает, что в общей сложности 2 8192 возможных 1 КБ "программ". Допустим, вы можете генерировать 2 20 программ в секунду (примерно миллион программ в секунду, что довольно много). Это означает, что вам все равно понадобится 2 8172 секунд, чтобы сгенерировать все возможные двоичные файлы размером 1 КБ, что (в соответствии с альфой Вольфрама) примерно в 10 2442 раз возраст вселенной. Это должно дать вам представление о том, насколько маловероятно найти полезную программу при исчерпывающем поиске всех программ размером 1 КБ (а сколько же полезных программ по 1 КБ?)

4 голосов
/ 04 декабря 2009

Я расширю ответ Firestand по генетическому программированию.

Уже были такие идеи, как ваша; хотя они почти всегда были ограничены какой-то искусственной средой.

Мой друг написал систему для автоматического (с использованием генетического программирования) развития программ для среды CoreWars . Эти программы не длинные (от десятков до сотен инструкций по сборке), и набор юридических инструкций не очень велик, поэтому пространство возможных программ намного меньше, чем у полнофункциональных приложений с графическим интерфейсом для x86. В начале боты едва ли сражались друг с другом; но с каждым поколением в наборе появлялись все лучшие и лучшие бойцы.

Подробнее об этой концепции вы можете прочитать в исследовательской работе (PDF) .

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

Тем не менее, проверка всех возможных комбинаций нецелесообразна даже для очень очень простого кода. Вы действительно хотите использовать эвристическую стратегию, например, генетическое программирование.

У вашей идеи есть еще один недостаток. Вы предполагаете, что можете строго указать все требования для своих программ, чтобы все требования можно было протестировать автоматически. Это невозможно или очень близко к невозможному. Предполагая, что вы хотите найти программу, которая добавляет два числа типа int32, чтобы быть уверенным, что программа работает правильно, вы должны проверить все возможные входные данные, поэтому 2 ^ 64 возможностей. Попробуйте представить, сколько сценариев вам нужно проверить, если вы пишете финансовую программу.

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

3 голосов
/ 04 декабря 2009

Загляните в генетическое программирование http://en.wikipedia.org/wiki/Genetic_programming

2 голосов
/ 04 декабря 2009

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

1 голос
/ 04 декабря 2009

Это похоже на старую пилу: если бы у вас было достаточно много обезьян, печатающих в течение достаточно долгого времени, они в конечном итоге создали бы произведения Шекспира.

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

Если только у вас не было одной обезьяны, сам Шекспир.

1 голос
/ 04 декабря 2009

Краткий ответ: нет . Хотя это теоретически возможно, это гораздо, гораздо реже, чем выиграть джекпот в каждой лотерее в мире, каждый день, на всю оставшуюся жизнь.

Приложение - это просто серия двоичные значения.

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

См. Теорему о бесконечной обезьяне , в частности, раздел Вероятности.

...