Учитывая список городов и стоимость перелета между каждым городом, я пытаюсь найти самый дешевый маршрут, который посещает все эти города.В настоящее время я использую решение MATLAB , чтобы найти самый дешевый маршрут, но теперь я хотел бы изменить алгоритм, чтобы разрешить следующее:
- повторные узлы - повторные узлы должны быть разрешены, поскольку путешествие по городам-концентраторам часто может привести к удешевлению маршрута.
- динамические граничные веса - стоимость перелетов туда и обратно отличается (обычно ниже)до двух эквивалентных рейсов в одну сторону
На данный момент я игнорирую вопрос о датах полетов и предполагаю, что можно путешествовать из любого города в любой другой город.
У кого-нибудь есть идеи, как решить эту проблему?Моей первой идеей было использовать метод эволюционной оптимизации, такой как GA или ACO , чтобы решить точку 2, и просто отрегулировать вес ребер при оценке целевой функции на основе того, содержит ли маршрут возврат /рейсы туда и обратно, но, возможно, у кого-то есть идея получше.
(Примечание: я использую MATLAB, но я не ищу конкретно кодовые решения, а просто идеи высокого уровня о том, какие алгоритмы можно использовать.)
Редактировать - подумав об этом, разрешение «повторять узлы» кажется слишком свободным от ограничений.Мы могли бы дополнительно ограничить проблему, чтобы, хотя узлы можно было неоднократно посещать, каждое направленное ребро можно было посетить не более одного раза.Представляется разумным игнорировать любые маршруты, которые включают один и тот же рейс в одном и том же направлении более одного раза.