О проекте
Команда: ZhanAi
Кейс HackAlem.ai: Спецтрек — Astana Innovations
Стадия: Рабочий MVP
Задача кейса: «Аким на 5 часов»: городской симулятор, распределяющий бюджет по 5 направлениям и 5 районам
Суть
Городской симулятор для Астаны: игрок распределяет бюджет по мерам и 5 районам, получает Astana Quality of Life Score, городские события, лидерборд и AI-объяснение компромиссов. Карта районов строится по границам OpenStreetMap.
Как устроено
Бэкенд на Python загружает districts.json, measures.json и rules.json. simulator.py считает эффект плана, validator.py проверяет ограничения, optimizer.py перебором ищет лучший план, events.py генерирует городские события. AI-агент на OpenAI function calling вызывает инструменты движка и объясняет компромиссы, по коммитам для объяснений выбрана «GPT-6 Sol». Фронтенд на React/TypeScript показывает каталог мер, портфель, интерактивную карту районов, панель Score и AI.
Ключевые решения
- симуляция эффектов мер
- полный перебор (exhaustive optimizer)
- OpenAI function calling
- городские события
- лидерборд
- GeoJSON OpenStreetMap
Особенности
Оптимальный план ищется полным перебором, и с ним можно сравнить план игрока. Агент с инструментами поверх детерминированного движка. Реальные границы 5 районов Астаны из OSM. В репозитории хранятся версии продукта v1 и v2.
Стек
Python · React · TypeScript · Vite · GeoJSON
Модели
GPT-6 Sol (OpenAI)
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-d058b887-zhanai.
README
README.mdАким на 5 часов — HackAlem AI
AI-симулятор управления городом: пять решений, один бюджет, итоговый Astana Quality of Life Score и объяснение компромиссов.
Актуальная версия продукта — product.v2/. Там README, запуск одной командой и документация для жюри.
cd product.v2
./scripts/setup.sh # Python ≥3.10, Node ≥20
./scripts/start.sh # http://127.0.0.1:8000
| Папка | Что это |
|---|---|
product.v2/ | Актуальная версия: редизайн каталога, Score и AI-панели, AI-агент с инструментами, улучшения во время событий, исправления по QA |
product.v1/ | Первая собранная версия: бэкенд akim-engine + интерфейс claude.front + карта Astana Scheme |
claude.front/ | Исходная версия интерфейса (до интеграции) |
Astana Scheme/ | Интерактивная схема 5 районов Астаны по границам OpenStreetMap |
Доки/ | Условие задачи, датасет районов, план работ |
Авторы коммитов
История коммитов
- 2026-09-23 17:43docs(product.v2): fresh screenshot and README scenario for the redesigned UIAkezhan
- 2026-09-23 17:38feat(product.v2): redesigned catalog, Score and AI panels; QA fixes; improve during eventsAkezhan
- 2026-09-23 17:03Merge remote-tracking branch 'origin/main' into codex/akim-unified-uxCodex
- 2026-09-23 16:53style(map): match Astana Scheme palette and typographyCodex
- 2026-09-23 16:44feat(product.v1): tool-using AI agent on OpenAI function callingAkezhan
- 2026-09-23 16:35fix(product.v1): colored Astana districts, no page dimming on selectAkezhan
- 2026-09-23 16:27feat(product.v1): assemble full Akim simulator productAkezhan
- 2026-09-23 16:25feat(map): integrate Astana Scheme into simulatorCodex
Все коммиты (23)
- 2026-09-23 16:15chore: normalize text line endings for Windows and LinuxCodex
- 2026-09-23 16:15feat: integrate Claude UI with engine and accessible map planningCodex
- 2026-09-23 16:15Merge remote-tracking branch 'origin/main' into codex/akim-unified-uxCodex
- 2026-09-23 16:00feat(astana-scheme): add interactive Astana districts schemeAkezhan
- 2026-09-23 15:44Merge remote-tracking branch 'origin/codex/akim-engine' into codex/akim-unified-uxCodex
- 2026-09-23 15:36feat(claude.front): add the Akim simulator frontend skeletonAkezhan
- 2026-09-23 15:03feat: add React dashboard design previewAkezhan
- 2026-09-23 14:52docs: add frontend setup, demo and verified acceptance checklistCodex
- 2026-09-23 14:52feat(ui): build Akim simulator interface with explicit demo and API integrationCodex
- 2026-09-23 14:49chore: use GPT-6 Sol for Akim explanationsAkezhan
- 2026-09-23 14:42feat: add city events leaderboard and brief exportAkezhan
- 2026-09-23 14:36feat: implement Akim simulation API and exhaustive optimizerAkezhan
- 2026-09-23 14:21docs: keep only the Akim plan, spec and dataset in ДокиAkezhan
- 2026-09-23 14:15docs: review Akim plan, add specs and reference engineAkezhan
- 2026-09-23 14:04docs: add five-hour Akim plan for two participantsAkezhan
Структура репозитория (184 файлов)
Astana Scheme/README.md Astana Scheme/astana_districts.geojson Astana Scheme/index.html README.md claude.front/.env.example claude.front/.gitignore claude.front/README.md claude.front/index.html claude.front/package-lock.json claude.front/package.json claude.front/src/App.tsx claude.front/src/api/http.ts claude.front/src/api/index.ts claude.front/src/api/mock/engine.ts claude.front/src/api/mock/index.ts claude.front/src/api/types.ts claude.front/src/components/Header.tsx claude.front/src/components/LeaderboardDrawer.tsx claude.front/src/components/catalog/Catalog.tsx claude.front/src/components/city/CityMap.tsx claude.front/src/components/city/DistrictDetail.tsx claude.front/src/components/portfolio/Portfolio.tsx claude.front/src/components/result/AiPanel.tsx claude.front/src/components/result/EventCard.tsx claude.front/src/components/result/ImproveCard.tsx claude.front/src/components/result/ResultPanel.tsx claude.front/src/components/ui.tsx claude.front/src/data/dataset.ts claude.front/src/index.css claude.front/src/lib/availability.ts claude.front/src/lib/format.ts claude.front/src/lib/scales.ts claude.front/src/lib/useCountUp.ts claude.front/src/main.tsx claude.front/src/state/usePlan.ts claude.front/src/state/useSimulation.ts claude.front/tsconfig.json claude.front/vite.config.ts product.v1/.env.example product.v1/.gitignore product.v1/README.md product.v1/backend/app/__init__.py product.v1/backend/app/agent.py product.v1/backend/app/ai.py product.v1/backend/app/data_loader.py product.v1/backend/app/events.py product.v1/backend/app/facts.py product.v1/backend/app/leaderboard.py product.v1/backend/app/main.py product.v1/backend/app/optimizer.py product.v1/backend/app/presentation.py product.v1/backend/app/schemas.py product.v1/backend/app/simulator.py product.v1/backend/app/validator.py product.v1/backend/data/districts.json product.v1/backend/data/measures.json product.v1/backend/data/rules.json product.v1/backend/requirements.txt product.v1/backend/tests/test_core.py product.v1/docs/api-contract.md product.v1/docs/architecture.md product.v1/docs/criteria.md product.v1/docs/demo-scenario.md product.v1/docs/screenshot.png product.v1/frontend/.env.example product.v1/frontend/.gitignore product.v1/frontend/README.md product.v1/frontend/index.html product.v1/frontend/package-lock.json product.v1/frontend/package.json product.v1/frontend/src/App.tsx product.v1/frontend/src/api/adapter.ts product.v1/frontend/src/api/http.ts product.v1/frontend/src/api/index.ts product.v1/frontend/src/api/mock/engine.ts product.v1/frontend/src/api/mock/index.ts product.v1/frontend/src/api/types.ts product.v1/frontend/src/components/Header.tsx product.v1/frontend/src/components/LeaderboardDrawer.tsx product.v1/frontend/src/components/catalog/Catalog.tsx product.v1/frontend/src/components/city/CityMap.tsx product.v1/frontend/src/components/city/DistrictDetail.tsx product.v1/frontend/src/components/portfolio/Portfolio.tsx product.v1/frontend/src/components/result/AgentPanel.tsx product.v1/frontend/src/components/result/AiPanel.tsx product.v1/frontend/src/components/result/EventCard.tsx product.v1/frontend/src/components/result/ImproveCard.tsx product.v1/frontend/src/components/result/ResultPanel.tsx product.v1/frontend/src/components/ui.tsx product.v1/frontend/src/data/astanaGeometry.ts product.v1/frontend/src/data/astana_districts.geojson product.v1/frontend/src/data/dataset.ts product.v1/frontend/src/index.css product.v1/frontend/src/lib/availability.ts product.v1/frontend/src/lib/format.ts product.v1/frontend/src/lib/scales.ts product.v1/frontend/src/lib/useCountUp.ts product.v1/frontend/src/main.tsx product.v1/frontend/src/state/usePlan.ts product.v1/frontend/src/state/useSimulation.ts product.v1/frontend/tsconfig.json product.v1/frontend/vite.config.ts product.v1/scripts/build_geometry.py product.v1/scripts/dev.sh product.v1/scripts/setup.sh product.v1/scripts/start.sh product.v1/scripts/test.sh product.v2/.env.example product.v2/.gitignore product.v2/README.md product.v2/backend/app/__init__.py product.v2/backend/app/agent.py product.v2/backend/app/ai.py product.v2/backend/app/data_loader.py product.v2/backend/app/events.py product.v2/backend/app/facts.py product.v2/backend/app/leaderboard.py product.v2/backend/app/main.py product.v2/backend/app/optimizer.py product.v2/backend/app/presentation.py product.v2/backend/app/schemas.py product.v2/backend/app/simulator.py product.v2/backend/app/validator.py product.v2/backend/data/districts.json product.v2/backend/data/measures.json product.v2/backend/data/rules.json product.v2/backend/requirements.txt product.v2/backend/tests/test_core.py product.v2/docs/api-contract.md product.v2/docs/architecture.md product.v2/docs/criteria.md product.v2/docs/demo-scenario.md product.v2/docs/screenshot.png product.v2/frontend/.env.example product.v2/frontend/.gitignore product.v2/frontend/README.md product.v2/frontend/index.html product.v2/frontend/package-lock.json product.v2/frontend/package.json product.v2/frontend/src/App.tsx product.v2/frontend/src/api/adapter.ts product.v2/frontend/src/api/http.ts product.v2/frontend/src/api/index.ts product.v2/frontend/src/api/mock/engine.ts product.v2/frontend/src/api/mock/index.ts product.v2/frontend/src/api/types.ts product.v2/frontend/src/components/Header.tsx product.v2/frontend/src/components/LeaderboardDrawer.tsx product.v2/frontend/src/components/MobileScoreBar.tsx product.v2/frontend/src/components/catalog/Catalog.tsx product.v2/frontend/src/components/catalog/FloatingHint.tsx product.v2/frontend/src/components/catalog/MeasureCard.tsx product.v2/frontend/src/components/catalog/pickers.tsx product.v2/frontend/src/components/city/CityMap.tsx product.v2/frontend/src/components/city/DistrictDetail.tsx product.v2/frontend/src/components/portfolio/Portfolio.tsx product.v2/frontend/src/components/result/AgentPanel.tsx product.v2/frontend/src/components/result/AiPanel.tsx product.v2/frontend/src/components/result/EventCard.tsx product.v2/frontend/src/components/result/ImproveCard.tsx product.v2/frontend/src/components/result/ResultPanel.tsx product.v2/frontend/src/components/ui.tsx product.v2/frontend/src/data/astanaGeometry.ts product.v2/frontend/src/data/astana_districts.geojson product.v2/frontend/src/data/dataset.ts product.v2/frontend/src/index.css product.v2/frontend/src/lib/availability.ts product.v2/frontend/src/lib/format.ts product.v2/frontend/src/lib/scales.ts product.v2/frontend/src/lib/text.ts product.v2/frontend/src/lib/useCountUp.ts product.v2/frontend/src/main.tsx product.v2/frontend/src/state/usePlan.ts product.v2/frontend/src/state/useSimulation.ts product.v2/frontend/tsconfig.json product.v2/frontend/vite.config.ts product.v2/scripts/build_geometry.py product.v2/scripts/dev.sh product.v2/scripts/setup.sh product.v2/scripts/start.sh product.v2/scripts/test.sh Доки/HackAlem AI_ «Аким на 5 часов» - AI-симулятор управления городом.docx Доки/plan-akim-2-people.md Доки/Датасет районов.docx
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.