ModelRisk Optimizer example · Logistics
Parcel Hub: Sorter Chute Balancing
Which chute should each parcel go to, so the busiest chute finishes as early as possible?
The optimisation problem
Shortest mean makespan
- Decide
- A chute for each of 16 parcels (6 chutes)
- Goal
- Shortest mean makespan
- Limit
- None
- Engine
- Genetic Algorithm
What the Optimizer found
| Starting plan | Optimizer’s plan | |
|---|---|---|
| Decisions changed | – | 11 of 16 |
| Goal: Mean makespan (busiest chute load) | 265 | 126 |
All 16 decisions starting plan, then the Optimizer’s
| Parcel 1 | 0 | 1 |
|---|---|---|
| Parcel 2 | 1 | 2 |
| Parcel 3 | 2 | 0 |
| Parcel 4 | 3 | 5 |
| Parcel 5 | 4 | 4 |
| Parcel 6 | 5 | 0 |
| Parcel 7 | 0 | 0 |
| Parcel 8 | 1 | 1 |
| Parcel 9 | 2 | 2 |
| Parcel 10 | 3 | 4 |
| Parcel 11 | 4 | 4 |
| Parcel 12 | 5 | 3 |
| Parcel 13 | 0 | 2 |
| Parcel 14 | 1 | 3 |
| Parcel 15 | 2 | 3 |
| Parcel 16 | 3 | 5 |
ModelRisk Optimizer run on 13 Oct 2026: the Genetic Algorithm engine, with Turbo simulation, tried 897 plans, each simulated with 10,000 samples, in 8 seconds. Both plans above were then simulated again with the same 10,000 samples.
What the workbook models
This workbook showcases the ModelRisk optimizer on a COMBINATORIAL assignment problem. Routing 16 parcels to 6 chutes gives 6^16 (about 2.8 x 10^12) possible layouts — far too many to enumerate, even though the sheet itself is small. Method = Auto detects the combinatorial assignment GROUP and routes the model to the GENETIC ALGORITHM (GA).
That routing is structural, not a tuning preference: any Order / Project / Schedule group goes to GA, because the engine has to preserve the group structure while it searches.
GA carries a whole population of candidate layouts and recombines their good parts, so it keeps finding better assignments across the run.
The problem is deliberately sized so a classic (non-Turbo) run finishes in minutes rather than hours: the search ends on stagnation or on the trial budget (1000 trials, stagnation after 450), and the Time (max) limit of 1800 s is only a safety net.
Decision, objective and constraint
- Decision
- 16 integer chute assignments (Model!B7:B22), each 0 to 5 — a Schedule (assignment) group
- Objective
- Minimise the Mean makespan = Mean of MAX(chute loads), Model!F14
- Constraint
- None — any assignment is valid (a chute may take many parcels)
Why the Genetic Algorithm
Parallel-machine makespan (P||Cmax) is NP-hard and rugged: moving one parcel to a lighter chute usually just makes that chute the new bottleneck, so a search that changes one coordinate at a time can settle into a local trap. GA works on whole layouts instead: it recombines two good chute plans and repairs the result, which lets it leave traps that a single move cannot.
The routing itself does not depend on which engine wins a particular instance: Method = Auto sends ANY model carrying an Order, Project or Schedule group to GA, because that engine keeps the group structure valid while it searches. A Schedule group is many-to-one, so every assignment here is already valid.
The model
Route 16 parcels to 6 sorter chutes so the busiest chute closes as early as possible.
InputDecision (the Optimizer changes it)Calculated or uncertain (sampled each iteration)Objective
Parcels (decision = chute 0 to 5; sizes are uncertain, low spread)
| Parcel | Chute (dec) | Handle time s (unc.) | Chute | Load |
|---|---|---|---|---|
| Parcel 1 | 0 | uncertain | 0 | calculated |
| Parcel 2 | 1 | uncertain | 1 | calculated |
| Parcel 3 | 2 | uncertain | 2 | calculated |
| Parcel 4 | 3 | uncertain | 3 | calculated |
| Parcel 5 | 4 | uncertain | 4 | calculated |
| Parcel 6 | 5 | uncertain | 5 | calculated |
| Parcel 7 | 0 | uncertain | ||
| Parcel 8 | 1 | uncertain | Makespan = busiest chute load — objective (Min Mean) | calculated |
| Parcel 9 | 2 | uncertain | ||
| Parcel 10 | 3 | uncertain | ||
| Parcel 11 | 4 | uncertain | ||
| Parcel 12 | 5 | uncertain | ||
| Parcel 13 | 0 | uncertain | ||
| Parcel 14 | 1 | uncertain | ||
| Parcel 15 | 2 | uncertain | ||
| Parcel 16 | 3 | uncertain |
Decision cells hold starting values: the workbook opens at the starting plan above, and the Optimizer finds its plan when you run it. The figures are illustrative.
Run it yourself. Open the workbook with ModelRisk, open the Optimizer from the ribbon (the saved task opens with it) and press Start.
How to run it
- ModelRisk ribbon to Optimizer (the saved task opens).
- Start Optimization.
- Read the chute assignments in B7:B22 and the Mean makespan in F14.
Find similar models
- Product
- Type
- Application
- Uses
Download the workbook and run the Optimizer. It opens in Excel with ModelRisk.
Related example models
- ModelRiskOptimizer★★★★★Museum: Exhibit Tour SequencingWhich viewing slot should each exhibit occupy so the crowd spreads evenly through the day?Assigns 14 exhibits to eight tour slots so the crowd is as even as possible through the day.
- ModelRiskOptimizer★★★★★Render Farm: Frame DistributionWhich render node should each shot go to, so the busiest node finishes as early as possible?Assigns 20 shots to six render nodes so the busiest node finishes as early as possible.
- ModelRiskOptimizer★★★★★Stadium Egress: Gate-Lane StaffingHow many lanes to open at each gate so the crowd clears within 8 minutes on 95% of nights?Staffs the lanes at six gates at the lowest mean cost, so the crowd clears within eight minutes on 95% of nights.
An illustrative example: the figures are invented for teaching. Last updated 9 October 2026.