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