Projects / Genplan — EA + RL Floorplan Pipeline

Genplan — EA + RL Floorplan Pipeline

activePython83.8% · win rate

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.

STATUSactive
LANGUAGEPython
METRIC83.8% · win rate
STACKPython · Evolutionary Algorithms · Reinforcement Learning · OpenCV · HuggingFace · NumPy
COMMITS123
STARS2
123 commits‹› Code ↗
M
miki-przygodaAdd current limitations section to README90bb74c5 months ago
·.gitignore
·README.md
backend
papers
·pyproject.toml
·requirements.txt
📄
Genplan Template — EA + RL Floorplan Experiments

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.

Repository layout
  • backend/utils/: data download and preprocessing (run_full_preprocessing.py orchestrates audit + mask generation).
  • backend/src/ver0/: core EA/RL logic

- 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).

  • backend/rl_training_remote/: CLI entrypoints for long RL runs and remote-friendly EA comparisons (cli.py, train_remote_ea_eval.py, push_rl_data.py, wipe_rl_memory.py).
  • backend/src/notebooks/: analysis and training notebooks (ver0/EANotebook.ipynb, ver0/RLTraining.ipynb, EA_Eval_Compare*.ipynb, rl_training_results.ipynb).
  • Data: processed floor plans and audit artifacts in backend/data/processed/; bandit/log outputs in backend/data/rl/; EA comparison logs in backend/data/ea-logs/json/.
  • papers/: Currently includes a formal coursework summary of this system. (A full academic publication is planned, once completed will be added to the codebase.)
Environment
  • Python 3.11+ Recommended.
  • Install deps (OpenCV is headless; on some OSes you may need system libGL/libglib packages):
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
Fast start (10–15 minutes)

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).

ABOUT

Hybrid evolutionary algorithm + RL bandit for generating constraint-aware architectural floorplans from natural-language input. Validated over 500 paired runs on FloorPlans970.

evolutionary-algorithmspythonreinforcment-learning
ACTIVITY
Stars2
Forks0
Commits123
License
LANGUAGES
Python67.4%
Jupyter Notebook17%
TeX10.7%
BibTeX Style5%
RESULTS
  • 83.8% win rate — EA+RL hybrid outperforms manual seeding in 83.8% of 500 paired runs (1,000 total episodes).
  • 6.96% median fitness improvement over baseline approaches.
  • Formal research paper included (COMP-1827 report PDF).
ARCHITECTURE
  • Epsilon-greedy Multi-Armed Bandit (rl_bandit.py) adaptively selects from registered seeding strategies; bandit state persists across runs for reproducibility.
  • 7-dimension constraint scoring: quadrant, overlap, compactness, adjacency, room usage, relationships, hole detection (constraints.py).
  • Fitness realism gate — real_plan_classifier.py filters geometrically valid but implausible layouts.
  • Grid encoding via OpenCV edge detection converts processed floor plan metadata to EA-ready tensors/masks.
  • Natural-language → structured constraints parser (text_to_support_text.py).