{
"benchmark_id": "001_synthetic_mine_throughput",
"scenarios": {
"baseline": {
"replications": 30,
"shift_length_hours": 8.0,
"truck_count": 8,
"total_tonnes_mean": 13143.333333333334,
"total_tonnes_ci95_low": 13089.014714438146,
"total_tonnes_ci95_high": 13197.651952228522,
"total_tonnes_std": 145.46793303071945,
"tonnes_per_hour_mean": 1642.9166666666667,
"tonnes_per_hour_ci95_low": 1636.1268393047683,
"tonnes_per_hour_ci95_high": 1649.7064940285652,
"average_cycle_time_min": 30.100187544970417,
"truck_utilisation_mean": 0.7932863014282373,
"loader_utilisation": {
"L_N": 0.7159011660970181,
"L_S": 0.7044272658364321
},
"crusher_utilisation": 0.9043481535286213,
"average_loader_queue_time_min": 2.808037633462315,
"average_crusher_queue_time_min": 3.4522786320701173,
"top_bottlenecks": [
{
"resource_kind": "loader",
"resource_id": "L_N",
"mean_queue_wait_min": 4.5298028843725975,
"max_queue_wait_min": 5.3887819016956495
},
{
"resource_kind": "crusher",
"resource_id": "D_CRUSH",
"mean_queue_wait_min": 3.4522786320701173,
"max_queue_wait_min": 4.309575427097658
},
{
"resource_kind": "loader",
"resource_id": "L_S",
"mean_queue_wait_min": 1.5955019118109983,
"max_queue_wait_min": 2.103452825833874
}
]
},
"trucks_4": {
"replications": 30,
"shift_length_hours": 8.0,
"truck_count": 4,
"total_tonnes_mean": 7983.333333333333,
"total_tonnes_ci95_low": 7945.249021333042,
"total_tonnes_ci95_high": 8021.417645333624,
"total_tonnes_std": 101.99166069132669,
"tonnes_per_hour_mean": 997.9166666666666,
"tonnes_per_hour_ci95_low": 993.1561276666303,
"tonnes_per_hour_ci95_high": 1002.677205666703,
"average_cycle_time_min": 24.646880955192056,
"truck_utilisation_mean": 0.9353161727299358,
"loader_utilisation": {
"L_N": 0.3637530803688343,
"L_S": 0.4839962092065063
},
"crusher_utilisation": 0.5547240527605404,
"average_loader_queue_time_min": 0.9168571715882826,
"average_crusher_queue_time_min": 0.652142200077363,
"top_bottlenecks": [
{
"resource_kind": "loader",
"resource_id": "L_N",
"mean_queue_wait_min": 1.441526179424677,
"max_queue_wait_min": 2.1472341630473846
},
{
"resource_kind": "crusher",
"resource_id": "D_CRUSH",
"mean_queue_wait_min": 0.652142200077363,
"max_queue_wait_min": 0.9721648930997245
},
{
"resource_kind": "loader",
"resource_id": "L_S",
"mean_queue_wait_min": 0.6443139481600949,
"max_queue_wait_min": 1.098396928189736
}
]
},
"trucks_12": {
"replications": 30,
"shift_length_hours": 8.0,
"truck_count": 12,
"total_tonnes_mean": 13783.333333333334,
"total_tonnes_ci95_low": 13683.290024732258,
"total_tonnes_ci95_high": 13883.37664193441,
"total_tonnes_std": 267.92090100513303,
"tonnes_per_hour_mean": 1722.9166666666667,
"tonnes_per_hour_ci95_low": 1710.4112530915322,
"tonnes_per_hour_ci95_high": 1735.4220802418013,
"average_cycle_time_min": 43.71794216025258,
"truck_utilisation_mean": 0.5677373249158094,
"loader_utilisation": {
"L_N": 0.7572144599540527,
"L_S": 0.7338056584135908
},
"crusher_utilisation": 0.9277475325512904,
"average_loader_queue_time_min": 4.19274765268582,
"average_crusher_queue_time_min": 14.923740952592068,
"top_bottlenecks": [
{
"resource_kind": "crusher",
"resource_id": "D_CRUSH",
"mean_queue_wait_min": 14.923740952592068,
"max_queue_wait_min": 16.885580072899522
},
{
"resource_kind": "loader",
"resource_id": "L_N",
"mean_queue_wait_min": 7.329691547632419,
"max_queue_wait_min": 9.010678967047644
},
{
"resource_kind": "edge",
"resource_id": "E07_TO_LOAD_N",
"mean_queue_wait_min": 2.1492114051876388,
"max_queue_wait_min": 2.5099084531470255
}
]
},
"ramp_upgrade": {
"replications": 30,
"shift_length_hours": 8.0,
"truck_count": 8,
"total_tonnes_mean": 13173.333333333334,
"total_tonnes_ci95_low": 13125.360093989539,
"total_tonnes_ci95_high": 13221.30657267713,
"total_tonnes_std": 128.4746944983205,
"tonnes_per_hour_mean": 1646.6666666666667,
"tonnes_per_hour_ci95_low": 1640.6700117486923,
"tonnes_per_hour_ci95_high": 1652.6633215846412,
"average_cycle_time_min": 30.055522454465777,
"truck_utilisation_mean": 0.7952966959555521,
"loader_utilisation": {
"L_N": 0.7269624909056122,
"L_S": 0.7102437041621801
},
"crusher_utilisation": 0.9055340531526253,
"average_loader_queue_time_min": 2.831331567459282,
"average_crusher_queue_time_min": 3.299083974174068,
"top_bottlenecks": [
{
"resource_kind": "loader",
"resource_id": "L_N",
"mean_queue_wait_min": 4.470797370140454,
"max_queue_wait_min": 5.169500143322038
},
{
"resource_kind": "crusher",
"resource_id": "D_CRUSH",
"mean_queue_wait_min": 3.299083974174068,
"max_queue_wait_min": 4.002468586282579
},
{
"resource_kind": "loader",
"resource_id": "L_S",
"mean_queue_wait_min": 1.6558987153480011,
"max_queue_wait_min": 2.010265298965694
}
]
},
"crusher_slowdown": {
"replications": 30,
"shift_length_hours": 8.0,
"truck_count": 8,
"total_tonnes_mean": 7236.666666666667,
"total_tonnes_ci95_low": 7153.7580158422725,
"total_tonnes_ci95_high": 7319.5753174910615,
"total_tonnes_std": 222.03344472108844,
"tonnes_per_hour_mean": 904.5833333333334,
"tonnes_per_hour_ci95_low": 894.2197519802841,
"tonnes_per_hour_ci95_high": 914.9469146863827,
"average_cycle_time_min": 56.14907716844281,
"truck_utilisation_mean": 0.5019605055603297,
"loader_utilisation": {
"L_N": 0.3991062720991501,
"L_S": 0.3874695209087796
},
"crusher_utilisation": 0.9436999206775035,
"average_loader_queue_time_min": 1.8005908672153597,
"average_crusher_queue_time_min": 26.61257535829726,
"top_bottlenecks": [
{
"resource_kind": "crusher",
"resource_id": "D_CRUSH",
"mean_queue_wait_min": 26.61257535829726,
"max_queue_wait_min": 29.37036720348223
},
{
"resource_kind": "loader",
"resource_id": "L_N",
"mean_queue_wait_min": 4.199983016793724,
"max_queue_wait_min": 4.900015465892767
},
{
"resource_kind": "edge",
"resource_id": "E07_TO_LOAD_N",
"mean_queue_wait_min": 1.6657235628582925,
"max_queue_wait_min": 1.9412988148223032
}
]
},
"ramp_closed": {
"replications": 30,
"shift_length_hours": 8.0,
"truck_count": 8,
"total_tonnes_mean": 13110.0,
"total_tonnes_ci95_low": 13042.522739617967,
"total_tonnes_ci95_high": 13177.477260382033,
"total_tonnes_std": 180.70742213255411,
"tonnes_per_hour_mean": 1638.75,
"tonnes_per_hour_ci95_low": 1630.3153424522459,
"tonnes_per_hour_ci95_high": 1647.1846575477541,
"average_cycle_time_min": 30.187980678490263,
"truck_utilisation_mean": 0.79350991975879,
"loader_utilisation": {
"L_N": 0.7196069871650074,
"L_S": 0.7090108640574743
},
"crusher_utilisation": 0.9041012823495547,
"average_loader_queue_time_min": 2.801431322846478,
"average_crusher_queue_time_min": 3.411807199373587,
"top_bottlenecks": [
{
"resource_kind": "loader",
"resource_id": "L_N",
"mean_queue_wait_min": 4.552702481127875,
"max_queue_wait_min": 5.169896217984971
},
{
"resource_kind": "crusher",
"resource_id": "D_CRUSH",
"mean_queue_wait_min": 3.411807199373587,
"max_queue_wait_min": 4.415648452926297
},
{
"resource_kind": "loader",
"resource_id": "L_S",
"mean_queue_wait_min": 1.5518166500259833,
"max_queue_wait_min": 2.1175220124969227
}
]
}
},
"key_assumptions": [
"Capacity-constrained edges (E03 ramp segments, E05 crusher approach, E07 north-pit access, E09 south-pit access) are modelled as SimPy resources with capacity 1; capacity-999 edges are unconstrained timeouts.",
"E03_UP and E03_DOWN are modelled as two independent capacity-1 resources (as encoded in the data); a single shared bidirectional channel would be marginally more conservative.",
"Loader and dump times follow truncated normal distributions clipped at 10% of the mean to prevent non-physical small samples.",
"Per-edge travel time is multiplied by an i.i.d. lognormal noise factor with unit mean (CV=0.10), so noise does not bias mean travel times.",
"Trucks start at PARK with a uniform [0, 60] second random initial stagger to avoid pathological insertion-order resource ordering at t=0.",
"Dispatching follows the baseline `nearest_available_loader` policy with a `shortest_expected_cycle_time` tie-breaker; the dispatcher is invoked at the start of every empty leg.",
"Routes are computed by Dijkstra shortest travel time on the directed graph after applying scenario edge overrides; closed edges are removed entirely.",
"End-of-shift policy: no new loader requests after 480 minutes; in-flight loaded trucks complete travel and dump (tonnes counted only on dump_end events); empty trucks abort at the end of their current edge.",
"Tonnes-delivered counts only completed dump events; partial loads in flight at shift end are not counted."
],
"model_limitations": [
"No truck breakdowns, refuelling, operator breaks, or shift-change handovers.",
"Modelling the up-ramp and down-ramp as two independent resources understates contention slightly versus a real single-lane bidirectional ramp.",
"Speed factors are applied uniformly per edge; gradient and curvature are not modelled separately.",
"Travel-time noise is i.i.d. per edge traversal; correlated weather or time-of-day effects are not modelled.",
"Loader and crusher availability are assumed 100% within the shift.",
"Routes are recomputed from the shortest-time graph at every dispatch; trucks already en route do not re-plan in response to congestion.",
"Initial conditions: all trucks at PARK and empty; warm-up is not separately discarded (warmup_minutes = 0 in the baseline config)."
],
"additional_scenarios_proposed": []
}summary.json
← Back to submission · View raw on GitHub