Давайте предположим, что доставка еды в несколько ресторанов (скажем, 20). Есть (скажем, 10) драйверов. Далее, скажем, мы получили 100 заказов в течение 4 часов, чтобы доставить еду из этих ресторанов на дом.
Таким образом, водители должны быть скоординированы, чтобы забрать еду на месте и доставить клиентам домой.
Основная цель - минимизировать время доставки, то есть время между заказом и прибытием на дом. Вторичная цель - максимизировать возможности водителя (т.е. наименьшее количество времени для доставки всех заказов).
Имейте в виду, что заказы поступают в течение четырехчасового периода, поэтому, скажем так, равномерно, т. Е. Одна очень 3 минуты. Кроме того, давайте предположим, что заказы случайным образом относятся к 20 ресторанам.
Предположим, что я могу рассчитать время для поездки из любого места в пункт назначения до секунды.
Я знаю местоположение всех водителей в режиме реального времени. Я также знаю их статусы, т. Е. В настоящее время они находятся в пути, чтобы забрать заказ (доставить в известное место назначения), уже забрали ли они заказ и направляются в известное место назначения.
Ограничения:
1) Должен забрать заказ через определенное время (т.е. время приготовления еды для ресторана)
2) Должен доставить заказ менее чем за 45 минут (в противном случае выдается предупреждение)
3) Необходимо добавить время с «х» минут, чтобы учесть время, потраченное на ходьбу до магазина, чтобы получить заказ и т. Д.
4) Необходимо добавить время с «у» минут, чтобы учесть время, потраченное на доставку заказа клиенту и сбор платежей.
5) У водителей есть только определенный набор способов оплаты (например, Наличные, Visa, Amex, MasterCard). Мы должны сопоставить запрос клиента (наличные, виза и т. Д.) С возможностями водителя (наличные, виза, амекс и т. Д.).
Так, например, если я получу два ордера с закрытием по месту назначения и закрытием по месту получения, даже если есть другой «свободный» драйвер (ничего не делающий), было бы более эффективно использовать один и тот же драйвер для получения обоих заказы и доставим оба заказа.
Можно предположить, что для каждого ресторана будут введены зоны доставки, т. Е. Большинство людей, заказывающих из них, скорее всего, будут рядом с ними. Следовательно, этот алгоритм должен автоматически сегментировать водителей в городских зонах и отдавать предпочтение водителям в пределах зоны.