feat(generative): reverse-train generative engine on real DOM.РФ plans — Phase 3 #301

Open
opened 2026-05-17 14:53:28 +00:00 by lekss361 · 0 comments
Owner

Phase 3 — reverse-training generative engine

Цель: обучить наш services/generative/ движок на реальном dataset планировок (~1-3 тыс vectorized плашек из Phase 2), чтобы greedy placement генерил концепции, статистически похожие на то, как реально проектируют в Екб.

Зависит от

  • Issue #299 (Phase 1 spike) — done
  • Issue про Phase 2 (CubiCasa semantic) — done с ≥1000 vectorized планировок в БД
  • Issues #54-57 (Generative Stage 1a-1c) — base engine с Shapely + greedy + STRtree + TEAP + financial

Scope

A) Dataset preparation

  1. Extract features из vectorized plans:
    • rooms_count, avg_room_area, min_room_area, max_room_area
    • kitchen_position (corner / center / wall)
    • bathrooms_layout (joint / separate / count)
    • windows_orientation (facing main facade vs internal)
    • corridor_ratio (corridor area / total area)
    • room_aspect_ratios (длина/ширина)
  2. Cluster планы по (rooms_count, area_bin, obj_class) — получить типологии
  3. Группировать по dev_name — есть ли «почерк» девелопера (Брусника vs ЛСР vs Атомстройкомплекс)

B) Training generative

Два варианта:

B1: Statistical priors (proще, 1 неделя)

  • Вычислить empirical distributions для каждого feature по кластеру
  • Greedy placement (backend/app/services/generative/geometry.py:55 issue #55) использует эти priors как weights
  • Например: «для 2-к комфорт в Кировском районе кухня обычно 12-14 м² у окна» → ограничение для greedy

B2: ML-based (сложнее, 3-4 недели)

  • Treat plan generation as VAE / GAN / diffusion
  • Train на vectorized plans (1-3 тыс — мало для diffusion, ок для VAE)
  • Output: latent space → sample → decode в полигоны
  • Используется как initial guess для greedy refinement

Acceptance criteria

  • Generated plans визуально различимы от случайных (А/Б тест с архитектором — 60%+ корректных идентификаций)
  • Generated plans проходят SP 42.13330 constraints (нормативные отступы, освещение) — то же что в geometry.py
  • Per-dev style: при ?style=brusnika греневый движок выдаёт планировки statistically ближе к Брусника-сетке (по features из A1) чем при ?style=any
  • Время генерации p95 ≤15 сек на 1 га (issue #55 acceptance)
  • 3 различимых варианта на один input parcel (issue #54 acceptance)

API extension

POST /api/v1/concepts
{
  cad_num: "66:41:0702048:27",
  housing_class: "Комфорт",
  ...,
  style_priors: {
    "dev_id": 5791,        // -- опционально, "стиль Брусники"
    "room_bias": "family"  // -- studio_heavy / family / mixed
  }
}

Out of scope

  • Полноценный архитектурный CAD output (BIM, DWG) — это PRO версия
  • 3D рендеринг — отдельная фича после
  • Trade-off с landowner constraints (право / геология) — это уже в #54-57

Estimated effort

  • B1 (statistical priors): 1 неделя — быстрый win, ~80% качества
  • B2 (ML diffusion/VAE): 3-4 недели — research-grade, рискованно

Рекомендация: начинать с B1. Если результат на демо инвестору не убеждает — переходить на B2.

Business case

Без Phase 3 наш generative — это «случайный наполнитель» из greedy без data-driven priors. С Phase 3 каждая концепция проектируется «как Брусника / КОРТРОС / Атомстройкомплекс» — это data moat, которого нет у TestFit, rTIM, Spacemaker.

References

  • Phase 2 (CubiCasa): issue про Phase 2
  • Generative MVP: issues #54-57
  • vault Sprint2_Stage1_Generative
  • vault decisions/Generative_GreedyHeuristic.md (если создан)

Discovered: 2026-05-17 by Ghost.

## Phase 3 — reverse-training generative engine **Цель**: обучить наш `services/generative/` движок на **реальном dataset планировок** (~1-3 тыс vectorized плашек из Phase 2), чтобы greedy placement генерил концепции, статистически похожие на то, **как реально проектируют в Екб**. ## Зависит от - **Issue #299** (Phase 1 spike) — done - **Issue про Phase 2** (CubiCasa semantic) — done с ≥1000 vectorized планировок в БД - **Issues #54-57** (Generative Stage 1a-1c) — base engine с Shapely + greedy + STRtree + TEAP + financial ## Scope ### A) Dataset preparation 1. Extract features из vectorized plans: - `rooms_count`, `avg_room_area`, `min_room_area`, `max_room_area` - `kitchen_position` (corner / center / wall) - `bathrooms_layout` (joint / separate / count) - `windows_orientation` (facing main facade vs internal) - `corridor_ratio` (corridor area / total area) - `room_aspect_ratios` (длина/ширина) 2. Cluster планы по `(rooms_count, area_bin, obj_class)` — получить **типологии** 3. Группировать по `dev_name` — есть ли «почерк» девелопера (Брусника vs ЛСР vs Атомстройкомплекс) ### B) Training generative Два варианта: **B1: Statistical priors (proще, 1 неделя)** - Вычислить empirical distributions для каждого feature по кластеру - Greedy placement (`backend/app/services/generative/geometry.py:55` issue #55) использует эти priors как weights - Например: «для 2-к комфорт в Кировском районе кухня обычно 12-14 м² у окна» → ограничение для greedy **B2: ML-based (сложнее, 3-4 недели)** - Treat plan generation as VAE / GAN / diffusion - Train на vectorized plans (1-3 тыс — мало для diffusion, ок для VAE) - Output: latent space → sample → decode в полигоны - Используется как initial guess для greedy refinement ## Acceptance criteria - [ ] Generated plans **визуально** различимы от случайных (А/Б тест с архитектором — 60%+ корректных идентификаций) - [ ] Generated plans проходят SP 42.13330 constraints (нормативные отступы, освещение) — то же что в `geometry.py` - [ ] Per-dev style: при `?style=brusnika` греневый движок выдаёт планировки statistically ближе к Брусника-сетке (по features из A1) чем при `?style=any` - [ ] Время генерации p95 ≤15 сек на 1 га (issue #55 acceptance) - [ ] 3 различимых варианта на один input parcel (issue #54 acceptance) ## API extension ``` POST /api/v1/concepts { cad_num: "66:41:0702048:27", housing_class: "Комфорт", ..., style_priors: { "dev_id": 5791, // -- опционально, "стиль Брусники" "room_bias": "family" // -- studio_heavy / family / mixed } } ``` ## Out of scope - ❌ Полноценный архитектурный CAD output (BIM, DWG) — это PRO версия - ❌ 3D рендеринг — отдельная фича после - ❌ Trade-off с landowner constraints (право / геология) — это уже в #54-57 ## Estimated effort - **B1 (statistical priors)**: 1 неделя — быстрый win, ~80% качества - **B2 (ML diffusion/VAE)**: 3-4 недели — research-grade, рискованно **Рекомендация**: начинать с B1. Если результат на демо инвестору не убеждает — переходить на B2. ## Business case Без Phase 3 наш generative — это «случайный наполнитель» из greedy без data-driven priors. С Phase 3 каждая концепция проектируется **«как Брусника / КОРТРОС / Атомстройкомплекс»** — это **data moat**, которого нет у TestFit, rTIM, Spacemaker. ## References - Phase 2 (CubiCasa): issue про Phase 2 - Generative MVP: issues #54-57 - vault [[Sprint2_Stage1_Generative]] - vault `decisions/Generative_GreedyHeuristic.md` (если создан) Discovered: 2026-05-17 by Ghost.
lekss361 added the
generative
enhancement
labels 2026-05-17 14:53:28 +00:00
lekss361 added the
priority/p2
scope/backend
labels 2026-06-17 20:18:07 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#301
No description provided.