Я пытаюсь разработать оптимальные стратегии для Итерированной дилеммы заключенного , используя базовый генетический алгоритм ( Стохастическая универсальная выборка , 1 -точечный кроссовер , Canonical GA). Я реализовал этот алгоритм в Haskell и недавно добавил вывод диаграммы. К сожалению, полученные графики не соответствуют ожидаемому шаблону для этой проблемы, поэтому, похоже, у меня есть ошибка.
Все графики пригодности, которые я видел для этой проблемы, выглядят примерно так:
Другие примеры можно увидеть в On Evolving Robust Strategies for Iterated Prisoner's Dilemma, P.J. Darwen and X.Yao (1993) p6-7
Однако мой результат выглядит так:
Если я установлю частоту мутаций равной 1, я получу:
Возможно, это означает, что моя функция выбора не такая уж случайная, как я думал. график подразумевает однородную совокупность.
Мой код находится в этом репозитории git , если вы захотите его проверить.
Теперь вопрос: мог бы кто-нибудь из вас предложить, что я делаю неправильно в моей реализации GA, чтобы график выглядел так?
например. Я бы предположил, что это вряд ли будет фитнес-функция, так как я использую ту же фитнес-функцию для вывода, который она максимизирует, поэтому даже если фитнес-функция каким-то образом неверна, она все равно будет максимизировать эту неправильную функцию (хотя я уверен Я могу ошибаться здесь, я новичок в генетических алгоритмах)
Мне просто хотелось бы посоветовать, на какие функции смотреть, я рву волосы, пытаясь это исправить.
РЕДАКТИРОВАТЬ: После добавления кода отладки к моей функции объединения кажется, что он всегда передается одним и тем же лицам (даже с мутацией, установленной на 1), поэтому, по-видимому, выбор где-то идет не так.
РЕДАКТИРОВАТЬ: Выбор был неправильным, но это не вызвало всех проблем, только однородность в популяции.