О проекте
Команда: 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.mdhack-7c95a80f-paraplan
Хакатонный проект ParaPlan: симулятор «Аким на 5 часов» для оценки сценариев распределения городского бюджета.
Запуск
- Откройте папку репозитория в Visual Studio Code.
- В терминале из папки репозитория установите backend-зависимости:
py -m pip install -r requirements.txt. - Перейдите на папку выше репозитория командой
cd ..и запустите API:py -m uvicorn hack-7c95a80f-paraplan.main:app --reload. - Оставьте API запущенным. Откройте второй терминал в VS Code и запустите сайт кнопкой Go Live (расширение Live Server).
- Выберите пять мероприятий. Для районных инициатив укажите район; результат интерфейс получит от API.
- Нажмите Загрузить пример из кейса, чтобы увидеть готовый сценарий.
Для 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, на одно направление приходится не больше двух мер, выбраны районы для районных мер, не выбраны районы для городских мер и не нарушены несовместимости. Недопустимый сценарий не получает итоговый балл.
Объяснение результата формируется детерминированно из вычисленных данных: показывает изменения районов, ведущие направления, критические значения, затраты и сработавшие синергии. Модель сама рассчитывает все числа; текст не добавляет вымышленных показателей.
Авторы коммитов
История коммитов
- 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
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.