Documentation.

Install, configure, and operate Arclane. Same tokens as the rest of the site, a separate subdomain candidate as the docs grow.

The instance format

An instance is stops, depots, and vehicles. Times are minutes from midnight; demand and capacity share one unit.

{
  "stops": [
    { "id": 0, "x": 18.7, "y": 52.9, "demand": 2,
      "tw_start": 485, "tw_end": 605, "service": 6 }
  ],
  "depots":   [ { "id": 0, "x": 30, "y": 40 } ],
  "vehicles": [ { "id": 0, "depot": 0, "capacity": 40,
                  "shift_start": 480, "shift_end": 960 } ],
  "speed": 1.0
}

Generate a sample with cargo run -p arclane-cli -- gen --stops 180.

Plan & replan API

Three endpoints. Post an instance, get a plan; post a delta, get a diff; ask any stop why.

methodpathdoes
POST/planSolve an instance. Returns runs, unassigned stops, and metrics.
POST/replanRe-solve with completed stops locked. Returns a per-driver diff.
GET/explain/:stopReturn the reason code for a stop, assigned or not.
curl -s localhost:8080/plan \
  -H 'content-type: application/json' \
  --data @morning-run.json | jq '.metrics'
# { "vehicles_used": 13, "unassigned": 0, "distance": 1149 }

Reason codes

CAPACITY_EXCEEDED
every reachable vehicle is full
WINDOW_INFEASIBLE
cannot arrive before the window closes
SHIFT_OVERRUN
breaks a driver's duty limit
SKILL_MISSING
no in-service vehicle carries the skill

The explainability model