| Vose Software

Industry: Transportation
Product: ModelRisk
Application: HOS-Constrained Crew and Vehicle Scheduling for Regional LTL


When the FMCSA 70-Hour Rule Is the Real Capacity Constraint: Stochastic Crew/Vehicle Scheduling for a 380-Tractor Fleet

A US regional less-than-truckload carrier with 380 tractors and the same number of drivers had a scheduling problem the deterministic planning system could not even see. Planners built 8-day rolling blocks targeting 6.8 hours of driving per duty-day — comfortably under the FMCSA 49 CFR 395 11-hour driving cap and the 14-hour on-duty window — and assumed the 70-hour / 8-day cumulative cap was a non-issue because 6.8 × 8 = 54 hours of driving leaves a 16-hour buffer. But on-duty time = driving + dwell + fueling + delays, and a single bad week pushed cumulative on-duty hours to 70+.

8-day cumulative on-duty hours per driver

The distribution above is what the point estimate hid. Mean 8-day on-duty hours land at about 65, but the P90 sits at 71 — right on top of the 70-hour cap. The reality, telematics-fed: about 1 driver in 7 was running into the 70-hour rolling cap by day 7 or 8, forcing last-minute relief-driver assignments at $580 each in deadheading, layover and overtime, against a planned relief-pool that covered only 5% of the fleet. Annual cost of unplanned relief: $4.2M.

The carrier rebuilt the schedule in ModelRisk: per-driver per-day driving hours are LogNormal (capped at 11), dwell is Beta-scaled, breakdowns are a Bernoulli with a Triangular adder, and the 8-day cumulative on-duty hours are integrated across the rolling window. The simulation produces a P(violation) per driver and a fleet-wide relief-pool sizing CDF that the deterministic plan never could.

Why HOS constraints break point-estimate planning

Per-driver per-day driving hours are LogNormal with mean 6.8 hr, σ_log 0.22, capped at the legal 11 hours. Mean below the cap is fine; the issue is variance — actual driving hours stretch toward 9 or 10 on bad-traffic days, when a customer dwell extends, a port appointment runs late, or weather slows the run. Each such day pulls the 8-day cumulative cap closer.

Per-day on-duty hours = driving + 0.5 hr fueling + Beta(2, 5) × 2.5 hr customer dwell + breakdown adder. Breakdowns are Bernoulli(0.018) per duty-day with a Triangular(4, 7, 12) hour repair-roadside adder when they occur. On-duty hours per day are also capped at the legal 14.

Aggregate to 8 days: mean cumulative on-duty hours about 65, P90 around 71, P99 around 77. The P90 sits right at the 70-hour cap. That means roughly 1 in 7 drivers (the simulation says about 14%) hits the rolling cap before completing the planned schedule — under normal conditions. Run an aggressive utilization posture and the number triples.

Deterministic planning said 5% relief pool. Monte Carlo said size it to the P95.

A deterministic plan that compares 6.8 × 8 + (0.5 + 0.86) × 8 = 65 hours of expected on-duty and concludes the relief-pool sizing should cover the mean of driver-days needing relief gives 5% of the 380-tractor fleet, or 19 relief drivers.

The simulation, which treats each driver as an independent draw from the 8-day on-duty distribution and aggregates fleet-wide:

  • Daily drivers needing relief: mean about 54 (14% of 380), P95 around 65, P99 around 70.
  • A 19-driver pool covers the daily need on a small fraction of days. It is short by 30+ drivers on the median day.

Sizing the pool to the P95 — 65 drivers, or 17% of fleet — covers daily demand on 95% of days and resolves the recurring last-minute scramble. The marginal cost of the additional 46 relief drivers (about $2.3M/year in base wages) is more than offset against the $4.2M/year of unplanned-relief premium it eliminates — a net swing of roughly $1.9M/year in favour of pre-staffed relief over last-minute scramble.

Three scheduling postures, three on-duty distributions

The dispatcher could run the fleet at one of three utilization postures. The simulation compares them on 8-day cumulative on-duty hours per driver:

Three scheduling postures — 8-day on-duty hours CDF

  • Conservative (relief pool sized at 8% of drivers, plan ~ 6.5 hr driving/day): mean cumulative on-duty around 62 hr, P(>70 hr) about 5%.
  • Current (relief pool 5%, plan ~ 6.8 hr/day): mean about 65 hr, P(>70 hr) about 14%.
  • Aggressive (relief pool 3%, plan ~ 7.4 hr/day): mean about 69 hr, P(>70 hr) about 42%.

The aggressive posture squeezes another 4% utilisation out of the fleet but pushes the HOS-violation probability past two drivers in five — the regulatory and operational exposure is unmanageable. The current posture is genuinely cost-effective if and only if the relief pool is resized to handle the P95 demand.

One driver's 8-day rolling block — the band, not the line

One driver's 8-day rolling on-duty accumulation — P10/P50/P90 bands

The Gantt-style chart shows how cumulative on-duty hours accrue across the rolling 8-day window for a representative driver: the P50 cumulative on day 8 sits around 65 hours; the P90 sits around 71 hours; the P10 sits around 59 hours. The dispatcher needs to see this band, not just the P50, to know when a driver is at meaningful risk of needing a 34-hour restart before the start of the next block.

What actually moves the 8-day cumulative

Tornado: drivers of 8-day cumulative on-duty hours

Mean daily driving hours dominates — sweeping the planned mean across its 8.4–10.4 hr/day range swings cumulative on-duty by ±7.8 hr, almost the entire safety margin to the 70-hour cap. Daily driving-hour CV is next (a 0.10–0.28 CV range moves the cumulative ±6.5 hr because variance compounds). Driver-pool size enters through the per-driver loading and matters more than mean-dwell. Breakdown probability per day, while rare, contributes a measurable ±3.2 hr because each breakdown adds a 4–12 hour Triangular hit at full on-duty cost.

What the model changed

  • Relief-pool resized from 19 to 65 drivers (5% → 17% of fleet) based on the simulated P95 daily relief demand. First-quarter post-deployment: zero last-minute scrambles, and unplanned-relief cost dropped from $1.05M/quarter to $0.31M/quarter — within $40k of the simulated $0.27M.
  • Aggressive-utilization posture abandoned. The board had been pushing for the +4% utilization the aggressive posture promised; the simulated P(HOS violation) of 42% killed the proposal cold and prompted a board policy that any utilization change must be evaluated on the simulated violation probability before approval.
  • 34-hour restart scheduling formalised. Drivers projected to hit the P75 of their personal 8-day cumulative get an automatic 34-hour restart slot, removing the ad-hoc dispatcher judgment that was producing inconsistent enforcement.
  • Maintenance-program savings quantified. Cutting breakdown probability from 1.8% to 1.2% per duty-day — achievable via a $0.6M/year preventive-maintenance program — was simulated to save $0.9M/year in HOS-violation-driven relief and downstream missed-pickup penalties.

ModelRisk Functionality Used

  • LogNormal daily driving hours per driver (mean 6.8 hr, σ_log 0.22) with a hard ceiling at the legal 11 hr, fitted from telematics — the input the deterministic planner replaced with a single mean.
  • Beta-scaled customer-dwell distribution (Beta(2, 5) × 2.5 hr) plus 0.5 hr fixed fueling, summing into the on-duty hours that the 14-hour cap also constrains.
  • Bernoulli breakdown event at p = 0.018 per duty-day, with a Triangular(4, 7, 12) hr roadside-repair adder — the long-tailed contributor that the prior plan ignored.
  • Rolling 8-day cumulative on-duty integration under the FMCSA 49 CFR 395 70-hour rule, producing the P(violation) per driver and the fleet-level relief-pool CDF.
  • Three-posture scenario comparison that produced the conservative / current / aggressive P(HOS violation) trio and killed the aggressive posture in a single chart.
  • Stochastic Gantt of one driver's rolling accumulation, the visualization that gave dispatchers the P10/P50/P90 band they now use to schedule 34-hour restarts proactively.

A schedule built on mean driving hours is a schedule that runs out of legal hours one driver in seven without anyone seeing it coming. ModelRisk gave the carrier the distribution of cumulative on-duty hours and a relief-pool sized to the P95 — and the roughly $1.9M/year that the deterministic plan was structurally unable to save.