Я строю простой «Привет, мир!». генетический алгоритм для обучения. Мое население - группа случайных строк. Через мутацию и кроссовер строки превращаются в «Hello, World!». По какой-то причине мое население будет сидеть за фитнес-счетом и, по-видимому, никогда не развиваться. В других случаях мое население достигнет целевых генов «Привет, мир». Я использую случайный выбор и одноточечный кроссовер. Хотя, это также происходит, когда я использую выбор турнира и рулетки.Население становится устаревшим - Генетический алгоритм
Вопрос:
Почему мое население становится устаревшим и не достигая генов-мишеней, даже если я деверсификация население через мутации? Это из-за случайной природы генетического алгоритма или ошибки в моем коде?
E.g.
Каждая хромосома в популяции будет иметь гены «HellV, Wor`dL». Даже после 10 000 поколений гены одинаковы. В других случаях гены достигают целевых генов «Привет, мир!». после ~ 33 поколений.
- Примечание: Приведенный ниже код работает, как ожидалось при использовании Java. При использовании Java население всегда достигает целевых генов. Кроме того, я только начал изучать C++ сегодня, поэтому очень возможно, что в моем коде есть недостаток, который я просто не вижу.
Население Размер: 333
Элитизм: истинный
Элитизм Процент: 25%
Мутация Вероятность: 20%
Кроссовер Вероятность: 95% Тип
Выбор: Random
Кроссовер Тип: One Point
EDIT: Я удалил код из этого сообщения и вместо этого добавил ссылку на мой github из-за того, что это несколько сотен строк кода.
Являются ли эти свободные функции глобальными или являются членами класса? Одна из самых распространенных проблем при переходе с Java на C++ - это то, как C++ копирует объекты в местах, где Java передает ссылку. – molbdnilo
Это не должно компилироваться на любом языке - wtf вы спрашиваете? (хотел бы проголосовать вверх-избирателей) –
Можете ли вы предоставить [минимальный, полный и проверяемый пример] (http://www.stackoverflow.com/help/mcve)? Что такое «GAChromosome»? Где определяется материал? – Barry