Classification tags: business operations management, DES, next-event time progression, activity-based process modeling
There are three order processing activities: the order taking, the order preparation and the order pickup, all of which are performed by business units that have queues: the menu board for order taking, the kitchen for order preparation and the pickup window for picking up orders.
The potentially relevant object types are:
Potentially relevant types of events are:
Notice that order taking, order preparations and order pickups are activities, which consist of a start and an end event.
ON (event type) | DO (event routine) |
customer arrival | If the order window is busy, then the newly arrived customer queues up, else a new order taking activity for this customer starts. |
end of order taking activity | If the pickup window is busy, then the customer queues up, else a new order pickup activity for this customer starts. If there are still customers waiting in the menu board queue, the next order taking activity starts. |
end of pickup activity | The served customer departs. If there are still customers waiting in the pickup window queue, the next pickup activity starts. |
A computational design for the purpose of computing the two statistics maximum queue length and utilization is obtained by modeling the following types of objects, events and activities:
MenuBoard
with a (multi-valued) reference property waitingCustomers
representing its queue, and two reference properties kitchen
and pickupWindow
for enabling the menu board to access the queues of the kitchen and the pickup window.Kitchen
with a (multi-valued) reference property waitingOrders
representing its queue, a multi-valued reference property preparedOrders
representing
the set of prepared orders and a reference property menuBoard
for enabling the kitchen
to access the queue of the menu board.PickupWindow
with two multi-valued reference properties waitingCustomers
representing its queue and preparedOrders
representing the set of prepared orders, and a
reference property menuBoard
for enabling the kitchen to access the queue of the menu board.Customer
with an attribute arrivalTime
for recording the customer's
arrival time such that the time in system can be computed.CustomerArrival
with a reference property orderWindow
having the class OrderWindow
as range. As an exogenous event type, CustomerArrival
has a recurrence
function representing a random variable for computing the time in-between
two subsequent event occurrences.OrderTaking
has a resource association with the object type
MenuBoard
and a randomDuration
function.OrderPreparation
has a resource association with Kitchen
and a randomDuration
function.OrderPickup
has a resource association with PickupWindow
and a randomDuration
function.For all activity types the simulator computes the utilization of their resources.
ON (event type) | DO (event routine) |
CustomerArrival( ow) @ t |
INCREMENT ow.queueLength IF ow.queueLength = 1 THEN SCHEDULE ActivityStart("OrderTaking", ow) @ (t+1) |
ActivityEnd("OrderTaking", a) @ t |
SET cust = POP( a.orderWindow.waitingCustomers) SET ordPrepDuration = OrderPreparationEnd.randomDuration() SET pickupWindowQueue = a.orderWindow.pickupWindow.waitingCustomers SCHEDULE OrderPreparationEnd( cust.orderNo) @ (t + ordPrepDuration) PUSH cust TO pickupWindowQueue IF pickupWindowQueue.size = 1 THEN SCHEDULE ActivityStart("OrderPickup", a.orderWindow.pickupWindow) @ (t+1) IF a.orderWindow.waitingCustomers.size > 0 THEN SCHEDULE ActivityStart("OrderTaking", a.orderWindow) @ (t+1) |
ActivityEnd("OrderPreparation", a) @ t |
SET pickupWindow = a.kitchen.pickupWindow SET orderNo = POP( a.kitchen.waitingOrders) pickupWindow.preparedOrders.add( ordNo) PUSH orderNo TO pickupWindow.preparedOrders |
ActivityEnd("OrderPickup", a) @ t |
SET cust = POP( a.pickupWindow.waitingCustomers) IF a.pickupWindow.waitingCustomers.size > 0 THEN SCHEDULE ActivityStart("OrderPickup", a.pickupWindow) @ (t+1) |