Подтвердить что ты не робот

Различие между программированием выражения генов и декартовым генетическим программированием

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

  • (как) Являются ли эти принципиально разные понятия?
  • Я читал, что косвенное кодирование инструкций GP является эффективным методом (как GEP, так и CGP). Достиг ли какой-то консенсус в том, что косвенное кодирование устарело классические древесные базы GP?
4b9b3361

Ответ 1

Ну, кажется, что существует определенная разница между программированием экспрессии генов (GEP) и декартовым генетическим программированием (CGP или тем, что я рассматриваю как классическое генетическое программирование), но разница может быть более раздутой, чем это действительно должно быть. Обратите внимание, что я никогда не использовал GEP, поэтому все мои комментарии основаны на моем опыте работы с CGP.

В CGP нет различия между генотипом и фенотипом, другими словами - если вы смотрите на "гены" CGP, вы также смотрите на их выражение. Здесь нет кодировки, т.е. Дерево выражений является самим геном.

В GEP генотип выражается в фенотип, поэтому, если вы смотрите на гены, вы не будете легко знать, что такое выражение будет выглядеть. "Изобретатель" GP, Cândida Ferreira, написал действительно хорошую бумагу, и есть некоторые другие ресурсы, которые пытаются дать более краткий обзор всей концепции.

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

Выбор:

  • случайное
  • рулетка колесо
  • верхнего п
  • возьмите половину
  • и др.

Частота турниров:

  • один раз за эпоху
  • один раз для каждого экземпляра данных
  • один раз за поколение.

Структура турнира:

  • Возьмите 3, убейте 1 и замените его потомком двух других.
  • Отсортируйте всех людей в турнире по фитнесу, убейте нижнюю половину и замените ее потомством верхней половины (где ниже хуже фитнес, а верхнее - лучше фитнес).
  • Случайно выбирайте людей из турнира, чтобы спариваться и убивать лишних людей.

Tribes
Население можно разделить на племена, которые эволюционируют независимо друг от друга:

  • Миграция - периодически, отдельные лица из племени перемещаются в другое племя.
  • Племена логически разделены, так что они похожи на их собственные отдельные популяции, работающие в разных средах.

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

Это лишь некоторые из вещей, которые могут сильно повлиять на производительность CGP, и когда я говорю, что я имею в виду, что он в том же порядке или выше производительности Ферриеры. Поэтому, если Ферриера не слишком много переделывала эти идеи, она могла бы увидеть гораздо более медленную работу CGP... особенно если она ничего не сделала для борьбы с застоем. Поэтому я был бы осторожен при чтении статистики производительности GEP, потому что иногда люди не учитывают все доступные там "оптимизации".

Ответ 2

В общем, GEP проще от GP. Скажем, вы разрешаете следующие узлы в вашей программе: константы, переменные, +, -, *,/, if,... Для каждого из таких узлов с GP вы должны создать следующие операции: - рандомизировать - мутировать - кроссовер - и, возможно, другие генетические операторы, а также

В GEP для каждого из таких узлов требуется только одна операция: deserialize, которая принимает массив чисел (например, double на C или Java) и возвращает node. Он похож на десериализацию объектов на языках, таких как Java или Python (разница в том, что десериализация в языках программирования использует байтовые массивы, где здесь имеются массивы чисел). Даже эта операция "десериализации" не должна выполняться программистом: она может быть реализована с помощью общего алгоритма, как это было сделано в десериализации Java или Python.

Эта простота с одной точки зрения может сделать поиск лучшего решения менее успешным, но с другой стороны: требует меньше работы от программиста, а более простые алгоритмы могут выполняться быстрее (проще оптимизировать, больше кода и данных вписывается в кэш ЦП и скоро). Поэтому я бы сказал, что GEP немного лучше, но, конечно, определенный ответ зависит от проблемы, и для многих проблем может быть и наоборот.

Ответ 3

В этих ответах, похоже, есть некоторая путаница, которые необходимо уточнить. Картезианский ГП отличается от классического GP (он же GP), и GEP. Несмотря на то, что они разделяют многие концепции и берут вдохновение из одних и тех же биологических механизмов, представление индивидуумов (решений) меняется.

В CGP представление (картирование между генотипом и фенотипом) является косвенным, другими словами, не все гены в геноме CGP будут выражаться в феноме (понятие также найдено в ГЭП и многие другие). Генотипы могут быть закодированы в сетке или массиве узлов, а полученный программный граф является выражением только активных узлов.

В GEP представление также является косвенным, и аналогично не все гены будут выражены в фенотипе. Представление в этом случае сильно отличается от treeGP или CGP, но генотипы также выражаются в дереве программ. На мой взгляд, GEP представляет собой более элегантное представление, которое проще реализовать, но также страдает от некоторых недостатков, таких как: вы должны найти соответствующий размер хвоста и головы, который является специфичным для проблемы, версия mnltigenic - это немного принудительный клей между деревьями выражений, и, наконец, у него слишком много bloat.

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