ATLAS is a desktop warehouse manager with a live 3D robot simulation. It implements the three AI sub-problems from our Intro to AI course report (report/AtlasWMS.pdf):
- path finding: A* vs greedy best-first;
- item placement: Steepest Ascent vs Simulated Annealing;
- layout reordering: Genetic Algorithm vs Local Beam Search.
All three work under the same constraint model, and the AI Lab page compares each pair live. Built with Tauri 2, React 19, TypeScript and three.js. The original Python research is kept in backend/.
| Sub-problem | Algorithms | Where it's used |
|---|---|---|
| Path finding | A* (f = g + h, octile heuristic) and greedy best-first (h only) | every robot trip; switchable live |
| Item placement, one box at a time | Steepest Ascent (hill climbing over nearby free slots, 3 restarts) and Simulated Annealing (Metropolis acceptance, geometric cooling), graded against an exhaustive scan | Add Stock, automatic restocks |
| Layout reordering | Genetic Algorithm (one chromosome per rack, order crossover within a shelf level, cross-rack swap mutation, tournament selection, elitism, 500 generations), Local Beam Search (k = 8) and Simulated Annealing | Optimize button, AI Lab, automatic reordering |
Constraints (CSP). Hard rules:
- frozen goods stay in the cold room;
- chemicals never share a shelf with food, beverages, frozen goods or medicine;
- each shelf level has a weight limit (2,000 / 1,000 / 600 kg).
Soft cost:
- demand Γ round-trip distance to the docks;
- heavy and fragile goods kept low;
- a bonus for keeping a product's boxes together;
- a cost per box moved, so reorder plans stay small.
Every algorithm scores layouts with this one model. Incremental swap and insert deltas let the searches evaluate tens of thousands of states in well under a second.
From plan to robots. A target layout becomes a set of robot moves with dependencies: a box only enters a slot after the previous box has left it. Swap cycles are broken through a free buffer slot. Moves that went stale while the search ran are dropped.
Mixer. Tasks are served retrievals first, then insertions, then relocations. Every minute a task waits lifts it one priority level, so nothing starves. The warehouse re-slots itself when a constraint breaks or the layout drifts 3% from its last optimum.
AI Lab (screenshot below) reruns the report's Β§6 comparisons on the current warehouse, in a web worker:
- 300 random routes with A* and greedy, plus a map of the cells each search expanded;
- 6 Γ 40 placements graded against the optimum;
- the three reorder searches with convergence curves and a one-click "apply".
Typical results on this layout:
| Comparison | Result |
|---|---|
| Path finding | Greedy expands about 5Γ fewer cells, but its routes are about 6% longer; A* is always optimal. |
| Placement | Both local searches land within about 6% of the optimum. SA checks less than half as many slots. |
| Reordering, from a scrambled copy | SA reaches the lowest cost, Local Beam is close with the fewest moves, and the GA trails both. |
- 3D warehouse view: 36 racks (6 of them in a separate cold room), 1,005 shelf slots and every stored box rendered from live stock. Robots drive, lift and carry boxes; their planned routes are drawn on the floor. Includes overview, docks, cold-room and follow-robot cameras, hover tooltips per box, and a "find product" highlight.
- Robot simulation: 1β12 robots with cell reservation, so two robots never share a cell. A blocked robot replans around the others after 1 s and backs off to a free cell after 4 s (deadlock resolution). Play/pause, 1Γβ10Γ speed, and live stats: tasks done, average task time, cells expanded per plan, replans, distance driven.
- Slotting and re-slotting: covered under AI above. The 3D view shows the live layout cost, any constraint violations and the relocations in flight.
- Stock manager: add stock (category, size, weight, expiry, fragility, demand), take stock first-expired-first-out, and edit or delete products. Deleting is blocked while boxes are still on the shelves.
- Logs: every insertion, retrieval and relocation, with live progress, search and filters. Old entries are pruned after a configurable number of days.
- Dashboard: storage occupancy, robot efficiency, throughput history, robot time split (moving / handling / waiting / idle) and current fleet allocation.
- Simulated orders (toggleable): customers order products in proportion to demand. Each product has a target stock level set by its demand, and a supplier delivery tops it back up when it falls below 40% of that, so stock stays steady while the robots keep working.
State (catalog, stock, logs, settings) is saved locally, so the warehouse picks up where it left off. Robot tasks that were still running when the app closed are counted as finished on the next start.
src/
ai/ constraint model, placement, reordering (GA / beam / SA), move planning, benchmarks, web worker
sim/ floor plan grid, A* / greedy pathfinding, robot engine and task mixer
store/ persisted catalog, stock, logs and settings; turns stock changes and plans into robot tasks
scene/ three.js scene: building, racks, boxes, robots, cameras
pages/ Home, 3D Layout, Stock Manager, AI Lab, Logs, Settings
components/ tables, forms, charts
data/ rack geometry (from the Figma floor plan) and the seed product catalog
src-tauri/ Tauri 2 shell (frameless window with a custom title bar)
backend/ Python research: pathfinding comparisons, SA / GA placement, notebook
report/ project report (PDF) and notebook
| 3D simulation | Following a robot |
|---|---|
![]() |
![]() |
| Home | History |
|---|---|
![]() |
![]() |
| Add Inventory | Manage Inventory |
|---|---|
![]() |
![]() |
| Take Inventory | Settings |
|---|---|
![]() |
![]() |
AI Lab
Needs Node 18+ and, for the desktop build, the Tauri prerequisites (Rust + WebView2 on Windows).
git clone https://github.com/mohaneddz/Warehouse-Optimization
cd Warehouse-Optimization
npm install
npm run tauri dev # desktop app
npm run dev # browser only, http://localhost:1420
npm test # unit tests: path finding, constraints, every optimizer, move plans, engine
npm run tauri build # installer
The Python side is the original course research and isn't needed by the app (pip install -r backend/requirements.txt):
functions/test_greedy.py: greedy vs A* experiments on the node graph indata/map.json, with plots.functions/SA.py,functions/genetic.py: simulated annealing and genetic algorithm item placement.AtlasWMS.ipynb,report/: notebook and write-up.
- The app routes robots on a grid built from the rack coordinates, not on the hand-drawn node graph in
data/facts.json/map.json. That graph is split into disconnected pieces and has a few bogus long edges. - Single user and local only: data lives in the app's local storage, with no server or sync.
- Robot physics is kinematic: constant speed, no acceleration, collisions avoided by cell reservation.
- Placement costs are compared on the model's own objective, not measured robot travel time. The Lab's path experiment covers travel separately.
MIT.









