Quodsi Docs

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.

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

PropertyWhat it does
NameNames the generator. An empty name or one another generator uses shows an inline message, and validation flags it.
TypeRate, 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.
EntityThe 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

PropertyWhat it does
Inter-arrival DurationThe 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.

PropertyWhat it does
Periodic OccurrencesHow 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 DelayTime 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 CreationHow 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 EntitiesMost 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.

Max Entities applies to Rate only. A Pattern or Schedule generator ignores it, including a value of 0 and any value left from when it was a Rate generator. A what-if that changes it on one of those generators has no effect.

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.

PropertyWhat it does
VolumeEntities 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.
CycleHow 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 ModeHow each hour's count is set: Poisson, the default, or Exact. See How Pattern sets arrivals.
Open full-width viewOpens 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 expectedThe 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.

BandWhat it does
SeasonYear 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.
WeekYear and Week cycles only. How demand moves from Monday to Sunday. Presets: Flat, Weekday-heavy, Weekend-heavy, Mon–Fri only.
DayHow 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, EntitiesEach 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.

With 12 months selected, the Entities counts on Week and Day show a typical week of the selected month.

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.

PropertyWhat it does
NameNames the schedule. Starts as the generator's name plus "schedule".
Time UnitClock models only. The unit of the Time column. Default minutes.
TimeWhen 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).
EntityThe entity type for this row. (generator's entity), the default, uses the Entity on the Basic tab.
QtyHow many entities arrive at this time. Whole number, 1 or more. Blank means 1.
State columnsOne 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 rowAdds a row one Time Unit after the last one. The first row starts at 0, or at the model's Start Date.
DeleteRemoves that row.
Paste scheduleImports 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, AppendNothing 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.

PropertyWhat it does
Initial State ModificationsState 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.

PropertyWhat it does
Connect TypeThe 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.
WeightProbability only. Relative share, with the resulting percentage beside it. Default 1.
State ConditionState Condition only. The test for this connector.
Entity TemplateEntity Template only. The entity type this connector carries. On a Rate or Pattern generator, a notice warns that every entity takes the same connector.
PriorityFirst Available only. Order of preference, lower goes first. Default 1.
Move timeInside 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.

PropertyWhat it does
Inter-arrival durationRate. Marks the time between arrivals to vary. A sweep here can work on the rate: see the caution on Levers.
Entities per creationRate, Intermediate view. The same, for batch size.
Periodic occurrencesRate, Intermediate view. The same, for how many times it fires.
Max entitiesRate, 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.
VolumePattern. 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

Related pages