Нужна помощь в адаптации генетического алгоритма, чтобы «решить» коммивояжера на Ruby - PullRequest
3 голосов
/ 07 декабря 2011

Я только что загрузил библиотеку ai4r http://ai4r.rubyforge.org/, и я использую генетический алгоритм, чтобы получить хороший маршрут из нескольких мест, вот так:

http://ai4r.rubyforge.org/geneticAlgorithms.html

Номне нужно иметь возможность установить начальный город.

Есть ли какие-либо подсказки о том, как использовать это в "фиксированном" стартовом городе?

Ответы [ 3 ]

0 голосов
/ 07 декабря 2011

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

РЕДАКТИРОВАТЬ: Если вам не нужно возвращаться в свой стартовый город, вы можете выбрать конечный город,убрав большее из двух расстояний, которые покидают ваш стартовый город.Если вы удалите в своем окончательном решении наибольшее расстояние за весь круговой рейс, вы получите кратчайший общий тур, который не является круговым.Это, вероятно, то, что они сделали на веб-странице, на которую вы ссылались (Дублин - Москва выглядит самым дорогим направлением).Тем не менее, обратите внимание, что авторы этой страницы использовали неправильное местоположение для Вены, и Мадрид, кажется, также отключен.

Еще один способ, когда вам понадобится стартовый город, - это когда у вас есть дополнительное времяограничение окна.Это ограничение указывает, что для каждого города, в котором вы должны быть в определенное время, «депо», как называется ваш стартовый город, в этом случае имеет временное окно, которое охватывает всю поездку.Однако TSPtw является гораздо более сложной проблемой и часто требует продвинутых генетических операторов.Вы также можете смоделировать TSPtw как CVRPtw (проблема маршрутизации с использованием емкостного транспортного средства с временными окнами), если вы используете только одно транспортное средство.Вы можете попробовать нашу реализацию VRP в HeuristicLab , чтобы решить эту проблему.У нас есть список рассылки , если вам требуется дополнительная поддержка.

0 голосов
/ 10 декабря 2011

Ответ, который вы получите от GA на TSP, - это цикл, то есть первый город, который вы хотите. Например, если ответ [3 4 2 6 1 5], и я хочу, чтобы первый город был 2, тогда я могу «свернуть» решение до [2 6 1 5 3 4].

Хотя вы можете уменьшить свою проблему на 1, если в своей функции оценки вы указали первый город. В этом случае вы должны принять во внимание, что лица должны быть изменены для учета этого. Например, если вы установили первый город на # 2 (проблема 6 городов), и у вас есть человек, который является [1 2 3 4 5] (6 городов минус один). Индивидуум для оценки [2 1 3 4 5 6].

0 голосов
/ 07 декабря 2011

В общем, не смотря на специфичную для Ruby реализацию, вы можете просто удалить начальный город и предположить, что первое направление следует из вашего стартового города к тому, что производит GA.Просто убедитесь, что первое ребро включено в функцию «стоимость / фитнес».

...