Поддержание численности населения в генетическом алгоритме / программе
Я пишу генетическую программу, но это было некоторое время, поэтому я немного заржавел.
Если я начну с численности населения 100 особей и выберу 50 для отбора по турниру, а после кроссовера в каждой паре будет получено 50 особей следующего поколения, у меня останется 100 особей 1-го поколения (которые больше не будут размножаться, нет большая часть "населения") и 50 человек нынешнего поколения. Так что мой выбор из 50 турниров не сработает. Должны ли выбранные на турнире лица также перейти к следующему поколению? Или они должны как-то воспроизводить 2:1?
Спасибо за переподготовку!
1 ответ
Существует много способов выполнить отбор и кроссовер в генетическом алгоритме, но, как правило, если вы используете отбор турниров, лучше всего выбрать столько людей, сколько у вас населения, и дать им такое же количество потомков.
Существует несколько способов произвести такое же количество потомков, что и у родителей, но, например, если при прямом пересечении в одну точку каждая половина исходного родителя будет перенесена с другой половиной другого родителя. Таким образом, два родителя производят двух потомков. Например
Parent 1: 00000000
Parent 2: 11111111
С точкой кроссовера после третьего бита.
Offspring 1: 00011111
Offspring 2: 11100000
После этого вы можете отказаться от всей вашей первоначальной популяции и заменить их всеми потомками.
Примечание. При этом не учитывается какой-либо специализированный оператор, которого вы, возможно, захотите включить, который может помочь продвинуть лучших людей в каждой группе. Но это другая история....