Алгоритм: планирование рейса - PullRequest
5 голосов
/ 28 октября 2008

Мне нужно спланировать рейс, соединяющий n мест в море с указанным началом и указанным пунктом назначения со следующими ограничениями.
Путешествие должно касаться всех мест.
Если есть резервирование от A до B, то нужно коснуться a до B
Время, затрачиваемое в каждом месте, различается (зависит от бронирования в этом месте)
Каждое место имеет рабочее окно. Если судно доходит до рабочего окна, оно должно ждать.
Примечание. Алгоритмы «минимального связующего дерева» могут не совпадать, поскольку время, необходимое для каждого порта, зависит от предыдущего маршрута (из-за рабочего окна).
Есть ли какой-нибудь алгоритм для этого?

Ответы [ 4 ]

5 голосов
/ 28 октября 2008
4 голосов
/ 28 октября 2008

Оптимизация колонии муравьев представляется наиболее известным решением этой проблемы. Обратите внимание, что это проблема NP , фактически даже проблема NP-полная. Это означает, что «легко» проверить правильность решения, но «сложно» найти его. Единственный способ найти «оптимальное» решение - это попробовать все возможные решения, сравнить результаты и выбрать лучшее. Конечно, это не приемлемо, если вы хотите решить эту проблему в разумные сроки.

Алгоритмы ACO найдут хорошее решение, близкое к оптимальному. Я говорю близко, поскольку AFAIK это не может гарантировать, что всегда найдет лучший. Лучшие решения могут существовать. Тем не менее, зачастую нет необходимости действительно находить наилучшее из возможных решений, решение, которое просто «очень хорошо», поможет, а ACO - именно то, что вы ищете. Он может найти решение за разумные промежутки времени, и решение будет правильным.

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

2 голосов
/ 28 октября 2008

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

У меня есть несколько подходов, которые работают прилично, чтобы дать приблизительные решения.

  1. Генетические алгоритмы
  2. Табу Поиск
  3. Рандомизированный алгоритм (например, Random Walk)

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

0 голосов
/ 30 октября 2008

Над этой проблемой много работы. Это идет под разными именами

  1. Проблема коммивояжера (маршрутизация транспортных средств) с временными окнами и приоритетами.
  2. Проблема с доставкой и доставкой.

Существует множество исследований по этой проблеме, многие из которых содержатся в Операционном исследовании Журналы . Эта проблема, как правило, NP-Hard, поэтому общее точное решение проблемы, как вы ее описали, нецелесообразно, но могут быть хорошие, точные или приблизительные решения вашей конкретной проблемы. Лучший алгоритм будет функцией ваших данных.

  • Насколько велик ваш набор данных. Если «n» относительно мало (30–100), то возможно точное решение с помощью математического программирования .
  • Насколько жесткими являются временные рамки и ограничения приоритета. Если количество возможных мест для посещения в любом временном окне невелико, возможно решение, такое как динамическое программирование.
  • Если вы не можете найти особый случай, то вы, вероятно, захотите объединить эвристический алгоритм построения с постпроцессором локального поиска. Простая альтернатива - это так называемая GRASP эвристика, где вы
  • взять существующую эвристическую конструкцию,
  • рандомизировать так, что несколько прогонов даст вам несколько решений,
  • запускать рандомизированную версию несколько раз
  • принять лучшее решение, которое получится.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...