Задача: Одновременно поступают 8 заказа (по 2 заказа в каждой зоне и 2 заказа, которые находятся в разных зонах) Необходимо распределить эти заказы, учитывая зоны и загруженность курьеров (не больше 3 заказов). Зона1 Курьер №1 имеет 2 заказа Курьер №2 имеет 3 заказа Курьер №3 имеет 1 заказ Зона2 Курьер №1 имеет 3 заказа Курьер №2 имеет 3 заказа Курьер №3 имеет 1 заказ Зона3 Курьер №1 имеет 2 заказа Курьер №2 имеет 3 заказа Курьер №3 имеет 2 заказ
Как информацию о курьерах получаем? В виде вот этой строки: ? --- Добавлено --- Ещё один вопрос: какие данные считать фиксированными, а какие - переменными?
ПО сути это все что я знаю о курьерах) БД и заполнил ее: . Насчет фиксированных данных не очень понял. Но наверное количество заказов которые сейчас имеет курьер фиксированное, но количество поступающих заказов может меняться.
Зря удалил прошлое сообщение своё, надо было просто уточнить, поэтому напишу еще раз... При условии, что одновременно поступает "n" заказов, как исчисляется кол-во обязательных заказов для зоны и кол-во "рассеянных" заказов? Могу предположить: floor(n/3) -- кол-во обязательных заказов для зоны, n - floor(n/3) -- кол-во "рассеянных" заказов?
Я думаю, не надо углубляться в возможностях изменения условий, я бы просто хотел узнать логику решения конкретно этих данных
По конкретно этим данным у меня также есть вопрос...при моём понимании задачи распределить заказы не получится: Нагрузка (по умолчанию): Зона 1: 6/9 Зона 2: 7/9 Зона 3: 7/9 Нагрузка (после обязательных 2 заказов на каждую зону): Зона 1: 8/9 Зона 2: 9/9 Зона 3: 9/9 Куда тогда девать ещё 1 заказ? И как на самом деле надо это понимать?
Ах, да вы правы, прошу меня простить, я идиот, забыл упомянуть, о том, что есть еще один курьер в транзите, у него 0 заказов, и он может брать заказ с любой зоны, но он так сказать "запасной" и его загружать в последнюю очередь
Тогда мы можем, узнав, что суммарная нагрузка трёх зон составляет 20/27, отдать 1 заказ запасному и далее распределять заказы для 3-ёх зон по простой схеме: при сдаче обязательных заказов курьерам смотрим на нагрузку каждого курьера в каждой зоне, отдаём минимально нагруженному/нагруженным заказы: cначала отдаём курьерам с одним заказом, потом - с двумя заказами. При "рассеянной" раздаче, зная, например, что в 1-ой зоне по дефолту была меньшая нагрузка, отдать курьеру из 1-ой зоны последний заказ. Это всё конкретно для этих данных
План такой, мне в бд приходит заказ, в поле ид_курьера содержится Null, но есть регион, и делаю сравнения по региону к которому прикреплен заказ и прикреплены курьеры, потом прохожусь по этим курьерам и смотрю у кого сколько заказов если заказов больше 3 то курьер отметается, если все курьеры заняты, тогда отправляю заказ на транзитного курьера. Вот так звучит нормально?) Просто я бы хотел на всякий транзитному курьеру отправлять в последнюю очередь