Желание узнать больше о GA снова вспыхнуло, и вместо того, чтобы много читать и ничего не делать, я решил начать с другого пути: выбрать проблему и попытаться ее решить.
Я выбрал проблему Магический квадрат .
Для кодирования хромосом я использую Кодировка перестановки и следующие методы для Мутация () и NewChild (parent1, parent2, pivot) .
Мой алгоритм выбора немного странный и адаптирован из примеров, найденных в Интернете.
Оценка рассчитывается на основе квадрата разности суммы строк / столбцов / диагоналей и магической константы, , как это .
Что я заметил, так это то, что он очень быстро сходится и перестает улучшаться, как только достигает значения 1,7 (меньше - лучше).
Я вижу это так: он достигает локального оптимума, потенциальная яма , если вы можете так назвать, и не будет перепрыгивать через соседний холм, потому что мутации не отличается достаточно?
Я пытался изменить частоту мутаций 5 - 80%, оставив элитную группу в 10-20% в популяции хромосом, изменив размер популяции с 16-32 хромосом, но не повезло.
Что я делаю не так? Какие улучшения я могу использовать для того, чтобы счет населения сходился к нулю?
При необходимости я могу опубликовать полный исходный код, если кто-то посчитает его полезным или захочет поиграть с ним.
Обновление: Вот как выглядит скорость сходимости для куба размером 5 с частотой кроссовера 60% и частотой мутаций 10%: