Classification tags: business operations management, DES, next-event time progression
The potentially relevant object types are:
Potentially relevant types of events are:
These object and event types, with their participation associations, can be visually described in a UML class diagram, as shown below.
If a demand is greater than the current stock level, the difference counts as a lost sale. Whenever the stock level falls below a certain threshold (called reorder point)), the shop places a replenishment order with a quantity computed as the difference between an upper threshold (called target inventory) and the current stock level.
ON (event type) | DO (event routine) | Conceptual Event Rule Diagram |
---|---|---|
customer order | if there is sufficient inventory, then product handover, else customer departure | |
product handover | customer payment | |
customer payment | customer departure |
The random variation of the lead time between a replenishment order and the corresponding delivery
is modeled by a random variable with a uniform probability distribution between 1 and 3 days.
The inventory is modelled as an object with three attributes: productQuantityInStock
,
reorderPoint
and targetInventory
. For simplicity, the model does not create
replenishment order events, but instead it only schedules corresponding delivery events.
Consequently, we model just one object type: SingleProductShop
, with three attributes
quantityInStock
(NonNegativeInteger), reorderPoint
(NonNegativeInteger),
and targetInventory
(PositiveInteger). In addition, we model two event types:
DailyDemand
as an exogeneous event type with one attribute: quantity
(PositiveInteger),
and with the random variable function sampleQuantity
and, as an exogeneous event type,
with a recurrence
function.Delivery
as a caused event type with one attribute: quantity
(PositiveInteger),
and with the random variable function sampleLeadTime
.When the design model is implemented with an object-oriented programming language or framework,
the participation associations between DailyDemand
and SingleProductShop
, as well as
between Delivery
and SingleProductShop
, are represented with the corresponding
reference properties shop
and receiver
. This is also the case when using the Object Event
Simulation (OES) framework OESjs available from Sim4edu,
where all object types are derived from the pre-defined OES category oBJECT
and all event types are derived from the pre-defined OES category eVENT
,
as shown in the following diagram:
oBJECT
and eVENT
.ON (event type) | DO (event routine) |
DailyDemand( demQuant) @ t |
IF demQuant <= shop.quantityInStock THEN IF shop.quantityInStock − demQuant < shop.reorderPoint AND shop.quantityInStock > shop.reorderPoint THEN SET ordQuant TO shop.targetInventory − shop.quantityInStock - demQuant SCHEDULE Delivery( ordQuant) @ t + sampleLeadTime() DECREMENT shop.quantityInStock BY demQuant ELSE (if demQuant > shop.quantityInStock) INCREMENT shop.lostSales BY demQuant − shop.quantityInStock SET shop.quantityInStock TO 0 |
Delivery( delQuant) @ t |
INCREMENT receiver.quantityInStock BY delQuant IF receiver.quantityInStock <= receiver.reorderPoint THEN SET ordQuant TO receiver.targetInventory − receiver.quantityInStock SCHEDULE Delivery( ordQuant) @ t + sampleLeadTime() |