Во-первых, то, что вы называете населением, на самом деле просто особь из популяции. Популяция - это совокупность всех особей.
Хороший генетический алгоритм - это тот, который уравновешивает «Исследование и Эксплуатация». Исследование пытается найти новые решения, не заботясь о том, насколько они хороши (потому что они могут привести к некоторым лучшим решениям). Эксплуатация пытается воспользоваться тем, что алгоритм уже знает как «хорошие решения».
КРОССОВЕР = ЭКСПЛУАТАЦИЯ Используя кроссовер, вы пытаетесь объединить лучших людей (с точки зрения фитнеса) для получения еще лучших решений.
МУТАЦИЯ = ИССЛЕДОВАНИЕ. Используя мутацию, вы пытаетесь выйти из своего «генофонда» и найти новые решения с новыми характеристиками, которые не связаны с вашей нынешней популяцией.
При этом лучший способ сбалансировать их - это обычно метод проб и ошибок. Для определенного ввода попробуйте поиграть с параметрами и посмотреть, как они работают.
Причина, по которой вторая особь вообще не мутировала, объясняется просто тем, что вероятностный процесс, мутирующий особь, не выбрал ее. Обычно в таких задачах мутация работает следующим образом:
for individual in population do:
for gene in individual:
if random() < MUTATION_RATIO:
mutate(gene)
Это означает, что человек может пострадать даже от нескольких мутаций.
person
bogs
schedule
24.08.2014