Постановка задачи

 

Компании, продающей один вид продукции, необходимо определить, какое коли­чество товара она должна иметь в запасе на каждый из последующих n мес. (n — заданный входной параметр). Промежутки времени между возникновением спро­са на товар являются независимыми и представлены случайными величинами, имеющими одинаковое распределение, со средним значением 0,1 мес. Объемы спроса D также являются независимыми (они не зависят от того, когда возникает спрос) и одинаково распределенными случайными величинами:

 
 

 

 


В начале каждого месяца компания пересматривает уровень запасов и решает, какое количество товара заказать у поставщика. В случае, когда компания заказы­вает Z единиц товара, она будет нести затраты, равные К + iZ, где К — покупная стоимость, К = 32 доллара; i — дополнительные затраты на единицу заказанного товара, i = 3 доллара. (Если Z= 0, какие-либо затраты отсутствуют.) При оформле­нии заказа время, необходимое для его доставки (именуемое временем доставки или временем получения заказа), является случайной величиной, равномерно рас­пределенной между 0,5 и 1 мес.

Компания использует постоянную стратегию управления запасами (s, S), что­бы определить, какое количество товаров заказывать, то есть

 
 

 

 


где I, S, s — это соответственно уровень запасов в начале месяца, после поступле­ния заказа и критический.

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

Один тип расходов, возникающий в системе запасов, — это за­траты на приобретение заказа. Однако большинство реальных систем управления запасами сталкиваются еще с двумя дополнительными типами расходов — затра­тами на хранение, а также издержками, связанными с нехваткой товара, к кото­рым мы вернемся, введя некоторые дополнительные обозначения. Пусть I(t) — уровень запасов в момент времени t (обратите внимание, величина I(t) может быть положительной, отрицательной или равняться нулю); I+(t) = mах{I(t), 0} — количество товара, имеющегося в наличии в системе запасов на момент времени t (заметьте, что I+(t) > 0); а I-(t) = mах{I(t), 0} — количество товара, поставка которого была отложена на момент времени t (I-(t) > 0.) Возможное изменение соотношения I(t), I+(t) и I-(t) показано на рис. 1.13. Моменты времени, когда I(t) уменьшается, соот­ветствуют моментам возникновения спроса.

В нашей модели предполагается, что затраты h на хранение в месяц составляют 1 доллар на единицу товара, имеющегося в (положительных) запасах. Затраты на хранение включают арендную плату за склад, страховки, расходы на обслужива­ние и налоги, а также скрытые издержки, возникающие, если капитал, вложенный в запасы, мог бы инвестироваться куда-нибудь еще. До сих пор в своих формули­ровках мы не учитывали тот факт, что некоторые затраты на хранение возникают даже тогда, когда I+(t) = 0, поскольку наша задача — сравнить стратегии осуществ­ления заказов без учета этого фактора, который, по сути, не зависит от используе­мой стратегии и не повлияет на нашу оценку. Итак, если I+(t) представляет коли­чество товара в запасах на момент времени t, то среднее по времени количество товара, находящегося в запасах в течение n мес., составляет

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

Допустим, что издержки π, связанные с отложенными поставками, равны 5 дол­ларам на единицу товара в отложенной поставке за месяц. При этом учитываются издержки на ведение дополнительного учета при невыполнении заказа и урон, на­носимый престижу компании. Среднее по времени количество товара в отложен­ных поставках

 
 

 


Следовательно, средние издержки, образовавшиеся в связи с отложенными по­ставками, в месяц будут составлять π.

Предположим, что исходный уровень запасов I(0) = 60 и у компании нет непри­обретенных заказов. Будем моделировать работу системы в течение n = 120 мес. и воспользуемся показателями средних общих расходов в месяц (которые включают в себя сумму средних затрат на приобретение заказа в месяц, средних затрат на хра­нение в месяц и средних издержек, связанных с нехваткой товара, в месяц), чтобы сравнить следующие девять стратегий осуществления заказов (s — точка заказа):

s 20 20 20 20 40 40 40 60 60

S 40 60 80 100 60 80 100 80 100

Обратите внимание, что переменными состояния имитационной модели этой системы управления запасами являются уровень запасов I(t), количество товара в невыполненном заказе, направленном от компании к поставщику, и время пос­леднего события, которое необходимо для вычисления площади под функциями I+ (t) и I- (t) .

 

6.2 Организация и логика программы

В рассматриваемой модели системы управления запасами используются следую­щие типы событий.

Событие Тип события
Поступление заказа от поставщика в компанию Возникновение спроса на товар со стороны покупателя Завершение моделирования через п мес. Оценка запасов (и возможный заказ товаров) в начале месяца 1 2 3 4

Завершение моделирования сделаем событие типа 3, а не 4, поскольку на момент времени 120 будут запланированы как событие завершения моделирова­ния, так и событие оценки запасов, а задача состоит в том, чтобы в это время первым было выполнено именно событие завершения моделирования. (В связи с тем, что моделирование закончится в момент времени 120, нет смысла оценивать запасы и возможные объемы заказов, соответственно нести издержки, относящие­ся к заказу, который никогда не прибудет.) Событие типа 3 всегда будет наступать прежде, чем событие типа 4, так как в случае планирования двух типов событий на одно время синхронизирующие процедуры (в обоих языках) отдают преимущест­во типу события с меньшим номером. Имитационная модель, по сути, должна быть разработана так, чтобы события обрабатывались в соответствующем порядке при возникновении временных связей.

Для моделирования этой системы нужны три типа случайных величин. Проме­жутки между возникновениями спроса распределены экспоненциально. Слу­чайная величина спроса D должна быть дискретной (как уже описывалось рань­ше), и может быть генерирована следующим образом. Вначале необходимо поде­лить единичный интервал на смежные подынтервалы С1 = [0,1/6), С2= [1/6,1/2), С3 = [1/2,5/6) и С4 = [5/6,1) и от генератора случайных чисел получить случайную величину U с U(0,1). Если U попадает в интервал С1 возвращаем D = 1; если U по­падает в интервал C2 возвращаем D = 2 и т. д. Так как ширина C1 равна 1/6 - 0 = = 1/6, а U равномерно распределена между интервалом [0,1], вероятность попада­ния U в интервал C1 (и получения результата D = 1) составляет 1/6; это согласует­ся с искомой вероятностью для D = 1. Аналогичным образом мы возвращаем D =2: если U попадает в интервал С2, вероятность такого попадания равна ширине С2, то есть 1/2 - 1/6 = 1/3, как и требовалось. То же самое касается и других интервалов. Все подпрограммы, применяемые для генерирования величин спроса, используют этот принцип и в качестве входных величин принимают разделяющие точки, опре­деляющие подыинтервалы, которые являются интегральными вероятностями рас­пределения D.

Время доставки равномерно распределено, но не в единичном интервале [0,1]. По сути, мы можем генерировать случайную величину, равномерно распределен­ную в любом интервале [а, b], сгенерировав случайное число U с U(0, 1), а затем возвратив а + U(b - а).

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

Событие поступления заказа должно вносить изменения, возникаю­щие при доставке (ранее оформленного) заказа от поставщика. Уровень запасов увеличивается на число товаров в заказе, а событие поступления заказа должно быть исключено из рассмотрения. При событии возникновения спроса обрабатывают­ся изменения, необходимые для его представления.

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

Если уровень запасов I(t) на время оценки составляет, по меньшей мере, s, за­каз не размещается, и происходит лишь планирование следующего события оцен­ки запасов в списке событий. Однако, если I(t) < s, потребуется поместить заказ на [S - I(t)] товаров. Для этого количество заказанного товара [S - I(t)] сохраняется до тех пор, пока не прибудет заказ и не будет запланировано время поступления заказа. В этом случае мы планируем следующим событием оценку запасов.

Как и в модели системы массового обслуживания, так и в модели системы управления запасами удобнее отдельно выделить программу для обновления на­копителей статистики непрерывного времени, хотя в данной модели это сделать труднее. Блок-схема такой программы приведена на рис. Основной вопрос в данном случае заключается в следующем: нужно ли нам обновлять площадь подфункциями I+(t) и I-(t). Если в результате последнего события уровень запасов стал отрицательным, значит, в системе есть отложенные поставки, следовательно,
должна быть обновлена только площадь под функцией I-(t). Если уровень запасов положительный, нужно обновить только площадь под функцией I+(t). Если же уровень запасов равен 0 (что возможно), обновление не требуется. В коде этой программы на обоих языках значение переменной времени последнего события также меняется на текущее время. Указанная программа будет вызываться из ос­новной программы сразу после того, как синхронизирующая программа возвратит управление, независимо от типа события, а также от того, действительно ли уро­вень запасов изменился на данный момент. Таким образом, обеспечивается простой (хотя и не самый эффективный в плане вычислений) способ обновления ин­тегралов статистики непрерывного времени.