Generator
A generator puts demand into your model. Pick how work arrives, and connect the generator to the first step.
What it is
A generator creates entities and sends them into the process along its connectors. A model has one generator for each separate stream of arrivals.
The question it helps answer
What does demand really look like? Average volume hides the Monday morning spike that overruns the team. A generator lets you test the bunching and the peaks as well as the total.
How it behaves
Choose one of three types.
- Rate creates entities on a repeating interval. Set Inter-arrival Duration to the time between arrivals. A constant interval is steady. Exponential gives random arrivals, which suits walk-ins and calls. The first arrival comes at the start of the run, or after Start Delay if you set one. Each gap after that is drawn fresh.
- Pattern spreads a Volume of entities over a repeating year, week or day, using shapes you draw for Season, Week and Day. Use it for seasonal or weekly demand curves. It needs a model on real dates: Time Mode set to calendar on the Model. Advanced view.
- Schedule creates entities at the exact times you list, such as a surgery list or appointment book. Each row can set its own entity, quantity and state values. Row order doesn't matter, because rows run in time order. Advanced view.
New entities leave a generator the same way they leave an activity. With several connectors, the Connect Type on the Routing tab picks one. State values are set first, so routing can read them.
A generator doesn't wait for the work it creates. If the first step is full, arrivals keep coming on time and the line builds.
How Pattern sets arrivals
Each hour gets a share of Volume, based on its Season, Week and Day weights. Volume belongs to the calendar cycle: January to December for Year, Monday to Sunday for Week, and midnight to midnight for Day.
Your run only gets the hours it covers. If it starts partway through an hour, that hour's arrivals before the start aren't created, rather than all arriving at the start. With a Volume of 8,500 on a Year cycle, a four-week run gets about four weeks' share, not 8,500. A run of two full Week cycles gets twice the Volume. Arrivals during a warm-up are created like any others.
Count Mode sets how much the arrivals vary. Poisson draws a random count for each hour around that hour's share, so totals change between replications. Exact adds up the shares and releases whole entities, carrying any fraction into the next hour, so the count doesn't vary and a full cycle delivers a whole-number Volume exactly. A fraction left when the run ends isn't released: a week's share of 6.98 creates 6. In both modes, each arrival lands at a random moment within its hour.
Properties
Select a generator's shape to open its editor. The Basic, Routing and Levers tabs show in every complexity view. The States tab needs the Intermediate view. Anything else that depends on a view says so below.
A view only changes what you can edit, never what runs. If a generator uses something your view hides, a line under the tabs names it, such as This uses a pattern-based arrival, hidden in Basic, with a link to switch views.
Basic tab
| Property | What it does |
|---|---|
| Name | Names the generator. An empty name or one another generator uses shows an inline message, and validation flags it. |
| Type | Rate, Pattern or Schedule. Default Rate, the only choice below the Advanced view. A Pattern or Schedule type already set stays, shown disabled, in a lower view, and keeps running. |
| Entity | The entity type this generator creates. New generators use the default entity, or the model's first type if it has no default entity. With (no entity selected), validation stops the model. |
The rest of this tab depends on Type.
Rate fields
| Property | What it does |
|---|---|
| Inter-arrival Duration | The time between one arrival and the next. A distribution (Constant, Exponential, Normal, Triangular or Uniform) and a Time Unit, drawn fresh each time. New generators start at Exponential with a Mean of 5 minutes in draw.io, or 1 hour in Lucidchart. A Constant of 0 stops the model unless Max Entities or Periodic Occurrences limits the arrivals, and so does a distribution that can only give zero, such as a Normal with mean 0 and standard deviation 0. A time below zero counts as zero. |
The rest are in the collapsed Advanced section, which needs the Intermediate view.
| Property | What it does |
|---|---|
| Periodic Occurrences | How many times the generator fires. Each firing creates Entities Per Creation. 999999 means unlimited, which is the default, and clearing the box returns to it. The minimum is 1: validation stops the model. To turn a generator off, set Max Entities to 0. |
| Start Delay | Time to wait before the first arrival. A distribution and a Time Unit, drawn once per replication. Default a constant 0, so the first arrival comes at the start of the run. |
| Entities Per Creation | How many entities arrive together each time it fires. Whole number, default 1, from 1 to 1000. The interval runs from one batch to the next. |
| Max Entities | Most entities this generator creates in a replication, across all occurrences. 999999 means unlimited, which is the default, and clearing the box returns to it. 0 turns the generator off. Otherwise up to 1000000. If this runs out partway through a batch, the batch stops there. Entities created during a warm-up count. |
The generator stops at whichever limit it reaches first.
Pattern fields
Pattern needs the Advanced view to select, and a model with Time Mode set to calendar. In a clock model, which is the default, validation stops the model.
At the top, two plain sentences sum up the pattern, such as About 1,000 arrivals per year, with the exact count varying randomly (Poisson). These describe one full cycle, not your run.
| Property | What it does |
|---|---|
| Volume | Entities spread over one full cycle. Starts at 1000 when you switch to Pattern. It must be above 0: the box accepts 0, but validation stops the model. |
| Cycle | How often the pattern repeats: Year, Week or Day. Default Year. Year uses all three bands. Week turns off Season. Day turns off Season and Week. |
| Count Mode | How each hour's count is set: Poisson, the default, or Exact. See How Pattern sets arrivals. |
| Open full-width view | Opens the Arrival Pattern window, which holds these three fields and the Season, Week and Day bands below. In draw.io, its Size list sets the window size. |
| ≈ entities expected | The line at the bottom estimates how many entities your run will create. Without a run window, as in a clock model, it says one full cycle (no run window set yet). That doesn't mean the model can run. |
In the Arrival Pattern window, each band is a row of bars. A bar's height is its share, relative to the others in that band. A band starts flat. A preset replaces the whole band, except on Day.
| Band | What it does |
|---|---|
| Season | Year cycle only. How demand moves across the year, in 12 months or 52 weeks. Weeks are ISO weeks, which start on a Monday, so the first days of a year can belong to the last week of the year before. In a year that has a week 53, those days use the weight of week 52. New patterns start at 12 months. Switching resets Season to flat. Presets: Flat, Winter peak, Summer peak, plus Q4 heavy for 12 months. |
| Week | Year and Week cycles only. How demand moves from Monday to Sunday. Presets: Flat, Weekday-heavy, Weekend-heavy, Mon–Fri only. |
| Day | How demand moves across the 24 hours of the selected day. Presets: Flat, Business hours, Morning peak, Evening peak, Bimodal. On Year and Week cycles, a change affects the selected day only. Copy to all days applies the day you're looking at to all seven. On a Day cycle, every change applies to all seven. |
| Weight, Percent, Entities | Each band's toggle shows the same bars as relative weights, as a share of the year, week or day, or as entity counts. Default Entities. |
Click a bar to select it without changing it. Drag a bar, or type in the box under it, to change it. Selecting a Season bar rescales the counts shown in Week, and selecting a Week bar picks the day shown in Day. Selecting never changes a shape.
Switching Type away from Pattern deletes the shape you drew. Switching back starts flat.
Schedule fields
Schedule needs the Advanced view to select. The tab shows the row count and time span. Open Schedule Editor opens the Arrival Schedule window. Validation stops the model until the schedule has at least one row.
| Property | What it does |
|---|---|
| Name | Names the schedule. Starts as the generator's name plus "schedule". |
| Time Unit | Clock models only. The unit of the Time column. Default minutes. |
| Time | When the arrival happens. In a clock model, a number from 0 up, counted from the start of the run. In a calendar model, a date and time such as 2026-06-08T07:30. The column heading shows which, such as Time (Min) or Time (date). |
| Entity | The entity type for this row. (generator's entity), the default, uses the Entity on the Basic tab. |
| Qty | How many entities arrive at this time. Whole number, 1 or more. Blank means 1. |
| State columns | One column for each state in the model, setting that state on this row's entities. Blank leaves it alone. A number state needs a number, a boolean state needs true or false, and a category state needs one of its values. Validation flags a value that doesn't fit. |
| Add row | Adds a row one Time Unit after the last one. The first row starts at 0, or at the model's Start Date. |
| Delete | Removes that row. |
| Paste schedule | Imports rows from a spreadsheet. Tab- or comma-separated, and the first line must be a header. Columns are Time (or DateTime, or Arrival), which is required, plus Entity, Qty (or Quantity) and any state name. Entities and states match by name, ignoring case. A column it doesn't recognize fails every row, and a blank Entity or Qty fails that row. A preview shows how many rows parsed and lists any errors. |
| Replace, Append | Nothing imports until you click one. Replace swaps out all rows. Append adds to the end. Each shows how many rows it will import, and rows with errors are left out. |
A row before the start of the run, after its end or exactly at its end never fires. It's skipped, not moved to the nearest moment in the run. Validation warns you with a count. A row whose Time doesn't suit the model's Time Mode stops the model.
The Model editor's Arrivals tab, in the Advanced view, lists every pattern and schedule in the model. Use it to delete one left behind that no generator uses.
States tab
This tab needs the Intermediate view. Below that, the tab is hidden and any values you've set still apply.
| Property | What it does |
|---|---|
| Initial State Modifications | State values set on each entity as it's created, such as a priority or customer type, for every Type. Add modification opens a form with a State, an Operation and a value. On a Schedule, a row's own values are applied after these. See State. |
With no states in the model, the tab links to the Model editor's States tab. Use entity or model states here. A resource or activity state stops the model, because a new entity has no resource or activity to change.
Routing tab
This tab sets how new entities choose between the generator's outgoing connectors. It shows one card per connector under Outgoing Connectors, named with its destination and its current share, rank or rule. Open a card to reach its move time. A generator needs at least one connector, or validation stops the model. Connector explains each rule.
| Property | What it does |
|---|---|
| Connect Type | The routing rule. Default Probability, the only choice in the Basic view. State Condition, Entity Template and First Available arrive at Intermediate. A rule already set stays, shown disabled, in a lower view. Disabled with one or no outgoing connector, because there's nothing to choose. |
| Weight | Probability only. Relative share, with the resulting percentage beside it. Default 1. |
| State Condition | State Condition only. The test for this connector. |
| Entity Template | Entity Template only. The entity type this connector carries. On a Rate or Pattern generator, a notice warns that every entity takes the same connector. |
| Priority | First Available only. Order of preference, lower goes first. Default 1. |
| Move time | Inside an open card. Travel time along the connector. |
Levers tab
Tick a setting to mark it as a lever, then give it a Label, a Sweep and a min, max and step. Settings are grouped under Demand. The tab lists only what applies to this generator's Type.
| Property | What it does |
|---|---|
| Inter-arrival duration | Rate. Marks the time between arrivals to vary. A sweep here can work on the rate: see the caution on Levers. |
| Entities per creation | Rate, Intermediate view. The same, for batch size. |
| Periodic occurrences | Rate, Intermediate view. The same, for how many times it fires. |
| Max entities | Rate, Intermediate view. The same, for the cap. Pattern and Schedule generators ignore the cap, so the tab doesn't list it for them. A lever you already saved on one stays in the list, greyed out. |
| Volume | Pattern. The same, for Volume. |
Start Delay has no lever. A Schedule generator below the Intermediate view has nothing to list, so the tab reads No levers apply to this element's current settings. A lever you've already saved keeps its row, greyed with the reason, if its setting stops applying.
Example
A clinic sees about 10 walk-ins an hour, at random. Set Type to Rate, set Entity to Patient, and set Inter-arrival Duration to Exponential with a Mean of 6 minutes. Connect the generator to Triage.
Now say the clinic also has booked appointments. In the Advanced view, add a second generator with Type set to Schedule, and paste the day's list. Both streams feed the same Triage shape, and you can see how walk-ins and appointments compete.
Common mistakes
- Typing a rate into Inter-arrival Duration. It's the time between arrivals, not arrivals per hour. 10 an hour is a 6-minute mean.
- Using a constant interval for random demand. Evenly spaced arrivals don't bunch, so your queues will look smaller than they are.
- Using Entity Template routing on a Rate or Pattern generator. It creates one entity type, so every entity takes the same connector. The side panel warns you. Use Schedule or Probability instead.
- Leaving Max Entities at 0 on a Rate generator. The generator creates nothing.
- Choosing Pattern in a clock model. Pattern needs real dates. Set Time Mode to calendar on the Model first.
- Expecting all of Volume in a short run. Volume covers a full cycle. A week's run of a Year cycle gets about a week's share. Check the expected line at the bottom of the fields.
- Applying a Day preset once. On Year and Week cycles it changes the selected day only. Use Copy to all days.
- Changing Time Mode after building a schedule. Clock rows hold numbers and calendar rows hold dates, so every row then needs a new Time.