Каковы типичные случаи использования генетического программирования?
сегодня я прочитала эта запись в блоге Роджер Alsing о том, как нарисовать реплику Мона Лиза используя только 50 полупрозрачных полигонов.
Я очарован результаты для этого конкретного случая, поэтому мне было интересно (и это мой вопрос):как работает генетическое программирование и другие проблемы могут быть решены генетическим программированием?
8 ответов
есть некоторые дебаты о том, является ли программа Моны Лизы Роджера Генетического Программирования на всех. Кажется, это ближе к a (1 + 1) Стратегия Эволюции. Оба метода являются примерами более широкой области эволюционных вычислений, которая также включает Генетические Алгоритмы.
генетическое программирование (GP) - это процесс разработки компьютерных программ (обычно в виде деревьев-часто программ Lisp). Если вы спрашиваете конкретно о GP, Джон Коза широко считается ведущим экспертом. Его сайт включает в себя множество ссылок на дополнительную информацию. GP обычно очень вычислительно интенсивен (для нетривиальных задач он часто включает в себя большую сетку машин).
Если вы спрашиваете в более общем плане, эволюционные алгоритмы (EAs) обычно используются для обеспечения хороших приближенных решений проблем, которые не могут быть легко решены с помощью других методов (таких как NP-жесткие проблемы). Много к этой категории относятся проблемы оптимизации. Это может быть слишком вычислительно-интенсивным, чтобы найти точное решение, но иногда достаточно почти оптимального решения. В таких ситуациях эволюционные методы могут быть эффективными. Из-за их случайной природы эволюционные алгоритмы никогда не гарантируют нахождения оптимального решения для любой проблемы, но они часто найдут хорошее решение, если оно существует.
эволюционные алгоритмы также могут быть использованы для решения проблем, которые человек не знаю, как решить. EA, свободный от каких-либо человеческих предубеждений или предубеждений, может генерировать удивительные решения, которые сопоставимы или лучше, чем лучшие человеческие усилия. Просто необходимо, чтобы мы могли распознать хорошее решение, если оно было представлено нам, даже если мы не знаем, как создать хорошее решение. Другими словами, мы должны быть в состоянии сформулировать эффективный функции.
некоторые Примеры
EDIT: свободно доступная книга,полевой Справочник по генетическому программированию, содержит примеры того, где GP произвел человека-низким результаты.
интересно, что компания, стоящая за динамической анимацией персонажей, используемой в таких играх, как Grand Theft Auto IV и последняя игра Star Wars (The Force Unleashed), использовала генетическое программирование для разработки алгоритмов движения. Сайт компании находится здесь, и видео очень впечатляют:
http://www.naturalmotion.com/euphoria.htm
Я считаю, что они смоделировали нервную систему персонажа, а затем в некоторой степени произвели рандомизацию связей. Затем они объединили "гены" моделей, которые продвинулись дальше всех, чтобы создать все более и более способных "детей" в последующих поколениях. Действительно увлекательная работа моделирования.
Я также видел генетические алгоритмы, используемые в автоматах поиска путей, с муравьями, ищущими пищу, являющимися классическим примером.
генетические алгоритмы могут быть использованы для решения большинства задач оптимизации. Однако во многих случаях существуют лучшие, более прямые методы их решения. Он находится в классе алгоритмов метапрограммирования, что означает, что он способен адаптироваться практически ко всему, что вы можете бросить на него, учитывая, что вы можете генерировать метод кодирования потенциального решения, комбинируя/мутируя решения и решая, какие решения лучше других. GA имеет преимущество перед другими метапрограммированием алгоритмы в том, что он может обрабатывать локальные максимумы лучше, чем чистый алгоритм восхождения на холм, например, имитационный отжиг.
Я использовал генетическое программирование в своей диссертации для моделирования эволюции видов на основе местности, но это, конечно, применение генетических алгоритмов A-life.
проблемы GA хороши впроблемы с восхождением на холм. Проблема в том, что обычно легче решить большинство этих проблем вручную, если только факторы, определяющие проблему, неизвестны, другими словами, вы не можете достичь этого знания как - то иначе, скажем, вещи, связанные с обществами и сообщества, или в ситуациях, когда у вас есть хороший алгоритм, но вам нужно точно настроить параметры, здесь GA очень полезны.
ситуация тонкой настройки, которую я сделал, заключалась в тонкой настройке нескольких игроков Отелло AI на основе одних и тех же алгоритмов, давая каждому разные стили игры, тем самым делая каждого противника уникальным и со своими причудами, затем я заставил их конкурировать, чтобы отбирать топ-16 ИИ, которые я использовал в своей игре. Преимущество было в том, что все они были очень хорошими игроками более или менее равных умение, так что это было интересно для человеческого противника, потому что они не могли угадать ИИ так же легко.
вы должны спросить себя : "Могу ли я (априори) определить функцию, чтобы определить, насколько хорошо конкретное решение относительно других решений?"
в Примере Моны Лизы вы можете легко определить, похожа ли новая картина на исходное изображение, чем предыдущая картина, поэтому генетическое программирование может быть "легко" применено.
У меня есть несколько проектов, использующих генетические алгоритмы. GA идеально подходят для задач оптимизации, когда вы не можете разработать полностью последовательный, точный алгоритм решения проблемы. Например: как лучше всего сочетать характеристики автомобиля, чтобы сделать его быстрее и в то же время более экономичным?
на данный момент я разрабатываю простой GA для разработки плейлистов. My GA должен найти лучшие комбинации альбомов / песен, которые похожи (это сходство будет "вычислено" с помощь последнего.fm) и предлагает плейлисты для меня.
в робототехнике появилась новая область под названием Эволюционная Робототехника (w: эволюционная робототехника), который сильно использует генетические алгоритмы (GA).
посмотреть w: генетический алгоритм:
простой генетический алгоритм поколения псевдокод
- выберите начальное население
- оценить пригодность каждого человека в популяции
- повторить пока прекращение: (достигнут лимит времени или достаточная пригодность)
- выберите лучший рейтинг лиц для воспроизведения
- выведите новое поколение через кроссовер и / или мутацию (генетическую операции) и родить потомство!--15-->
- оцените индивидуальную пригодность потомства
- заменить худшую ранжированную часть населения потомством
ключ часть воспроизводства, которая смогла случиться сексуально или асексуально, используя генетические операторы кроссовер и мутация.