NEAT алгоритм: как пересечь непересекающиеся и лишние гены?

В настоящее время я реализую алгоритм NEAT, разработанный Кеннетом Стэнли, взяв за основу оригинальную статью.

В разделе, где описан метод кроссовера, одна вещь меня немного смущает.

введите описание изображения здесь

Итак, вышеприведенный рисунок иллюстрирует метод кроссовера для NEAT. Чтобы решить, от какого родителя унаследован ген, в статье говорится следующее:

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

Для соответствующих генов (1 - 5) это легко понять. Вы просто случайным образом наследуете от Parent1 или Parent2 (с вероятностью 50% для обоих). Но для непересекающихся (6-8) и избыточных (9-10) генов вы не можете наследовать от более подходящего родителя, потому что эти гены есть только в Parent1 или Parent2.

Например:

Пригодность Parent1 выше, чем у Parent2. Несвязанный ген 6 существует только в Parent2 (конечно, потому что непересекающиеся и избыточные гены встречаются только у одного родителя). Таким образом, вы не можете решить наследовать этот ген от более подходящего родителя. То же самое касается всех других непересекающихся и избыточных генов. Вы можете наследовать только те из родителей, в которых они существуют.

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

Заранее спасибо.

3 ответа

Решение

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

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

Имеет больше смысла брать несовпадающие гены только у "более подходящего родителя". Это создаст сильное потомство в результате кроссовера. Для сопоставления генов примените обычный оператор кроссовера. Для улучшения разнообразия создайте второго потомка путем случайного отбора несовпадающих генов от двух родителей.

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

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

Другие вопросы по тегам