Вот программа на C # подход к тому, что вы ищете.
Что касается интереса (или отсутствия такового) реализации кроссовера , все это зависит от конкретной логики выбора, которую ваша реализация будет использовать (и / или самой функции оценки, если, например, она включает оценку скорости улучшения). Во многих случаях кросс-операции «спасут от рубящего блока» некоторые решения, которые эффективны / оптимальны в области графика, но каким-то образом «застряли» в других . Это не означает, что если общий алгоритм является достаточно медленным и покрывает значительный процент пространства решений, те же самые решения, возможно, не были обнаружены заново, но перекрестный переход также может увеличить эти открытия (и / или позволить вам застрять в еще один локальный минимум ;-))
Не имеет прямого отношения, но представляет интерес для тех, кто изучает ГА, это оригинальный «окончательный» эксперимент в ГА оригинальный «окончательный» эксперимент в ГА, проф. Олдерман (из Известность RSA), которая использовала фактические молекулы ДНК [в программу на C - просто шучу], чтобы решить связанную проблему графов, проблему гамильтоновых графов.
Редактировать : Перечитывая вопрос, я понимаю, почему вы задали его или, точнее, , почему вы хотели бы ответить "Нет, вы не хотите перекрестного ответа" ; -)
Ваш геноним напрямую связан с самим графиком (ничего страшного в этом, a priori ), но это создает препятствие для того, чтобы большинство перекрестных потомков не было жизнеспособными, поскольку они могут может иметь повторяющиеся узлы (посещать один и тот же город дважды или более) и не иметь узлов (не посещать некоторые города) ... Кроме того, жизнеспособные перекрестные переходы будут влиять на похожие графики и, следовательно, могут просто увеличивать затраты на поиск по сравнению с какими мутациями обнаружил бы ...
Гм ... Тогда, может быть, кроссовер, в этой конкретной реализации не очень поможет алгоритму (и действительно потребует значительную часть его ЦП для создания, тестирования и часто отбрасывать кросс -по потомкам, процессор, который лучше использовать, предоставляя больше итераций и более медленную скорость охлаждения ...). Если не! Вы найдете умный способ выполнения перекрестных операций; -)