#algorithm
#алгоритм
Вопрос:
Мне нужен алгоритм для приостановки заказов без наличия запасов.
В каждом заказе может быть несколько продуктов и каждому свое количество.
Исходя из уровня запасов, я хотел бы знать, как определить, какие ордера следует приостановить. Возможно, наименьшее количество заказов.
Для упрощения приведем пример:
Order #1
A 5, B 3, C 10
Order #3
A 1, B 2, C 3
Order #4
A 5, B 5, C 5
Order #5
A 1, B 1, C 1
**Stock Level**
A = 5, B = 5, C = 5
Очевидно, что заказ № 1 должен быть отложен, поскольку у нас нет 10 продуктов C. Теперь я могу выполнить заказы № 5 и № 3 или просто заказ № 4. Чтобы усложнить его еще больше, мне нужна эта функция или другая, чтобы приостанавливать заказы, как только у нас будет запас.
Это должно быть реализовано для масштаба, в котором ежедневно обрабатывается около 3000 заказов.
Мой подход заключался бы в том, чтобы получить все продукты, у которых недостаточно запасов для всех заказов. Затем найдите наименьшую комбинацию ордеров для постановки на удержание. Возможно, рассматривается вопрос о других продуктах, которых может не хватить в этих заказах.
Надеюсь, вам это так же интересно, как и мне
Комментарии:
1. Звучит как задача домашнего задания.
2. Я бы постарался избежать создания программы «попробуй все комбинации», потому что может быть важнее знать , какие заказы будут обработаны в первую очередь, и быть в состоянии объяснить , почему это так. Таким образом, я бы упростил правила и придерживался чуть большего количества отложенных заказов, чем минимальное. На основе этого я бы попытался создать поле заказа, в котором указано, какие заказы «лучше всего» выполнять в первую очередь, а затем просто принимать их в порядке поступления, если это возможно. Это сработало бы и при снятии их с удержания, просто повторно обработайте их, чтобы увидеть, могут ли они быть выполнены.
3. Это многомерная проблема с рюкзаком.
4. Вы, вероятно, имели в виду «у вас нет 10 продуктов C»
5. Обычно заказ имеет приоритет или обрабатывается в порядке «первым пришел, первым обслужен». Оптимизация 3000 заказов с десятками тысяч строк заказов может занять целую вечность.
Ответ №1:
Это пример алгоритма планирования. На самом деле вы хотите уменьшить максимальную задержку для любого заказа. Подумайте об этом: если бы у вас был бесконечный запас, заказы отправлялись бы по мере поступления, и все были бы довольны.
Вы можете адаптировать принцип многоуровневой очереди обратной связи :
- Каждый заказ имеет приоритет
- Заказы, которые только что поступили, имеют наименьший приоритет
- Вы повышаете приоритет заказа без запасов, используя функцию приоритета
foo(order)
- Каждый раз, когда вы можете выбирать между
j1
иj2
и вы выбираетеj1
, вы повышаете приоритетj2
использования другой функции приоритетаbar(j2)
- Существует также естественный порядок
less(j1,j2)
между заданиями. Это выбор между набором заданий без учета уровня запасов.
Теперь вы можете настраивать в зависимости от конкретных вещей. Возможно, естественный порядок FIFO
, smaller first
, bigger first
. Вы можете разработать приоритеты таким образом, чтобы заказ с товарами, которых нет на складе, обрабатывался, как только это позволяет запас.
Комментарии:
1. Он не должен забыть позаботиться о проблеме параллельного программирования. Это скорее пример алгоритма пекарни Лэмпорта
2. @eliasah Как это? Я не рассматривал потоковую обработку как серьезную проблему здесь.
3. и все же он не сказал, что не использует потоковую обработку. Но я никогда не говорил, что это серьезная проблема. Я просто добавил идею в стек