Генерация пути на графе с двунаправленными взвешенными ребрами - PullRequest
0 голосов
/ 30 июня 2019

Я пытаюсь реализовать Java-реализацию генератора пути на графе с двунаправленными взвешенными ребрами. Задача состоит в том, чтобы предоставить пользователю маршрут на основе списка точек интереса (POI) и интересов пользователя. Интересы пользователя, расстояния и время в пути между всеми POI уже рассчитаны. С помощью этих данных мне удалось создать график с двунаправленными ребрами, где вес ребра - это время в пути между источником и узлом назначения.

Есть некоторые соответствующие пользовательские данные:

  • промежуток времени, в течение которого он хочет путешествовать, то есть 30 июня с 16:00 до 30 июня в 20:00.
  • начальная точка (координаты) поездки, из которой в качестве начальной точки поездки выбран ближайший POI.

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

Интересы пользователя для POI определяются в диапазоне от 0 до 5. В идеале эта переменная также будет учитываться при расчете пути, поскольку пользователь хотел бы посетить POI с лучшим показателем.

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

1 Ответ

1 голос
/ 02 июля 2019

Рассмотрим следующую процедуру:

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