Моя реализация Neuroevolution of Augmenting Topologies не может решить проблему XOR

Недавно я попытался создать собственную реализацию NEAT (Neuroevolution of Augmenting Topologies), и она, похоже, застревает в каком-то локальном максимуме при решении проблемы XOR.

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

Весь мой код для этого проекта можно найти по адресу https://github.com/Maxwell-Hunt/NEAT, а оригинальную статью об этом алгоритме можно найти по адресу http://nn.cs.utexas.edu/downloads/papers/stanley.ec02.pdf.

Когда я пытаюсь разрешить XOR, он обычно может получить правильные результаты: [0,0] -> [0], [0,1] -> [1], [1,0] -> [1], но также получает [1,1] -> 1, что неверно.

0 ответов

Я реализовал NEAT в Ruby, который прекрасно решает проблему XOR.

https://github.com/flajann2/rubyneat

Пожалуйста, не стесняйтесь просматривать и красть мой код по своему усмотрению.

Отладка чего-то подобного может быть сложной задачей. Для начала обратите особое внимание на формулировку своей пригодности. У меня не было возможности взглянуть на ваш код, но он должен предоставить что-то для частичных ответов, и вы увидите это в моем коде:

https://github.com/flajann2/rubyneat_examples

Вы также можете обратить пристальное внимание на то, как работает ваша сигмовидная функция. Он не должен быть слишком крутым и т. Д.

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

Мой код занимает около 100-200 прогонов, чтобы перейти к правильному решению для XOR. Однако он должен быть намного быстрее, и я знаю, что мне нужно сделать, чтобы его улучшить, но это действительно работает.

Надеюсь, это поможет.

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