Manufacturing¶
11 of the bundled models. The numbers are from a run made when this page was generated: see how.
Robot cell against manual assembly¶
A short line whose assembly station is manual as saved (a MOTION cycle with a human profile, an operator at 30 per hour) and a robot cell in the scenario "Robot cell" (a robot profile and cycle, 2 per hour of maintenance, 85 000 of capex). Its investment section compares the scenario with the saved model: naga invest gives payback, NPV and ROI, and naga scenarios the throughput and cost of each. Illustrative figures.
naga run automation_cell --replications 3
flowchart LR
b0["arrive (CREATE)"]
b1["prepare (PROCESS)"]
b2["assemble (MOTION)"]
b3["test (PROCESS)"]
b4["ship (DISPOSE)"]
b0 --> b1
b1 --> b2
b2 --> b3
b3 --> b4
3 replications, seed 0:
| KPI | Mean | 95% half-width |
|---|---|---|
system/Total Entities Completed |
571 | 63 |
system/Avg Throughput Time |
183 | 97 |
system/Avg Queue Length |
2.02 | 2.1 |
system/Avg Resource Usage % |
55 | 6.1 |
system/Total Cost |
240 | 0 |
Automation floor (robot cells, AMR, palletiser)¶
Every asset of the Automation library on one floor: a robot arm cell and a cobot cell in line, an AMR shuttle to a palletiser, and mobile cobots tending a lathe. In the results, read the motion summary (each arm's cycle by phase), the fleet's trips and waiting, and the tending summary for the lathe. Illustrative figures.
naga run automation_floor
flowchart LR
b0["robot_arm_cell_1 (SUBMODEL)"]
b1["safety_zone_1 (SUBMODEL)"]
b2["cobot_cell_1 (SUBMODEL)"]
b3["palletiser_1 (SUBMODEL)"]
b4["amr_fleet_1 (SUBMODEL)"]
b5["charger_1 (SUBMODEL)"]
b6["mobile_cobot_fleet_1 (SUBMODEL)"]
b7["tended_machine_1 (SUBMODEL)"]
b8["cases (CREATE)"]
b9["Line out (STATION)"]
b10["Pallet in (STATION)"]
b11["pallets (DISPOSE)"]
b12["shuttled (DISPOSE)"]
b13["blanks (CREATE)"]
b14["Raw (STATION)"]
b15["Finished (STATION)"]
b16["parts (DISPOSE)"]
b17["tended (DISPOSE)"]
b8 --> b0
b0 --> b2
b2 --> b9
b9 --> b4
b4 --> b12
b10 --> b3
b3 --> b11
b13 --> b14
b14 --> b6
b7 --> b6
b6 --> b17
b15 --> b16
3 replications, seed 0:
| KPI | Mean | 95% half-width |
|---|---|---|
system/Total Entities Completed |
30 | 0 |
system/Avg Throughput Time |
59.3 | 0 |
system/Avg Queue Length |
3.42 | 0 |
system/Avg Resource Usage % |
45.8 | 0 |
system/Total Cost |
380,000 | 0 |
Job shop (Jackson network)¶
Three-station job shop (Cutting, then a 0.6/0.4 split to Drilling or Assembly, with a 0.2 rework loop back to Cutting) modelled as an open Jackson network -- costed resources, a WIP holding cost, and two example scenarios (extra Assembly capacity, less rework).
naga run job_shop_jackson --replications 3
flowchart LR
b0["create_1 (CREATE)"]
b1["process_cutting (PROCESS)"]
b2["decide_cutting (DECIDE)"]
b3["process_drilling (PROCESS)"]
b4["decide_drilling (DECIDE)"]
b5["process_assembly (PROCESS)"]
b6["decide_assembly (DECIDE)"]
b7["assign_rework (ASSIGN)"]
b8["record_drilling_exit (RECORD)"]
b9["record_assembly_exit (RECORD)"]
b10["dispose_1 (DISPOSE)"]
b0 --> b1
b1 --> b2
b2 --> b3
b2 --> b5
b3 --> b4
b4 --> b5
b4 --> b8
b5 --> b6
b6 --> b7
b6 --> b9
b7 --> b1
b8 --> b10
b9 --> b10
3 replications, seed 0:
| KPI | Mean | 95% half-width |
|---|---|---|
system/Total Entities Completed |
8,060 | 180 |
system/Avg Throughput Time |
8.67 | 0.93 |
system/Avg Queue Length |
5.14 | 1.1 |
system/Avg Resource Usage % |
71.4 | 1.4 |
user/time_in_system |
8.67 | 0.93 |
system/Total Cost |
27,000 | 630 |
Job shop (routed, per-product sequences)¶
The three-station job shop of job_shop_jackson.json rebuilt with ROUTE, STATION blocks and per-product routing sequences instead of DECIDE wiring. Three products follow fixed operation orders (Shaft visits Cutting twice, which no drawn flow could express without duplicating the station), each step carries its own process time, travel time between stations comes from a from-to Distance table, and a scenario switches on a sequence-dependent setup at Cutting.
naga run job_shop_routed --replications 3
flowchart LR
b0["create_widget (CREATE)"]
b1["create_bracket (CREATE)"]
b2["create_shaft (CREATE)"]
b3["route_1 (ROUTE)"]
b4["Cutting (STATION)"]
b5["Drilling (STATION)"]
b6["Assembly (STATION)"]
b7["process_cutting (PROCESS)"]
b8["process_drilling (PROCESS)"]
b9["process_assembly (PROCESS)"]
b10["record_exit (RECORD)"]
b11["dispose_1 (DISPOSE)"]
b0 --> b3
b1 --> b3
b2 --> b3
b3 --> b10
b4 --> b7
b5 --> b8
b6 --> b9
b7 --> b3
b8 --> b3
b9 --> b3
b10 --> b11
3 replications, seed 0:
| KPI | Mean | 95% half-width |
|---|---|---|
system/Total Entities Completed |
4,970 | 140 |
system/Avg Throughput Time |
8.65 | 0.18 |
system/Avg Queue Length |
3.52 | 0.31 |
system/Avg Resource Usage % |
66.3 | 2 |
user/time_in_system |
8.65 | 0.18 |
system/Total Cost |
16,400 | 370 |
Line with finite buffers¶
A four-station line with finite buffers between the stations: when a buffer is full the machine behind it stays BLOCKED, holding its finished part. Station 3 breaks down often, so where the twelve available buffer places go decides the line's throughput -- the scenarios move them around without ever adding any.
naga run line_with_buffers --replications 3
flowchart LR
b0["release (CREATE)"]
b1["station_1 (SUBMODEL)"]
b2["station_2 (SUBMODEL)"]
b3["buffer_1 (SUBMODEL)"]
b4["station_3 (SUBMODEL)"]
b5["buffer_2 (SUBMODEL)"]
b6["station_4 (SUBMODEL)"]
b7["buffer_3 (SUBMODEL)"]
b8["finished (DISPOSE)"]
b0 --> b1
b1 --> b3
b3 --> b2
b2 --> b5
b5 --> b4
b4 --> b7
b7 --> b6
b6 --> b8
3 replications, seed 0:
| KPI | Mean | 95% half-width |
|---|---|---|
system/Total Entities Completed |
1,520 | 300 |
system/Avg Throughput Time |
400 | 230 |
system/Avg Queue Length |
392 | 190 |
system/Avg Resource Usage % |
73.4 | 3.3 |
level/buffer_1/Mfg Buffer stock/Average |
2.91 | 0.8 |
level/buffer_2/Mfg Buffer stock/Average |
2.8 | 0.63 |
level/buffer_3/Mfg Buffer stock/Average |
1.05 | 1 |
system/Total Cost |
59.7 | 5.6 |
Machine with breakdowns¶
A single Machine subject to random failures (uptime/downtime distributions) -- shows how a resource failure interrupts and resumes service.
naga run machine_with_breakdowns --replications 3
flowchart LR
b0["create_1 (CREATE)"]
b1["process_1 (PROCESS)"]
b2["dispose_1 (DISPOSE)"]
b0 --> b1
b1 --> b2
3 replications, seed 0:
| KPI | Mean | 95% half-width |
|---|---|---|
system/Total Entities Completed |
1,780 | 29 |
system/Avg Throughput Time |
4.18 | 1.9 |
system/Avg Queue Length |
1.61 | 1 |
system/Avg Resource Usage % |
55.1 | 3 |
Job shop with MES digital twin¶
A three-station job shop built from Manufacturing library Routed stations, driven by a Manufacturing Execution System. Two products follow their own routings, process times come from a lookup table the MES parameter feed refits, and each station breaks down. On its own it runs as a plain job shop; an MES twin runs it against the mock MES in models/data/mes_twin_shop/ with the mapping in models/data/mes_twin_shop.mesmap.json.
naga run mes_twin_shop --replications 3
flowchart LR
b0["release_orders (CREATE)"]
b1["dispatch (ROUTE)"]
b2["cutting (SUBMODEL)"]
b3["drilling (SUBMODEL)"]
b4["assembly (SUBMODEL)"]
b5["record_exit (RECORD)"]
b6["ship (DISPOSE)"]
b0 --> b1
b1 --> b5
b2 --> b5
b3 --> b5
b4 --> b5
b5 --> b6
3 replications, seed 0:
| KPI | Mean | 95% half-width |
|---|---|---|
system/Total Entities Completed |
6.33 | 3.8 |
system/Avg Throughput Time |
94 | 2.2 |
system/Avg Queue Length |
0.659 | 1 |
system/Avg Resource Usage % |
41.9 | 1.2 |
user/shop_floor_time |
94 | 2.2 |
system/Total Cost |
26 | 5 |
Make-to-order line (library assets)¶
A small make-to-order line built entirely from Manufacturing 1.0.0 assets, and deliberately still on those v1 definitions (the library has a 2.0.0 since). Jobs are released every 6 minutes into a CONWIP loop of 12 tokens, baked four to a load, machined, then inspected -- 85% pass, 10% go back to the machine, 5% are scrapped, and every job gives its token back whichever way it leaves. All four resources run at 60-85%, so the queues, the rework loop and the oven's batching are all visible in the results.
naga run mfg_line_library
flowchart LR
b0["release (CREATE)"]
b1["wip_cap_conwip_kanban_loop_1 (SUBMODEL)"]
b2["batch_oven_1 (SUBMODEL)"]
b3["workstation_1 (SUBMODEL)"]
b4["inspection_1 (SUBMODEL)"]
b5["shipped (DISPOSE)"]
b0 --> b1
b1 --> b2
b2 --> b3
b3 --> b4
b4 --> b1
b4 --> b3
b4 --> b1
b1 --> b5
3 replications, seed 0:
| KPI | Mean | 95% half-width |
|---|---|---|
system/Total Entities Completed |
268 | 5.2 |
system/Avg Throughput Time |
45.2 | 16 |
system/Avg Queue Length |
4.24 | 2.9 |
system/Avg Resource Usage % |
58.3 | 11 |
system/Total Cost |
8.88 | 2.7 |
Orders, due dates and tardiness¶
Three released work orders through a two-station routed shop, every process time a constant, so every completion time, lateness and tardiness is exact arithmetic. The smallest model that shows orders, due dates and the two KPI frames they fill.
naga run order_due_dates
flowchart LR
b0["release_orders (CREATE)"]
b1["route_1 (ROUTE)"]
b2["Cut (STATION)"]
b3["Pack (STATION)"]
b4["process_cut (PROCESS)"]
b5["process_pack (PROCESS)"]
b6["dispose_1 (DISPOSE)"]
b0 --> b1
b1 --> b6
b2 --> b4
b3 --> b5
b4 --> b1
b5 --> b1
1 replication, seed 0:
| KPI | Mean | 95% half-width |
|---|---|---|
system/Total Entities Completed |
4 | |
system/Avg Throughput Time |
6.5 | |
system/Avg Queue Length |
1.09 | |
system/Avg Resource Usage % |
63.6 |
Priority jobs with rework¶
Jobs arrive with a random priority and can be sent back for rework up to twice (20% chance each pass); RECORD blocks tally the rework count and the extra time in system it costs.
naga run priority_rework
flowchart LR
b0["create_1 (CREATE)"]
b1["assign_1 (ASSIGN)"]
b2["seize_1 (SEIZE)"]
b3["release_1 (RELEASE)"]
b4["decide_1 (DECIDE)"]
b5["assign_rework (ASSIGN)"]
b6["record_rework_count (RECORD)"]
b7["delay_rework (DELAY)"]
b8["decide_reworked (DECIDE)"]
b9["record_rework_time (RECORD)"]
b10["dispose_1 (DISPOSE)"]
b0 --> b1
b1 --> b2
b2 --> b3
b3 --> b4
b4 --> b5
b4 --> b8
b5 --> b6
b6 --> b7
b7 --> b2
b8 --> b9
b8 --> b10
b9 --> b10
2 replications, seed 0:
| KPI | Mean | 95% half-width |
|---|---|---|
system/Total Entities Completed |
292 | 100 |
system/Avg Throughput Time |
14.6 | 41 |
system/Avg Queue Length |
14.5 | 53 |
system/Avg Resource Usage % |
97.9 | 16 |
user/rework_events |
64.5 | 6.4 |
user/time_in_system_reworked |
24.8 | 45 |
Two-cell line (reusable submodel)¶
Two identical work cells built from one reusable submodel definition Cell(rate, servers): a machine on a per-instance $Machine resource with a 10% rework loop. An open Jackson network of two M/M/1 nodes with feedback.
naga run two_cell_line --replications 3
flowchart LR
b0["create_1 (CREATE)"]
b1["cell_1 (SUBMODEL)"]
b2["cell_2 (SUBMODEL)"]
b3["record_exit (RECORD)"]
b4["dispose_1 (DISPOSE)"]
b0 --> b1
b1 --> b2
b2 --> b3
b3 --> b4
3 replications, seed 0:
| KPI | Mean | 95% half-width |
|---|---|---|
system/Total Entities Completed |
4,010 | 130 |
system/Avg Throughput Time |
5.31 | 0.93 |
system/Avg Queue Length |
2.94 | 0.76 |
system/Avg Resource Usage % |
66.6 | 2 |
user/time_in_system |
5.31 | 0.92 |