Two of the hardest problems in bus operations are vehicle scheduling — assembling service trips, dead runs and layovers into the blocks a bus will work — and crew scheduling — cutting those blocks into legal, humane duties. Most tools solve them one after the other. Solving them together is where the savings are.
If you optimise vehicle blocks first and hand them to crew planning, you often get blocks that are efficient for buses but awful for duties — relief points in the wrong place, spreads that force overtime, splits that breach the labour agreement. The crew planner then patches around fixed blocks, and the “optimal” vehicle plan quietly costs more in wages than it saved in kilometres.
Auto-fill heuristics chain trips by simple rules. A true optimisation engine searches the space of blocks and duties against the objectives you choose: minimise vehicles, minimise cost, balance spreads, respect meal and split rules. Coupling vehicle and crew scheduling lets it trade a slightly longer block for a much cheaper duty when that is the better outcome overall.
Meal windows, maximum spread, split limits, terminus continuity, EV state-of-charge, depot rules, labour agreements — these are not edge cases, they are the problem. A scheduler that treats them as hard constraints, with conflicts counted and clickable, produces plans a depot can actually run, not plans that look good in a spreadsheet.
Can you change one trip and watch the vehicle block, the duty and the dispatch sheet all move with it, with a full audit trail? If planning and operations read the same data, the optimiser’s output survives contact with the real day. If they don’t, it doesn’t.
We load a depot’s network, timetable and duty rules and show you the result against what you run today. Request a walkthrough →