Я работаю над небольшим проектом, который включает в себя поиск лучшего маршрута в автобусной системе. Я строю график, где остановки - это вершины, а ребра взвешиваются по времени между остановками.
Я хотя бы попытался использовать вариант Дейкстры, чтобы найти лучший маршрут. При поиске следующих ребер, которые нужно рассмотреть, алгоритм смотрит только на ребра, время вылета которых совпадает с текущим временем поездки. Существует несколько частей графика, на которых автобусы прибывают и отправляются из одной и той же серии серий остановок одновременно. Чтобы предотвратить ненужное переключение автобусов, я добавляю стоимость к изменениям маршрута при выборе лучшего ребра. Это сработало на удивление хорошо и довольно быстро.
Проблема, с которой я столкнулся, заключается в выборе первого автобуса. Рассмотрим следующий сценарий:
Дейкстра предпочтет сесть на автобус А, потому что он прибывает на остановку 2 первым. Если вы собираетесь остановить 2, это здорово. Но если вы собираетесь остановиться на 3-м автобусе, автобус B - лучший выбор, и общая стоимость для обоих одинакова. Я не думаю, что смогу избежать жадного характера Дейкстры, но он работает так хорошо для всего остального, я не хочу отказываться от него, если мне не нужно.
Кто-нибудь знает хорошее решение, которое может решить проблему правильного выбора первой остановки (или, возможно, корректировки ее после факта?). В качестве альтернативы, есть ли лучший алгоритм, который люди используют для решения этой проблемы?