AAYMA
RU
Войти

Аким на 5 часов

Веб-симулятор городского бюджета: игрок выбирает 5 мер (городских или районных), а система проверяет правила и считает индекс качества жизни Астаны…

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

О проекте

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

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

Суть

Веб-симулятор городского бюджета: игрок выбирает 5 мер (городских или районных), а система проверяет правила и считает индекс качества жизни Астаны по районам.

Как устроено

В data.js/data.py описаны районы, показатели, меры с их стоимостью, лагами, эффектами, синергиями и несовместимостями. Эффекты умножаются на долю реализации (8 − лаг)/8, показатели ограничиваются 0–100. AQOL Score = 0.7×средневзвешенный по населению балл + 0.3×балл слабейшего района − число показателей ниже 40. Сценарий допустим при ровно 5 мерах, бюджете ≤100 и не более 2 мер на направление. Расчёт выполняет FastAPI, объяснение формируется детерминированно, а по кнопке доступен необязательный AI-разбор через OpenAI, который баллы не меняет.

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

  • rule-based simulation
  • взвешенный индекс AQOL
  • лаги и синергии мер
  • проверка ограничений бюджета

Особенности

Формула штрафует за слабейший район и за критические показатели ниже 40, то есть поощряет равномерность, а не только средний рост. LLM подключается только по явной кнопке и лишь объясняет готовый расчёт.

Стек

Python · FastAPI · uvicorn · JavaScript · HTML/CSS

Модели

OpenAI


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

README

README.md

hack-7c95a80f-paraplan

Хакатонный проект ParaPlan: симулятор «Аким на 5 часов» для оценки сценариев распределения городского бюджета.

Запуск

  1. Откройте папку репозитория в Visual Studio Code.
  2. В терминале из папки репозитория установите backend-зависимости: py -m pip install -r requirements.txt.
  3. Перейдите на папку выше репозитория командой cd .. и запустите API: py -m uvicorn hack-7c95a80f-paraplan.main:app --reload.
  4. Оставьте API запущенным. Откройте второй терминал в VS Code и запустите сайт кнопкой Go Live (расширение Live Server).
  5. Выберите пять мероприятий. Для районных инициатив укажите район; результат интерфейс получит от API.
  6. Нажмите Загрузить пример из кейса, чтобы увидеть готовый сценарий.

Для frontend не нужны npm-пакеты. Чтобы включить необязательный AI-разбор, скопируйте .env.example в .env, добавьте туда свой OPENAI_API_KEY и перезапустите backend. Ключ хранится только в локальном .env, который Git игнорирует; не вставляйте его в код, чат или коммиты. При необходимости задайте OPENAI_MODEL в том же файле. Без ключа все расчёты и обычное объяснение продолжают работать, а AI-запрос отправляется только после нажатия кнопки Получить AI-разбор. Каждый такой запрос использует ваш OpenAI API аккаунт и может тарифицироваться. AI объясняет расчёт, но не меняет его баллы.

Файлы

  • index.html — страница симулятора.
  • style.css — адаптивное оформление.
  • src/data.js — районы, показатели, меры, их стоимость, лаги, эффекты, синергии и несовместимости.
  • src/model.js — проверка правил, влияние мер и формула Astana Quality of Life Score.
  • src/app.js — интерактивный интерфейс, бюджет, районные карточки и разбор результата.
  • main.py, simulation.py, data.py — API и серверный расчёт сценария.
  • requirements.txt — Python-зависимости backend, включая OpenAI SDK для AI-разбора.
  • .env.example — образец локальных настроек; личный .env не коммитится.

Модель

Все показатели лежат в диапазоне 0–100. Эффекты мер умножаются на долю реализации (8 − лаг) / 8. Городские меры действуют на все районы, районные — на выбранный район. После применения эффектов и синергий показатели ограничиваются шкалой 0–100.

AQOL Score = 0.7 × средний балл районов с учётом населения + 0.3 × балл слабейшего района − число показателей ниже 40.

Сценарий допустим, если выбрано ровно пять разных мер, бюджет не выше 100, на одно направление приходится не больше двух мер, выбраны районы для районных мер, не выбраны районы для городских мер и не нарушены несовместимости. Недопустимый сценарий не получает итоговый балл.

Объяснение результата формируется детерминированно из вычисленных данных: показывает изменения районов, ведущие направления, критические значения, затраты и сработавшие синергии. Модель сама рассчитывает все числа; текст не добавляет вымышленных показателей.

Звёзды
⭐ 0
Форки
0
Язык
—
Последний push
в прошлом месяце
Коммиты
8
Авторы
3
Файлы
13
Ветки
3

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

L1GHTEN1NG 3s0mebuddy 3Dimash Mazhkenov 2

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

  • 2026-09-23 17:57last commitL1GHTEN1NG
  • 2026-09-23 17:19feat: connect frontend to simulation APIL1GHTEN1NG
  • 2026-09-23 17:16Update README.mds0mebuddy
  • 2026-09-23 16:12Merge pull request #1 from BAITC-Hacks/back-endDimash Mazhkenov
  • 2026-09-23 16:05Correct label text for budget section in HTMLDimash Mazhkenov
  • 2026-09-23 15:41Update simulation.pys0mebuddy
  • 2026-09-23 15:10feat: add city simulator MVPL1GHTEN1NG
  • 2026-09-23 15:08feat: add backend simulation engines0mebuddy
Структура репозитория (13 файлов)
.env.example
.gitignore
README.md
__init__.py
data.py
index.html
main.py
requirements.txt
simulation.py
src/app.js
src/data.js
src/model.js
style.css
Ветки (3)

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

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

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