NEAT алгоритм: как пересечь непересекающиеся и лишние гены? - PullRequest
0 голосов
/ 27 мая 2018

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

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

enter image description here

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

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

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

Например:

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

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

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

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

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

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

0 голосов
/ 31 мая 2018

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

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

...