When scheduling becomes a different problem shape
The model above places entities into groups. It does not order members within a group. Travel time and arrival windows need sequence semantics, so use the typed windowed routing engine rather than smuggling order into a membership constraint:
from helixor_solvers.backends.vrp_time_windows import (
WindowedVehicle,
WindowedVisit,
solve_windowed_vrp,
)
vehicles = [
WindowedVehicle(
id="v1",
node=0,
capacity=24.0,
departure=depart_epoch,
)
]
visits = [
WindowedVisit(
id="a",
node=6,
demand=1.0,
earliest=window_open,
latest=window_close,
service_seconds=1800.0,
)
]
result = solve_windowed_vrp(
vehicles,
visits,
drive_seconds_fn,
time_limit_seconds=30,
)
Use the shipped golden templates before inventing a shape:
-
manifests/templates/scheduling_golden.yamlfor many-to-many staffing; -
manifests/templates/routing_golden.yamlwhen order within a route matters; -
manifests/templates/timetabling_golden.yamlfor pair rules over shared classes; -
manifests/templates/field_service_golden.yamlfor assignment plus routing. -
manifests/templates/air_consolidation_golden.yamlfor consolidation priced on a "greater of two totals" tariff (measures and pooled objectives).