Создание следующего поколения генетического алгоритма

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

Сейчас я воссоздаю все это целиком и пытаюсь взглянуть с другой стороны.

Теперь, когда я собираюсь определить шаги, на которых будет установлено следующее поколение.

Моя последняя идея была:

  • Возьмите гены с самым высоким рейтингом у текущего поколения и продублируйте их в следующем (количество определяется элитарностью)

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

  • Наполните новое поколение генами описанным выше методом.

  • Примените некоторую мутацию к генам (шанс быть выбранным определяется скоростью мутации), и это изменит только часть ДНК (исключены гены с самым высоким рейтингом)

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

Теперь думаю о новом подходе.

В основном я стремлюсь сохранить гены и удалить «плохие», а также заполнить генофонд скрещенными генами.

В генофонде с 1.000 особей я бы:

  • Отбросьте 500 наименьших рангов.

  • Дублируйте рейтинг лучших (в 10% элитарности это 100)

  • Сгенерируйте 400 новых генов с помощью кроссовера.

  • Применить мутацию

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

Я что-нибудь упускаю? Будет ли этот новый метод лучше?


person f.rodrigues    schedule 17.12.2014    source источник
comment
Мне нравятся ваши концептуальные алгоритмы, основанные на идее 1 и 2. Если у вас есть проблемы с неэффективностью, я бы исследовал реализацию идей. Имейте в виду, что генетические алгоритмы не являются надежным решением. Необходимо настроить все параметры управления, поскольку для лучшего генетического алгоритма не существует магических чисел. Может быть, увеличьте размер популяции, возможно, посмотрите на критерии остановки (вы эволюционируете на протяжении слишком многих поколений с очень небольшой выгодой?), Может быть, больше мутаций, может быть, меньше.   -  person Tansir1    schedule 17.12.2014
comment
Возможно, причиной проблемы была моя реализация, но я не совсем уверен, я несколько раз переписывал код. Проблема с GA в том, что ее трудно отладить, потому что единственное, что изменяется, - это гены, и все они «случайны». Что касается настройки, да, я не пробовал много экспериментировать с этим, я следовал некоторым рекомендациям, которые нашел в Интернете.   -  person f.rodrigues    schedule 17.12.2014
comment
Отказ от худшей половины населения - не лучшая идея. Это может ОЧЕНЬ быстро привести к преждевременной конвергенции. Предлагаю посмотреть алгоритм выбора. У меня очень хороший опыт выбора турниров. Его очень легко реализовать, и он часто работает лучше, чем обычный фитнес-пропорциональный отбор. У него также есть свойство, что худшие люди не выживают.   -  person zegkljan    schedule 18.12.2014
comment
Еще одна вещь, которая может вызвать плохую производительность, - это картирование генотип-фенотип. Если генетическое кодирование ваших решений очень косвенное, ГА может быть трудно найти решение. Если небольшое изменение генотипа приводит к большому изменению фенотипа (фактическое решение), кроссовер и мутация не могут работать очень хорошо.   -  person zegkljan    schedule 18.12.2014


Ответы (1)


Альтернативой вертикальному переносу генов (традиционной концепции поколений) является горизонтальный перенос генов (см. этот документ). При горизонтальном переносе генов размер популяции остается постоянным на протяжении всего моделирования.

Кроме того, когда вы выводите генотипы (каким бы методом вы ни выбрали), вам определенно не следует оставлять только наиболее подходящих кандидатов на протяжении поколений. Если вы это сделаете, решение, которое вы найдете, скорее всего, будет локальным оптимумом. У каждого генотипа должен быть некоторый шанс дойти до следующего поколения, причем у наиболее приспособленных будет больше шансов (см. этот ответ о линейный выбор ранга).

person trakmack    schedule 24.12.2014