Алгоритм уровня запасов

#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. и все же он не сказал, что не использует потоковую обработку. Но я никогда не говорил, что это серьезная проблема. Я просто добавил идею в стек