Я очарован идеей генетического программирования (Koza 1992, 1994 и далее).
Идея, вкратце, заключается в следующем. Допустим, надо написать программу, решающую квадратное уравнение. Исторически принято программировать для этого знаменитую формулу, или какой-нибудь известный приближенный алгоритм поиска.
Причин, кроме ограниченной производительности компьютеров, именно для такого трудоемкого подхода нет. Вообще же предлагается осознать, что конечным результатом этой деятельности (как и результатом решения всех остальных задач) будет компьютерная программа, правильно решающая квадратные уравнения. Соотвественно, ее поиск можно вести непосредственно в пространстве всевозможных компьютерных программ. А именно, надо составить набор из 10,000 квадратных уравнений с корнями (тренировочные данные, подготовленные экспертами), а дальше генерировать всевозможные программы (синтаксически корректные наборы разнообразных операторов типа goto, if-then-else, циклов, арифметических операций и проч.) случайным образом, и остановиться на той из них, которая решает тренировочные уравнения с наименьшей суммарной ошибкой. Обширный опыт применения этого метода в самых разнообразных предметных областях показывает, что она окажется ничтожно мала, а найденный таким образом алгоритм будет хорошо обобщаться на все остальные квадратные уравнения, которые может потребоваться решить в будущем.
Генерировать случайные программы друг из друга предлагается методами, аналогичными известным алгоритмам генетической оптимизации, но именно эта частность меня не очень заинтересовала.
Идея, вкратце, заключается в следующем. Допустим, надо написать программу, решающую квадратное уравнение. Исторически принято программировать для этого знаменитую формулу, или какой-нибудь известный приближенный алгоритм поиска.
Причин, кроме ограниченной производительности компьютеров, именно для такого трудоемкого подхода нет. Вообще же предлагается осознать, что конечным результатом этой деятельности (как и результатом решения всех остальных задач) будет компьютерная программа, правильно решающая квадратные уравнения. Соотвественно, ее поиск можно вести непосредственно в пространстве всевозможных компьютерных программ. А именно, надо составить набор из 10,000 квадратных уравнений с корнями (тренировочные данные, подготовленные экспертами), а дальше генерировать всевозможные программы (синтаксически корректные наборы разнообразных операторов типа goto, if-then-else, циклов, арифметических операций и проч.) случайным образом, и остановиться на той из них, которая решает тренировочные уравнения с наименьшей суммарной ошибкой. Обширный опыт применения этого метода в самых разнообразных предметных областях показывает, что она окажется ничтожно мала, а найденный таким образом алгоритм будет хорошо обобщаться на все остальные квадратные уравнения, которые может потребоваться решить в будущем.
Генерировать случайные программы друг из друга предлагается методами, аналогичными известным алгоритмам генетической оптимизации, но именно эта частность меня не очень заинтересовала.
no subject
Date: 2011-09-23 02:16 am (UTC)no subject
Date: 2011-09-23 02:31 am (UTC)no subject
Date: 2011-09-23 02:33 am (UTC)no subject
Date: 2011-09-23 02:54 am (UTC)no subject
Date: 2011-09-23 04:28 am (UTC)The best software evolution method so far (the only one which managed to generate solution to Blocks World problem) is Eric Baum's Hayek Machine.
no subject
Date: 2011-09-23 07:18 am (UTC)no subject
Date: 2011-09-23 09:56 am (UTC)no subject
Date: 2011-09-23 10:23 am (UTC)А началось то обсуждение с ЛИСПа, как сейчас помню. Я о нем тогда услышал впервые и впечатлился :-)
таблицы квадратных уравнений
Date: 2011-09-23 12:54 pm (UTC)no subject
Date: 2011-09-24 05:13 am (UTC)http://www.cs.amherst.edu/~djv/irs.pdf
(via arbat)
no subject
Date: 2011-09-24 12:00 pm (UTC)