Предложенные операторы GA для проблемы TSP?

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

5
задан Jon Seigel 17 May 2010 в 03:20
поделиться

3 ответа

Не могли бы вы уточнить

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

Вы могли бы проверить на операторах кроссовера, которые убедитесь, что у вас нет повторяющихся узлов в детских хромосом. Пара тех кроссоверов - кроссовер (OX) по порядку.

Мутация может быть так же простым, как просто замена на две позиции в одном хромосоме.

Кстати, поскольку вы помечены «Python», посмотрите на pevolve , он также имеет примером TSP.

1
ответ дан 14 December 2019 в 13:36
поделиться

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

2
ответ дан 14 December 2019 в 13:36
поделиться

Статья Википедии указывает на Amb , которая является производной Схемы с возможностями недетерминированного программирования.

Насколько я понимаю, основная причина, по которой языки программирования не делают этого, заключается в том, что выполнение недетерминированной программы на детерминированной машине (как и все существующие компьютеры) по своей сути дорого. В основном недетерминированная машина Тьюринга может решать сложные задачи за полиномиальное время, для которого не известен полиномиальный алгоритм для детерминированной машины Тьюринга. Другими словами, недетерминированное программирование не улавливает сущность алгоритмики в контексте существующих компьютеров.

Та же проблема влияет на Prolog. Любое эффективное или, по крайней мере, не совсем неэффективное приложение Prolog должно использовать оператор «cut», чтобы избежать изучения экспоненциального числа путей. Этот оператор работает только до тех пор, пока программист хорошо понимает, как интерпретатор Prolog будет исследовать возможные пути детерминированным и очень процедурным образом. Вещи, которые очень процедурны, плохо сочетаются с функциональным программированием, поскольку последнее в основном является попыткой не думать процедурно вообще.

Следует отметить, что между детерминированными и недетерминированными машинами Тьюринга существует модель «квантовых вычислений». Квантовый компьютер, предполагая, что он существует, не делает всего, что может сделать недетерминированная машина Тьюринга, но он может сделать больше, чем детерминированная машина Тьюринга. Есть люди, которые в настоящее время разрабатывают языки программирования для квантового компьютера (предполагая, что квантовый компьютер в конечном итоге будет построен). Некоторые из этих новых языков являются функциональными. Вы можете найти множество полезных ссылок на этой странице Википедии . Видимо, конструировать язык квантового программирования, функциональный или нет, и использовать его, непросто и уж точно не «просто».

-121--1573900-

Для Microsoft.XMLHTTP (Microsoft.XMLHTTP) можно использовать прописной нижний регистр, т.е. (Microsoft.XMLHttp), IE8, как правило, чувствителен к регистру

-121--4617757-

Упорядоченная мутация и упорядоченное пересечение (см. эта статья ). Стандартные мутационные и перекрестные операции обычно приводят к неправильным решениям (т.е. дублирующимся и/или отсутствующим городам в маршруте).

Недавно был аналогичный вопрос .

У меня есть Java-апплет, который реализует TSP с использованием упорядоченного перекрестного перехода и мутации , если вы заинтересованы в сравнении производительности вашей реализации.

3
ответ дан 14 December 2019 в 13:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: