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

#genetic-algorithm #genetic-programming

#генетический алгоритм #генетическое программирование

Вопрос:

Я пишу генетическую программу, но прошло некоторое время, поэтому я немного подзабыл.

Если я начну с численности популяции в 100 особей и выберу 50 с помощью турнирного отбора для размножения, а после скрещивания каждая пара произведет 50 особей следующего поколения, у меня останется 100 особей 1-го поколения (которые больше не будут размножаться, больше не будут частью «популяции») и 50 особей текущего поколения. Таким образом, мой турнирный выбор из 50 на самом деле не сработает. Должны ли отобранные на турнире особи также переходить к следующему поколению? Или они должны каким-то образом воспроизводить 2: 1?

Спасибо за обновление!

Ответ №1:

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

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

 Parent 1: 00000000
Parent 2: 11111111
  

С точкой пересечения после третьего бита.

 Offspring 1: 00011111
Offspring 2: 11100000
  

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

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

Комментарии:

1. Понял! Итак, идея заключается в том, что при отборе турнира случайным образом будут выбраны пары особей, лучшая из двух которых будет скрещиваться, но в группе скрещивания может быть несколько копий одной и той же особи (если она была выбрана несколько раз)?

2. В зависимости от относительной пригодности ваших особей при отборе на турнир вы часто увидите несколько копий лучших особей в перекрестной популяции. Поскольку вполне вероятно, что они будут а) скрещиваться с разными особями, отличными друг от друга, и / или б) скрещиваться в разных точках, это обычно хорошая идея. Это поощряет разнообразие, позволяя лучшим особям иметь большую распространенность в следующем поколении.

3. Обычно на самом деле не существует физической перекрестной группы. Вы дважды выполните отбор, выполните скрещивание для создания потомства и повторяйте процесс, пока не получите требуемое количество потомков. Генетические алгоритмы могут сильно различаться, поэтому вы не всегда будете пересекаться в соотношении 1: 1. Я видел GA, где из популяции в 1000 человек выбираются два родителя для создания одного потомка. Этот процесс выполняется 1000 раз для создания 1000 потомков. Если бы две выбранные особи произвели двух потомков, процесс был бы выполнен 500 раз. Это действительно зависит от предпочтений / требований

4. Это имеет смысл, только если вы ищете единственное решение проблемы. Если вы ищете несколько решений, то вы ищете несколько видов (именно так, я думаю, и должно быть), которые по определению генетически разделены (не могут спариваться с другими видами), если GA является моделью теории эволюции 1: 1, то так и должно быть. в противном случае это далеко не так. Несколько решений не должны моделироваться как несколько особей одного вида. Но я предполагаю, что GA моделирует единую популяцию в поисках единого решения.

5. @OnABauer спасибо за ваш ответ, это был большой недостающий кусок головоломки 🙂