Robotaxi Zoox is a classical AI search problem in which an autonomous taxi must navigate a grid-based city, pick up every waiting passenger, and finally reach a designated destination. Because the taxi must satisfy multiple pickup objectives before the trip is complete, a simple shortest-path formulation is not sufficient — the problem is modelled as a multi-goal search where the state tracks both where the taxi is and which passengers have already been collected. This page describes every element of that model: the environment, the agent, movement rules, movement costs, and the precise goal condition that signals a successful run.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/Juan-Carlos-Cruz/robotaxi-zoox/llms.txt
Use this file to discover all available pages before exploring further.
The Environment
The city is represented as a rectangular grid of cells. Each cell belongs to exactly one type, identified by an integer constant defined on theGrid class:
| Constant | Value | Name | Description |
|---|---|---|---|
Grid.LIBRE | 0 | Free road | Open cell the taxi can drive through |
Grid.MURO | 1 | Wall | Impassable obstacle (buildings, barriers) |
Grid.INICIO | 2 | Start | Spawn point of the robotaxi |
Grid.FLUJO_ALTO | 3 | High traffic | Passable but slow — heavy congestion zone |
Grid.PASAJERO | 4 | Passenger | A waiting passenger the taxi must collect |
Grid.DESTINO | 5 | Destination | The final drop-off point the taxi must reach |
Grid object reads the raw integer matrix and automatically scans it to locate the special cells:
grid.inicio and grid.destino are (row, col) tuples, while grid.pasajeros is a list of all passenger positions in reading order.
All passengers share a single destination. The taxi collects every passenger along the route and drops them off together at
grid.destino — there is no per-passenger drop-off logic.The Agent
The robotaxi begins each search at the cell markedGrid.INICIO (2). Its mission has two sequential phases:
- Collection phase — visit every cell marked
Grid.PASAJERO(4). Passengers are picked up automatically the moment the taxi enters their cell; no explicit action is needed. - Delivery phase — after all passengers are aboard, navigate to the cell marked
Grid.DESTINO(5).
Movement Rules
From any cell, the taxi can attempt to move in four directions: right, up, down, and left. These correspond to themovimientos list inside Grid.get_vecinos:
Grid.MURO cell. All other cell types (LIBRE, INICIO, FLUJO_ALTO, PASAJERO, DESTINO) are passable.
Movement Cost
Each time the taxi enters a new cell, a step cost is incurred. The accumulated costg is tracked on every search node and is used by cost-sensitive algorithms like UCS and A*.
| Cell type | Constant | Step cost |
|---|---|---|
| Free road | Grid.LIBRE | 1 |
| Start | Grid.INICIO | 1 |
| Passenger | Grid.PASAJERO | 1 |
| Destination | Grid.DESTINO | 1 |
| High traffic | Grid.FLUJO_ALTO | 7 |
| Wall | Grid.MURO | — (impassable) |
FLUJO_ALTO) cost 7 to enter — seven times the cost of a normal road cell. Algorithms that minimise total cost will actively route around these zones unless doing so would require an even more expensive detour.
Goal Condition
A search node is considered the goal when two conditions are simultaneously true:nodo.posicion == grid.destino— the taxi has physically arrived at the destination cell.nodo.pasajeros_recogidos == pasajeros_totales— the set of collected passengers equals the full set of passengers on the map.