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) |