Overview
Any numeric field that varies run-to-run — processing times, arrival rates, entity attribute values, resource requirements, Resource changeover times — can be drawn from a probability distribution instead of a fixed number. Distributions let a model reflect real-world variability: cycle times that vary, demand that clusters and lulls, processing durations with realistic long tails. Open the distribution picker on any numeric field and choose from ten options: Fixed, Normal, Exponential, Uniform, Lognormal, Weibull, Triangular, Erlang, Beta, Gamma. Each choice reveals its own set of parameter fields below the picker. Every parameter field renders as aDDD:HH:MM:SS time picker by default. Click the </> toggle next to any parameter to flip that field into expression mode and type a DSL expression instead — that’s how you make variability depend on simulation state, constants, or entity attributes.
The distribution choice and its parameter shape are static configuration. Individual parameter values can be literals or expressions, mixed freely.
Every parameter field uses the
DDD:HH:MM:SS time picker by default, even for dimensionless parameters like Beta’s shape parameters, Weibull’s shape, or Lognormal’s σ. The widget is the same regardless of unit; in non-time contexts treat the value as a plain number. The </> toggle still gives you a free-form expression input when you need it.Supported Distributions
Fixed
A deterministic value. Technically not a distribution, but included for consistency so every numeric field uses the same picker. Parameters- Value — the constant the field always resolves to. Defaults to
0.0.
Normal
The classic bell curve — symmetric around a mean, spread controlled by standard deviation. Parameters- Mean — center of the distribution.
- Standard Deviation — spread around the mean.
Exponential
Time between memoryless events. Higher concentration near zero, long tail. Parameters- Beta — the mean (equivalently, 1 over the rate). Despite the name, it’s the expected value of a sample.
Uniform
Every value between the bounds is equally likely. Flat distribution. Parameters- Lower Bound — minimum sample value.
- Upper Bound — maximum sample value.
Lognormal
A log-transform of a normal distribution — right-skewed, strictly positive, with a long right tail. Parameters- Mu — mean of the underlying normal distribution (before the log transform), not of the lognormal itself.
- Sigma — standard deviation of the underlying normal distribution.
Weibull
Flexible distribution that can model increasing, constant, or decreasing hazard rates depending on its shape parameter. Parameters- Shape — controls how the hazard rate evolves with elapsed time.
- Scale — characteristic magnitude of the samples.
Triangular
A simple three-point distribution. Parameters- Lower Bound — minimum possible value.
- Upper Bound — maximum possible value.
- Mode — most likely value, between the bounds.
Erlang
Sum of Shape independent exponential random variables, where Shape must be a positive integer. Parameters- Shape — number of exponential stages summed (positive integer; the field doesn’t visibly reject non-integer entry, but backend validation does).
- Scale — mean of each underlying exponential stage.
Beta
Distribution on the interval [0, 1], flexibly shaped by two parameters. Parameters- Alpha — first shape parameter.
- Beta Parameter — second shape parameter. (The label is spelled out to avoid confusion with the Beta distribution name itself.)
Gamma
General-purpose continuous distribution for positive quantities, controlled by two parameters. Parameters- Alpha — shape parameter.
- Beta — scale parameter. (The engine uses
gammavariate(alpha, beta)withbetaas scale, so the mean is α·β.)
Choosing a Distribution
If you have real data, fit a distribution to it. If you don’t:| You know… | Use |
|---|---|
| The exact value | Fixed |
| Mean and symmetric variability, value can be any sign | Normal |
| Only the bounds, no reason to favor any region | Uniform |
| Mean only, memoryless event timing | Exponential |
| Three-point estimate (min/mode/max) | Triangular |
| Positive, skewed right, one “typical” value with long tail | Lognormal or Gamma |
| Proportion / probability with variability | Beta |
| Time-to-failure with a hazard rate that changes over time | Weibull |
| Sum of exponential stages | Erlang |
Parameterizing with DSL Expressions
Each parameter field has a</> toggle next to its label. Click it and the time picker is replaced by a single-line text input where you type a DSL expression — references to constants, state variables, entity attributes (where the context allows), or composed expressions. Toggle back to revert to the time-picker entry mode.
A parameter in expression mode might hold:
base_time * complexity_factor— scale a Normal distribution’s Mean by an entity-level complexity factor while leaving Standard Deviation as a literal.LOOKUP(mean_interarrival_by_shift, current_shift)— drive an Exponential distribution’s Beta from a shift-indexed lookup table.LOOKUP(log_mean_weight_by_product, ENTITY_TYPE)— pick a Lognormal Mu per product type while keeping Sigma fixed.
Tips
- Draw from the distribution at use time, not at entity creation time. For processing times especially, sample the distribution when the Process runs — not as an entity attribute set at the Source. This keeps the sample close to the state it should depend on.
- Normal isn’t always the answer. It’s familiar but it can produce negative samples. For strictly positive quantities, prefer Lognormal, Gamma, or truncated alternatives.
- Check parameter labels carefully. Different distributions reuse names even when the mathematical concept is similar — Exponential’s Beta is a mean, Gamma’s Beta is a rate/scale, and Beta’s Beta Parameter is a shape. The picker’s labels are the source of truth.
- Match distribution to data when possible. A fitted distribution on real MES cycle times will give much more realistic results than an assumed parametric one.
- Use Fixed to simplify initial modeling. Start with fixed values to verify the structure, then swap in distributions once the model is correct.

