The Bishop

Picked up.
Delivered on time.

Paired trips on one vehicle, inside their windows, under capacity.
Four vehicles collecting patients and delivering them to three clinics across Ghent on the live dark map
VANS
09:0010:0011:00NOW 09:50
Arne Devos07:30–16:30
9 stops · 1:05 drive
Ambulant2/4
Wheelchair0/2
08:35
PICKUP
Patient A
+1 Ambulant1/4
08:57
PICKUP
Patient B
+1 Ambulant2/4
09:19
DELIVERY
Patient A
−1 Ambulant1/4
09:50
DELIVERY
Patient B
−1 Ambulant0/4
10:12
PICKUP
Patient C
+2 Ambulant2/4
10:34
DELIVERY
Patient C
−2 Ambulant0/4
10:55
PICKUP
Patient D
+1 Ambulant1/4
Lotte Peeters07:30–16:30
11 stops · 1:12 drive
Ambulant3/4
Wheelchair1/1
08:37
PICKUP
Patient H
+2 Ambulant2/4
08:59
PICKUP
Patient J
+1 Ambulant3/4
09:21
DELIVERY
Patient H
−2 Ambulant1/4
09:44
DELIVERY
Patient J
−1 Ambulant0/4
10:02
PICKUP
Patient K
+1 Wheelchair1/1
10:24
PICKUP
Patient L
+1 Ambulant1/4
10:46
DELIVERY
Patient K
−1 Wheelchair0/1
Wout Claes08:00–17:00
8 stops · 0:58 drive
Ambulant2/3
Wheelchair1/2
08:42
PICKUP
Patient E
+1 Ambulant1/3
09:04
PICKUP
Patient F
+1 Wheelchair1/2
09:27
DELIVERY
Patient E
−1 Ambulant0/3
09:49
DELIVERY
Patient F
−1 Wheelchair0/2
10:15
PICKUP
Patient G
+1 Ambulant1/3
10:37
DELIVERY
Patient G
−1 Ambulant0/3
UNPLACED · 2
Trips the solver could not fit.
MEDIUMPatient M
window 13:00–15:00 unreachable
LOWPatient N
optional · skipped
Live plan · GhentNOW 09:50
Vans4
Unplaced2
Vehicles collecting patients and delivering them to clinics across Ghent on the live dark map
Arne Devos07:30–16:30
Ambulant2/4
08:35PICKUPPatient A+1 Amb · 1/4
08:57PICKUPPatient B+1 Amb · 2/4
09:19DELIVERYPatient A−1 Amb · 1/4
NOW 09:50
09:50DELIVERYPatient B−1 Amb · 0/4
10:12PICKUPPatient C+2 Amb · 2/4
UNPLACED · 2Patient M · window 13:00–15:00 unreachable

The load is tracked stop by stop.

Capacity is typed, and the types are yours to define: seats and wheelchair spots for patient transport, pallets, crates or cold chain for freight. Each dimension has its own limit per vehicle, and the running load is checked on every leg, not just at departure.

Running load · seated places
Vans4
Capacity checks0 exceeded
Ride burden4h 02m
VEHICLES
08:0009:0010:0011:0012:0013:0014:0015:00
Van 1 · Lift
4 seats · 2 wheelchair
cap 4
W·1
W·1
Van 2 · Std
4 seats · 1 wheelchair
cap 4
4/4
Van 3 · Lift
3 seats · 2 wheelchair
cap 3
W·1
W·2
W·1
Van 4 · Std
4 seats · no wheelchair
cap 4
Running load · seated places
Capacity checks0 exceeded
Ride burden4h 02m
08:0009:0010:0011:0012:00Van 2 · Std4 seats · 1 wcVan 3 · Lift3 seats · 2 wccap 4cap 3FULL 4/4W·1W·2W·1

Same vehicle, pickup first

Both stops of a trip ride one vehicle, and the pickup always precedes the delivery in the route. Both are hard rules.

Ride time is capped

Time in the vehicle is limited per trip: 45 minutes by default, or a tighter per-trip cap. A detour that would hold a passenger or load longer is not allowed.

Direct rides

A trip can prohibit pooling. No other stop is served between its pickup and its delivery.

Typed capacity, defined by you

Load dimensions are configurable per operation: seats, wheelchair places, parcels, pallets, whatever the vehicle carries. A vehicle without capacity in a dimension never receives that trip.

Load follows the route

At every stop the running load is updated: pickups add, deliveries subtract. The limit holds on every leg between stops.

Hard time windows

Each stop carries its own window. Arriving early means waiting; starting service after the window closes is not allowed.

Shift hours

A van leaves its base at shift start and must finish its last stop by shift end.

The day is repaired from where it stands.

Stops already served are locked and their trips stay on their vehicle. A breakdown, an urgent trip or a driver report triggers a re-solve of what is still open.

Van 3 · breakdown10:36
Fabry · Sint-Amandsberg → Clinic C
Van 1 · 11:05
Segers · Dampoort → Clinic A
Van 4 · 11:48 +12 min
Nys · Ledeberg → Clinic C
Van 2 · 12:15
Simon · Denis · Lambert · delivered before 10:36
unchanged

The NOW line locks the past

Served stops are fixed and their trips stay pinned to their vehicle. A re-solve only changes what is still open.

Breakdowns re-flow the work

Mark a van broken and its remaining trips reopen and land on the other vans at the next solve.

Urgent trips slot in

A new pickup and delivery can be added during the day and is routed on the next solve.

Manual dispatch is pinned

Drag a trip to a specific van and it stays there. The rest of the plan re-optimises around it.

Trips can be dispatched by hand.

Drag a trip onto a van and it is pinned to that vehicle. The solver keeps choosing the order and the timing; the vehicle is the dispatcher’s decision. Dragging it back releases the pin.

VANS
09:0010:0011:00
Arne Devos07:30–16:30
6 stops · 0:58 drive
08:35
PICKUP
Patient A
+1 Ambulant1/4
08:57
PICKUP
Patient B
+2 Ambulant3/4
09:19
DELIVERY
Patient A
−1 Ambulant2/4
09:41
PICKUP
Patient P
+1 Wheelchair1/2
10:03
DELIVERY
Patient B
−2 Ambulant0/4
10:25
DELIVERY
Patient P
−1 Wheelchair0/2
Lotte Peeters07:30–16:30
6 stops · 1:04 drive
08:37
PICKUP
Patient H
+2 Ambulant2/4
08:59
PICKUP
Patient J
+1 Ambulant3/4
09:21
DELIVERY
Patient H
−2 Ambulant1/4
09:45
PICKUP
Patient K
+1 Ambulant2/4
10:06
DELIVERY
Patient J
−1 Ambulant1/4
10:28
DELIVERY
Patient K
−1 Ambulant0/4
Wout Claes08:00–17:00
2 stops · 0:24 drive
08:42
PICKUP
Patient E
+1 Ambulant1/3
09:04
DELIVERY
Patient E
−1 Ambulant0/3
09:45
PICKUP
Patient K
+1 Ambulant1/3
10:28
DELIVERY
Patient K
−1 Ambulant0/3
Drop here to move the trip to this van.
VANS
09:0010:0011:00
Lotte6 stops
08:59
PICKUP
Patient J
09:45
PICKUP
Patient K
10:28
DELIVERY
Patient K
Wout2 stops
08:42
PICKUP
Patient E
09:04
DELIVERY
Patient E
09:45
PICKUP
Patient K
10:28
DELIVERY
Patient K
Drop here to move the trip to this van.

Drag a trip to a van

A trip dragged onto another van moves with both its stops and is pinned there. The next solve routes it on that vehicle, in the best position the rules allow.

Pins hold through re-solves

A pinned trip never moves to another vehicle, whatever the weights say. Dropping it back on its own lane releases the pin.

The solver keeps the timing

A pin fixes the vehicle, not the clock. Order and times inside that route stay optimised against every other rule.

Take a van out of the plan

A vehicle can be excluded from a solve, what-if style. Its trips reopen and the remaining vans absorb what fits.

The trade-offs are weights, set per solve.

Drive time, SLA lateness, dropped optional trips and fairness across vans carry separate weights. The same trips re-solved under different weights produce a different plan; the numbers show the trade.

Solve A
drive 1 · SLA 1 · optional 1 · fairness 0
Drive time6h 20m
SLA breaches3
Trips placed13 / 14
Ride burden4h 02m
Solve B
drive 1 · SLA 9 · optional 1 · fairness 0
Drive time6h 48m
SLA breaches0
Trips placed14 / 14
Ride burden4h 25m

Four weights

Travel time, SLA lateness, unassigned optional trips and van-load fairness each carry a weight, set per solve. Zero disables one.

Priorities scale the cost of dropping

An unassigned trip costs its priority weight, so high-priority work is protected first when capacity runs short.

SLA pulls arrivals forward

A stop with an SLA is penalised per minute it arrives past the deadline, ahead of pure drive-time savings.

Fairness across vans

An optional balance objective spreads drive time across the fleet. Off by default, on when even days matter more than total minutes.

Your own rules can be modelled in.

The constraints above are the standard set. Rules specific to your operation are added to the model as hard or soft constraints with their own weight. The solver treats them like the built-in ones: hard rules are never broken, soft rules are traded off against the rest.

Score analysisper constraint
Pickup before deliveryHard0
Typed capacityHard0
SLA latenessSoft ×1−38
Siblings share a vanCustomHard0
One wheelchair per arrival slot · Clinic ACustomHard0
Regular driver preferredCustomSoft ×2−96

Hard or soft, per rule

A custom rule is either absolute or a weighted preference. Absolute rules are never broken; preferences carry a weight you set per solve.

Scored during the solve

Custom rules are evaluated on every candidate plan while the solver searches, not checked afterwards. A plan that breaks one is never proposed.

Visible in the score

Each rule reports its own contribution, so you can see what it costs the plan, retune its weight or switch it off.

From your wording to a rule

You describe the rule the way your dispatchers state it; it becomes a named constraint in the model.