Разработка алгоритма маршрутизации транспортных средств / планирования ресурсов

Мой первый пост здесь — надеюсь, вы поможете мне с разработкой алгоритма, который я обдумывал некоторое время — не знаю, какой подход выбрать (VRPTW, планирование ресурсов или что-то совсем другое!?)

Чтобы выразить это в реальном примере, у нас есть много садовых отходов в небольшом количестве мест (обычно менее 5). Все отходы должны быть доставлены в другие места в установленные сроки. Для перевозки садовых отходов у нас есть прицепы, которые необходимо буксировать автомобилями. Садовые отходы можно сбрасывать на свалку только в определенное время (временные окна). На некоторых участках мы можем сдать прицеп для заполнения или опорожнения людьми, но в других местах водитель автомобиля должен сделать это сам, а автомобиль должен оставаться там. Все сроки могут быть рассчитаны (т. е. время погрузки / разгрузки, время в пути и т. д.). Автомобили могут перемещаться между площадками без прицепа, прицепы можно буксировать пустыми, но сами прицепы не могут перемещаться между локациями.

Наша цель состоит в том, чтобы обеспечить перевозку всех прицепов с отходами в то время, когда

  • сведение к минимуму количества используемых прицепов и автомобилей
  • соблюдение всех временных окон для вывоза мусора
  • «балансировка» трейлеров – т.е. в конце дня у нас в каждой локации столько же трейлеров, сколько было в начале дня

Я думал подойти к этому как к алгоритму планирования ресурсов, но я не уверен, как справиться с «балансировкой» трейлеров.

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

Любые мысли о подходе будут оценены!


person will-hart    schedule 18.12.2009    source источник
comment
Я думаю, что «динамическое программирование» — популярное решение для устранения ограничений. Давненько я не сталкивался с проблемами планирования.   -  person Paul Nathan    schedule 18.12.2009


Ответы (5)


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

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

  1. [Начало] Создать случайную популяцию из n хромосом (подходящие решения проблемы)
  2. [Соответствие] Оценить соответствие f(x) каждой хромосомы x в популяции
  3. [Новая популяция] Создайте новую популяцию, повторяя следующие шаги, пока новая популяция не будет завершена.

    [Отбор] Выберите две родительские хромосомы из популяции в соответствии с их пригодностью (чем лучше пригодность, тем больше шансов быть отобранными)

    [Кроссовер] С кроссоверной вероятностью происходит скрещивание родителей с образованием нового потомства (детей). Если кроссинговер не производился, потомство является точной копией родителей.

    [Мутация] С вероятностью мутации мутировать новое потомство в каждом локусе (положении в хромосоме).

    [Принятие] Поместите новое потомство в новую популяцию

  4. [Заменить] Использовать новую сгенерированную популяцию для дальнейшего запуска алгоритма
  5. [Тест] Если конечное условие выполнено, остановитесь и верните лучшее решение в текущей популяции.
  6. [Цикл] Перейти к шагу 2

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

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

person Robert Neville    schedule 18.12.2009
comment
Спасибо за ответы, ребята. Раньше я использовал несколько простых ГА для некоторых других задач, поэтому я знаком с этим подходом. Функция пригодности не должна быть слишком сложной — это простое уравнение стоимости. Мне нужно подумать о кодировании хромосомы, так как она должна захватить - автомобиль - трейлер - время начала - идентификатор задачи - любые пустые пробеги, чтобы сбалансировать трейлеры - person will-hart; 21.12.2009

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

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

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

person Jiri Klouda    schedule 18.12.2009

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

Я также добился очень хороших результатов в некоторых задачах с оптимизацией роя частиц (PSO). По сути, вы можете думать о каждом геноме как о частице в некотором многомерном пространстве. Координаты частицы являются параметрами для вашего расчета (фитнес-функция). Каждая частица запускается случайным образом со случайной скоростью. Для каждой итерации симуляции вы обновляете положение каждой частицы с помощью ее текущего вектора движения, а затем добавляете компоненты других векторов, например: направление к лучшей частице на данный момент, направление к лучшей частице за всю историю, направление к локальной группе лучший и тд...

Поначалу может показаться довольно сложным реализовать GA или PSO, но я уверяю вас, что легко написать небольшую структуру, которая абстрагирует алгоритм (GA/PSO) от реальной проблемной области, которую вы пытаетесь оптимизировать. Вы всегда можете вернуться к Википедии для получения подробной информации об алгоритмах.

Когда у меня есть фреймворк, я обычно начинаю с задачи с двумя параметрами (вероятно, упрощения вашей проблемы или расположения X и Y на изображении), чтобы я мог легко визуализировать и настроить алгоритм, чтобы получить хорошее поведение роя. Затем я масштабирую его до большего количества измерений.

Мне нравится этот подход, потому что он позволяет мне легко оптимизировать задачи, которые имеют довольно сложные и запутанные части фактической постановки задачи (например, автомобили и прицепы).

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

По моему опыту, вы, как правило, тратите столько же времени на настройку параметров GA или PSO (после того, как у вас есть реализация), чем на написание жестко запрограммированного эвристического решения, но преимущество в том, что изменение стратегии поиска решения обычно требует только изменения параметров или замены очень хорошо определенных алгоритмов другой реализацией, в отличие от кодирования совершенно другой стратегии эвристического решения проблемы с нуля.

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

person Luke Machowski    schedule 19.12.2009

Основной подход:

Поскольку проблема невелика, я бы предложил подход, при котором вы добавляете автомобили и прицепы до тех пор, пока не получите приемлемое решение, а не пытаетесь свести количество автомобилей и прицепов к минимуму.

Решение:

Я добился меньшего успеха в GA с ограничениями и еще меньше успеха в GA с ограничениями на целочисленные переменные (например, количество трейлеров в локации). Возможно, программирование с ограничениями является лучшим подходом, поскольку вы просто хотите сгенерировать допустимое решение для заданного количества автомобилей и прицепов, а не пытаться минимизировать пройденное расстояние.

Наблюдение:

Вы решаете проблему в сети, где последним ходом может быть перемещение пустого трейлера.

Удачи !

person Grembo    schedule 30.12.2009

Локальный поиск — это альтернатива генетическим алгоритмам. В Международном соревновании по составлению расписаний 2007 алгоритмы локального поиска (такие как запретный поиск и симуляция отжига) явно превзошли результаты генетических алгоритмов (1–4-е место для LS против 5-го места для GA на дорожке 1 из примерно 80 участников IIRC).

Кроме того, взгляните на некоторые библиотеки, такие как OptaPlanner (поиск запретов, имитация отжига, поздняя приемка). , с открытым исходным кодом, java), JGap (генетические алгоритмы, с открытым исходным кодом, java), OpenTS (поиск с запретами, ...

person Geoffrey De Smet    schedule 16.01.2011
comment
Я думаю, что вы неправильно используете некоторые термины здесь. Генетические алгоритмы подпадают под знамя метаэвристических алгоритмов. Эволюционные алгоритмы (генетические, меметические и т. д.) и алгоритмы, основанные на локальном поиске (имитация отжига, запретный поиск и т. д.), являются подкатегориями метеэвристики. Гиперэвристика не считается метаэвристикой. - person Jimbo; 07.07.2014
comment
@Jimbo Я полностью согласен и не согласен со своим прежним «я» :) Ответ скорректирован. За исключением, может быть, той части, что гиперэвристика не является метаэвристикой. С точки зрения использования они ведут себя одинаково. Это все равно, что сказать, что человек не животное, потому что он особое животное. - person Geoffrey De Smet; 08.07.2014
comment
Они совсем не чувствуют то же самое. Гиперэвристика включает в себя дополнительный уровень абстракции, который полностью игнорирует структуру проблемы. Уровень эвристики нижнего уровня состоит либо из простых эвристик низкого уровня, либо из сегментов эвристик, выбранных алгоритмом высокого уровня. Гиперэвристика также является гораздо более обобщенным алгоритмом. Существуют примеры гиперэвристических алгоритмов, которые могут решать проблемы в нескольких предметных областях. Например, тот же алгоритм, который используется для решения задачи планирования персонала, может решать задачи маршрутизации транспортных средств, ТС и задач о рюкзаке. - person Jimbo; 08.07.2014
comment
Самая большая определяющая разница заключается в том, что в то время как метаэвристика работает в пространстве поиска решений проблем, гиперэвристика работает в пространстве поиска эвристических алгоритмов или, в некоторых случаях, в сегментах эвристических алгоритмов. В первом случае эвристика выбирается из списка, а во втором эвристика строится из списка сегментов. Гиперэвристика намного эффективнее метаэвристики и демонстрирует производительность, конкурентоспособную с алгоритмами, сделанными на заказ, при сохранении высокой степени общности. - person Jimbo; 08.07.2014