Hybrid Evolutionary Algorithm + Reinforcement Learning pipeline for constraint-aware architectural floorplan generation from natural-language instructions. Validated over 500 paired runs with 83.8% win rate and 6.96% median improvement over baselines.
| .gitignore | |
| README.md | |
| backend | |
| papers | |
| pyproject.toml | |
| requirements.txt |
A hybrid Evolutionary Algorithm + Reinforcement Learning system for generating constraint-aware architectural floorplans from natural-language instructions. The repo contains data preprocessing, reproducible RL/EA runners, and notebooks used to produce paper figures.
- evolver.py (EA loop, restart/plateau logic), mutator.py (mutation/repair switches), constraints.py + fitness.py (scoring), grid_encoder.py (metadata → grids/masks), rl_bandit.py (epsilon-greedy seeding bandit), rl_runner.py (episode worker), seeders.py (initial layout strategies), text_to_support_text.py (NL → structured constraints), vars.py (defaults).
python -m venv .venv source .venv/bin/activate # or .venv\\Scripts\\activate on Windows pip install -r requirements.txt
conda create -n genplan python=3.11 -y conda activate genplan pip install -r requirements.txt
1) Prep data (download → audit → masks):
python backend/utils/run_full_preprocessing.py --sample-count 0
- Downloads HamzaWajid1/FloorPlans970Dataset to backend/data/dataset/ if missing.
- Writes processed floors to backend/data/processed/floor_plans/floor###/ with metadata.json, room_mask.png, overlay.png.
- Rebuilds backend/data/processed/no_text_ids.json with samples lacking supporting text.
2) Run a short RL+EA session (curses UI if TTY):
python -m backend.rl_training_remote \
--episodes 5 --gens 60 --population 50 \
--max-workers 4 --light-mutation --max-runtime-min 10- bandit state backend/data/rl/seed_bandit.json
- per-episode log backend/data/rl/episode_log.jsonl
3) Visualise results: open backend/src/notebooks/rl_training_results.ipynb and point it at backend/data/rl/episode_log.jsonl (plots use log-scale fitness).