Почему мой генетический алгоритм, кажется, ведет себя случайным образом?

Я пытаюсь разработать оптимальные стратегии для Итерированной дилеммы заключенного , используя базовый генетический алгоритм ( Стохастическая универсальная выборка , 1 -точечный кроссовер , Canonical GA). Я реализовал этот алгоритм в Haskell и недавно добавил вывод диаграммы. К сожалению, полученные графики не соответствуют ожидаемому шаблону для этой проблемы, поэтому, похоже, у меня есть ошибка.

Все графики пригодности, которые я видел для этой проблемы, выглядят примерно так:

My friend's graph, looking normal

Другие примеры можно увидеть в On Evolving Robust Strategies for Iterated Prisoner's Dilemma, P.J. Darwen and X.Yao (1993) p6-7

Однако мой результат выглядит так:

My graph looking very strange

Если я установлю частоту мутаций равной 1, я получу:

Flipping between two identical values

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

Мой код находится в этом репозитории git , если вы захотите его проверить.

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

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

Мне просто хотелось бы посоветовать, на какие функции смотреть, я рву волосы, пытаясь это исправить.

РЕДАКТИРОВАТЬ: После добавления кода отладки к моей функции объединения кажется, что он всегда передается одним и тем же лицам (даже с мутацией, установленной на 1), поэтому, по-видимому, выбор где-то идет не так.

РЕДАКТИРОВАТЬ: Выбор был неправильным, но это не вызвало всех проблем, только однородность в популяции.

15
задан Bill the Lizard 15 September 2012 в 23:25
поделиться