CJet dispatches the bus fleet 🚌

50Γ—50 grid, three autonomous buses. Every new passenger demand goes to CJet: assign: choice(bus_a/bus_b/bus_c) β€” distance, load and seats all in prose. The domain rules are injected into the question, not learned. Toggle Multi-pickup physics to switch the world: on, a bus carries several demands at once and the option criteria report how many blocks each bus would add to the route it is already driving; off, a bus carries one and a nearby pickup buys nothing. Same rules, same cost function, different world β€” the delivered count shows which one the rule was written for.
Four seats is the capacity a bus offers; what actually caps new work is its planning horizon β€” a bus already committed to a full route turns work away with seats to spare, which is what Over-committed counts. Edit the seat limit and the axioms themselves in the Ontology panel below. Dispatch off = greedy nearest-bus heuristic. ← back to the main UI

Waiting 0 Riding 0 Delivered 0 Demands 0 Over-committed 0 CJET IS DISPATCHING
0 decided Β· 0 deferred
Bus A Β· β€” Bus B Β· β€” Bus C Β· β€”

Controls

Ontology β€” the TBox behind the seat rule, editable

CJet's view β€” the dispatch state it receives

not started yet

CJet's decisions β€” which bus takes the demand

no assignments yet