2014-12-17 5 views
0

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

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

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

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

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

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

  • Заполнить новое поколение с генами, использующее Бове метод

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

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

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

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

В генофонд с +1,000 людей, которых я бы:

  • Выбросьте 500 низкий рейтинг.

  • Дубликат Самые популярные (в 10% элитарности в это 100)

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

  • Нанести мутацию

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

Я ничего не пропустил? Будет ли этот новый метод лучше?

+0

Ваши концептуальные алгоритмы из идей 1 и 2 выглядят хорошо для меня. Если у вас возникнут проблемы с неэффективностью, я бы исследовал реализацию идей. Имейте в виду, что генетические алгоритмы не являются надежным решением. Все параметры управления должны быть изменены, так как нет «магических чисел» для «наилучшего» генетического алгоритма. Может быть, увеличить размер популяции, возможно, посмотрите на критерии остановки (вы развиваетесь слишком много поколений за очень небольшое увеличение?), Возможно, больше мутаций, может быть, и меньше. – Tansir1

+0

Возможно, моя реализация стала причиной проблемы, но я не уверен, я несколько раз переписывал код. Проблема с GA заключается в том, что ее трудно отлаживать, потому что единственное, что меняется, это гены, и все они «случайные». О настройке, да, я не очень много экспериментировал, я следил за некоторыми рекомендациями, которые я нашел через Интернет. –

+1

Отказ от худшей половины населения - не лучшая идея. Это может ОЧЕНЬ быстро привести к преждевременной конвергенции. Я предлагаю посмотреть на алгоригм. У меня очень хороший опыт выбора турниров. Он очень прост в применении и часто работает лучше обычного обычного пропорционального выбора. Он также обладает тем свойством, что худшие люди не выживают. – zegkljan

ответ

0

Существует альтернатива вертикальному переносу генов (традиционная концепция поколений), которая представляет собой перенос по горизонтальному генам (см. this paper). При горизонтальном переносе генов размер популяции остается неизменным во время моделирования.

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

 Смежные вопросы

  • Нет связанных вопросов^_^