When Will You Need This?

When you want entities to exit a hold queue (or route to a different location) if entities wait longer than a value you set. To calculate the percentage of calls that meet or exceed a service level time you specify, or to randomizes the order in which the resources are selected.

Renege, SLA, Rand model image

Model Object

The following model object can be found in the model objects directory: Misc \ Renege, SLA, Rand.

Ease of Use: Moderate

Ease of Modification: Moderate

How to Use the Model Object

1. Open Your Model

Open your model or create a new blank model.

2. Insert the Model Object into Your Model

1. Locate the model object Renege, SLA, Rand and select the insert button.

2. Move the cursor to the point of insertion and left mouse-click. The upper left corner of the model object will be inserted at the location of the mouse-click.

3. Connect to Your Model

1. Connect an arrival route or a percentage route from the part of your model where you would like the entities to enter the model object to Hold Queue1.

from your arrivals to Renege, SLA, Rand

2. Connect the percentage route leaving After Call Time1 to the rest of your model.

from Renege, SLA, Rand to the rest of your model

4. Update Objects

1. Change the distributions for On Call Time1 and After Call Time1 in the activities.

change activity times in Renege, SLA, Rand

2. Change the names of Hold Queue1, On Call Time1, and After Call Time1 to what maybe appropriate for your model.

3. Change the names of the resources to match your organization.

This requires changing the name of the resource and changing each instance of that resource name in the action logic of the hold queue.

update resource logic in Renege, SLA, Rand

5. Define Values

1. Define the values for scenario parameters s_LoopDelaySec1, s_MaxWaitMin1, and s_SLA_Time_Min1 based on the information provided under the heading Scenario Parameters below. The values for these Scenario Parameters must be provided before the simulation start.

change scenario values in Renege, SLA, Rand

6. Completion

The model object is now integrated into your model, you should now be able to save and then simulate the model.

Attributes, Variables, Scenario Parameters and Scenarios Usage


1.  a_MaxWait1: Do not change. Entity specific allowed wait time.

2. a_Renege1: Do not change. Renege counter, -1 = continue to hold 0 = process entity, 1 = renege entity.

3. a_StartWait1: Do not change. Time when the entity began waiting.

4. a_TotalWait1: Do not change. The total amount of time that an entity waited in the hold queue.

5. a_VATime: Do not change. The value added time at the start of the hold.


1. v_Call_Count1: Do not change. Total calls counted at this queue. A customer that reneges before the specified Service Level Agreement (SLA) that call is removed from the total call count.

2. v_Call_Count_Within_SLA1: Do not change. The count of calls that were answered under the specified SLA (s_SLA_Time_Min1).

3. v_SLA_Percent1: Do not change. The percentage of calls that are handled under the SLA time.

4. v_OnCallTime1: Do not change. Reporting of each call time to a variable (can be plotted).

5. v_AfterCallTime1: Do not change. Reporting of each after call time to a variable (can be plotted).

Scenario Parameters:

1. s_LoopDelaySec1: User input required. Number of seconds to wait before testing loop repeats (this number can be less than 1 but must be greater than 0 to prevent an endless loop).

2. s_MaxWaitMin1: User input required. Maximum allowed waiting time (could be a distribution).

3. s_SLA_Time_Min1: User input required. The maximum time the Service Level Agreement (SLA) allows for a call to be answered and counted as meeting the SLA.

Advance Topics

How Do I Build This Model Object from Start?

Set an attribute equal to the current simulation clock time using the Clock( ) function in the Hold Queue1 action logic. This sets the start time of the wait timer.

Using a While . . . Do loop in Hold Queue1 action logic, check the wait time by subtracting the starting time from the current time. If the current wait time is greater than the maximum allowed wait time, set an attribute to follow the renege route and exit the loop.

Also, inside the loop, check for the availability of the needed resources and capacity in the Process Items activity. If a resource is available and there is capacity, send the entity to the activity to be processed. Otherwise, continue looping until either the requirements are met, or the maximum wait time is met or exceeded.

How Do I Change the Number of Resources Used?

Changing the number of resources used to answer calls for this call queue requires changing the action logic in Hold Queue1. For example if a sixth resource was added the logic would need to be modified as follows (modifications in bold):

Inc v_Call_Count1

a_StartWait1 = Clock()

a_MaxWait1 = s_MaxWaitMin1

a_VATime = VATime

a_Renege1 = -1

While a_Renege1 = -1 Do


a_TotalWait1 = Clock() – a_StartWait1

If a_TotalWait1 >= a_MaxWait1 Then {a_Renege1 = 1}

Else If (FreeUnits(Worker1) > 0 Or FreeUnits(Worker2) > 0 Or FreeUnits(Worker3) > 0 Or FreeUnits(Worker4) > 0 Or FreeUnits(Worker5) > 0 Or FreeUnits(Worker) > 0) Then


Inc v_CallRandomizer1

If v_CallRandomizer1 = 6 Then {v_CallRandomizer1 = 1} // From 5 to 6.

If v_CallRandomizer1 = 1 Then {Get Worker1 or Worker2 or Worker3 or Worker4 or Worker5 or Worker6}

Else If v_CallRandomizer1 = 2 Then {Get Worker2 or Worker3 or Worker4 or Worker5 or Worker6 or Worker1}

Else If v_CallRandomizer1 = 3 Then {Get Worker3 or Worker4 or Worker5 or Worker6 or Worker1 or Worker2}

Else If v_CallRandomizer1 = 4 Then {Get Worker4 or Worker5 or Worker6 or Worker1 or Worker2 or Worker3}

Else If v_CallRandomizer1 = 5 Then {Get Worker5 or Worker6 or Worker1 or Worker2 or Worker3 or Worker4}

Else {Get Worker6 or Worker1 or Worker2 or Worker3 or Worker4 or Worker5}

a_Renege1 = 0


Else Time(s_LoopDelaySec1 Sec)


VATime = a_VATime