AAYMA
RU
Войти

Qala

Игровой MVP городского симулятора: игрок принимает 5 решений в рамках бюджета 100 и получает детерминированный Quality of Life Score по 5 районам…

Рабочий MVP
Команда «Shusauro» 4💬 0 комментариевс 23 сентября 2026 г.

О проекте

Команда: Shusauro
Кейс HackAlem.ai: Спецтрек — Astana Innovations
Стадия: Рабочий MVP

Задача кейса: «Аким на 5 часов»: городской симулятор, распределяющий бюджет по 5 направлениям и 5 районам

Суть

Игровой MVP городского симулятора: игрок принимает 5 решений в рамках бюджета 100 и получает детерминированный Quality of Life Score по 5 районам Астаны. После каждого решения AI пишет газетную реакцию, в конце AI-аналитик разбирает итог.

Как устроено

Python-движок backend/engine.py проверяет план (повторы, бюджет, не больше двух мер одного направления, конфликты) и считает эффект по формуле полный_эффект×(8−lag)/8 с синергиями на горизонте 8 кварталов. Итог: Score = 0.7×городской балл + 0.3×балл слабейшего района − число критических показателей (<40). FastAPI отдаёт preview и simulation. media_analysis.py собирает проверенные факты, на основе которых OpenAI генерирует негативный газетный выпуск и финальный анализ. Без ключа используются детерминированные тексты.

Ключевые решения

  • deterministic simulation engine
  • lag-weighted effects
  • synergies
  • population-weighted scoring
  • AI Media Reaction Engine

Особенности

Геймификация через «газетную реакцию» на каждое решение: LLM пишет негативный выпуск прессы только по проверенным backend-фактам. Формула Score явно описана в README.

Стек

Python · FastAPI · Next.js · React · TypeScript · Tailwind CSS

Модели

OpenAI


Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-4a8499ce-shusauro.

README

README.md

Qala — «Аким на 5 часов»

Игровой MVP для HackAlem AI: выберите пять городских или районных мер и увидьте детерминированный расчёт Astana Quality of Life Score для пяти районов Астаны. Расчёт выполняет Python backend; OpenAI может только объяснять готовые результаты.

Что работает

  • Бюджет 100 условных единиц, пять окончательных решений. После каждого решения появляется газетная реакция; после пятой игрок продолжает к итоговому расчёту.
  • Городские меры применяются ко всем районам. Для районной меры сначала выберите район на карте.
  • Каталог показывает стоимость, направление, тип, лаг, полный эффект, потенциальные синергии и несовместимости.
  • Валидатор запрещает повтор меры, превышение бюджета, больше двух решений одного направления и конфликтующие решения.
  • Backend учитывает лаг в горизонте 8 кварталов, синергии, ограничение показателей диапазоном 0–100, доли населения, слабейший район и критические показатели ниже 40.
  • Один итоговый аналитический экран показывает Score, показатели «до / после», изменение по каждому району и выбранный план.
  • AI Media Reaction Engine получает проверенные backend-факты и создаёт негативный газетный выпуск после каждого решения. Final AI Analyst получает готовый детерминированный результат и формирует один аналитический экран. Без OPENAI_API_KEY используются краткие детерминированные редакционные тексты и аналитическая сводка.
  • Аккаунты и база данных не нужны. Данные синтетические.

Требования

  • Node.js 20+
  • Python 3.11+

Запуск в Windows PowerShell

Из корня репозитория откройте два терминала.

Терминал 1 — backend:

py -3.11 -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r backend\requirements.txt
Copy-Item backend\.env.example backend\.env
uvicorn backend.main:app --reload --port 8000

Терминал 2 — frontend:

npm install
npm run dev

Откройте http://localhost:3000. API доступно на http://localhost:8000; описание endpoint'ов FastAPI — http://localhost:8000/docs.

Чтобы включить AI-хронику, добавьте OPENAI_API_KEY в backend/.env и перезапустите backend. Ключ хранится только на сервере и не передаётся в браузер. Для симуляции и расчёта результата он не нужен.

Формула

Реализованный эффект меры равен полный эффект × (8 − lag) / 8. Синергия добавляется отдельно и не масштабируется лагом. Для каждого района рассчитывается взвешенная оценка по десяти показателям; городской балл — среднее по долям населения. Итог:

Score = 0.7 × городской балл + 0.3 × балл самого слабого района − критические показатели

Критическим считается каждый показатель района со значением строго ниже 40. Исходный Score в наборе данных — 52.56.

Структура

  • app/ — Next.js, React, TypeScript, Tailwind CSS.
  • backend/engine.py — набор синтетических данных, правила проверки и детерминированный движок.
  • backend/main.py — FastAPI: dataset, preview, simulation, газетная реакция и итоговый анализ.
  • backend/media_analysis.py — детерминированный сбор проверяемых фактов и media angles для редакционного narrative layer.
  • design/ — исходные черновики интерфейса.

Карта схематическая и предназначена для симуляции, а не для навигации или отображения точных административных границ.

Звёзды
⭐ 0
Форки
0
Язык
Python
Последний push
в прошлом месяце
Коммиты
5
Авторы
1
Файлы
24
Ветки
1

Авторы коммитов

shusauro 5

История коммитов

  • 2026-09-23 17:39Add press reactions and final AI analysisshusauro
  • 2026-09-23 16:41Build Qala city simulation MVPshusauro
  • 2026-09-23 15:50Add MVP interface scaffoldshusauro
  • 2026-09-23 14:56Add initial city simulator design draftshusauro
  • 2026-09-23 13:37Add GLHF text fileshusauro
Структура репозитория (24 файлов)
.gitignore
GLHF.txt
README.md
app/globals.css
app/layout.tsx
app/page.tsx
backend/.env.example
backend/__init__.py
backend/engine.py
backend/main.py
backend/media_analysis.py
backend/requirements.txt
design/ОКНО меры.png
design/ЧЕРНОВИК.txt
design/окно списка мер.png
design/основное меню.png
eslint.config.mjs
next-env.d.ts
next.config.ts
package-lock.json
package.json
postcss.config.mjs
styles.css
tsconfig.json

Обсуждение 0 комментариев

Войдите, чтобы комментировать

Пока нет комментариев — будьте первым.