О проекте
Команда: Hackeron
Кейс HackAlem.ai: Спецтрек — Astana Innovations
Стадия: Доведённый продукт
Задача кейса: «Аким на 5 часов»: городской симулятор, распределяющий бюджет по 5 направлениям и 5 районам
Суть
Локальный симулятор городского бюджета: пользователь выбирает ровно 5 мероприятий из 14 для 5 районов Астаны, система проверяет ограничения и детерминированно рассчитывает Astana Quality of Life Score с визуализацией «до/после» по районам.
Как устроено
Данные из JSON (районы с 10 показателями, 14 мероприятий, правила, синергии, несовместимости) загружаются и валидируются. Валидатор проверяет бюджет ≤100, ровно 5 мер, отсутствие повторов, не более двух мер одного направления, несовместимые пары. Движок применяет эффекты с лагами и синергиями, ограничивает шкалу 0–100 и штрафует за критические показатели. Объяснение строится локально по готовому ScoreResult; для LLM предусмотрен только адаптер. Отдельный solver исчерпывающе ранжирует допустимые сценарии.
Ключевые решения
- детерминированный скоринг с лагами и синергиями
- валидация ограничений
- исчерпывающий перебор сценариев
- моделирование событий-рисков
- рекомендации однократной замены меры
Метрики
Эталонный сценарий: бюджет 95/100, Score 56.54, +3.99 к базовому, 0 критических значений (совпадает с ожидаемым ~56.5 из задания)
Особенности
Без внешних зависимостей: только стандартная библиотека Python и чистый JS. Чистая архитектура (data → validator → engine → ai → web), расчёт воспроизводит эталон из ТЗ. Есть переключатель RU/KK/EN, экспорт Markdown-отчёта, сравнение сохранённых сценариев и публичная демо-версия.
Стек
Python · http.server · HTML · CSS · JavaScript · unittest
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-15801fec-hackeron.
README
README.md«Аким на 5 часов» — AI-симулятор городских решений
О проекте
«Аким на 5 часов» — локальный симулятор для задачи Hackeron. Он помогает городскому управленцу, аналитику или участнику команды проверить последствия распределения ограниченного виртуального бюджета между инициативами по транспорту, экологии, социальной инфраструктуре, безопасности и городским сервисам.
Пользователь выбирает ровно пять мероприятий для условных районов Астаны. Система проверяет ограничения, детерминированно рассчитывает Astana Quality of Life Score и показывает, как изменились показатели каждого района. Это делает компромиссы сценария прозрачными: учитываются и средний результат по городу, и самый слабый район, и критические показатели.
Быстро для жюри
- Что решает продукт: позволяет сравнить последствия пяти городских решений при фиксированном бюджете и увидеть влияние на районы, слабые места и критические показатели.
- Публичная демо-версия: https://hackalemai.amrosia.dev/.
- Как запустить локально: нужен Python 3.10+; выполните
python3 -m src.web, затем откройтеhttp://127.0.0.1:8000. Установка зависимостей и ключи API не нужны. - Технологии: Python 3.10+, стандартная библиотека (
http.server,json,unittest), HTML/CSS/JavaScript и локальные JSON-данные. Расчёт не использует внешние API или сервисы. - Как проверить: воспроизведите эталонный сценарий из раздела «Как проверить решение» (Score 56.54) или запустите
PYTHONDONTWRITEBYTECODE=1 python3 -m unittest discover -s tests -p '*_test.py' -v.
Что реализовано
- Локальный веб-интерфейс на русском языке: пять карточек решений, выбор района для районных мер, текущий бюджет и кнопка расчёта.
- Каталог из 14 мероприятий и синтетические исходные данные для 5 районов.
- Проверка правил до расчёта:
- бюджет не выше 100;
- ровно 5 решений;
- без повторов мероприятий;
- район обязателен для районной меры и не допускается для городской;
- не более двух мер одного направления;
- контроль несовместимых пар.
- Детерминированный расчёт Astana Quality of Life Score с лагами, синергиями, ограничением шкалы 0–100 и штрафом за критические показатели.
- Визуальный дашборд результата: SVG-сравнение районных оценок «до/после» и интерактивный просмотр всех 10 показателей выбранного района.
- Локальное сохранение сценариев и их сравнение в браузере, экспорт Markdown-отчёта, три моделируемых события-риска и три рекомендации однократной замены меры от детерминированной модели.
- Локальное фактологическое объяснение результата на русском языке. Для внешней LLM предусмотрен внедряемый адаптер, но готовая интеграция с провайдером в репозитории отсутствует.
- Терминальный интерфейс и необязательный модуль исчерпывающего ранжирования допустимых сценариев.
- Автоматические тесты модели, CLI, API, объяснений и ранжирования.
Как работает решение
- В браузере пользователь выбирает пять мероприятий и при необходимости район.
- Интерфейс показывает суммарную стоимость и остаток от бюджета.
- После нажатия «Рассчитать сценарий» браузер передаёт только выбранные идентификаторы в локальный JSON API.
- Валидатор проверяет набор. Если есть нарушение, Score не рассчитывается и выводятся причины.
- Для допустимого набора движок применяет эффекты с учётом лага и синергий, затем вычисляет районные оценки, среднее по городу, минимум района, число критических значений и итоговый Score.
- Веб-интерфейс отображает аудит результата по районам и фактологическое текстовое объяснение, сформированное из уже рассчитанных чисел.
Технологии
| Область | Использовано |
|---|---|
| Язык | Python 3.10+ |
| Веб-сервер и API | Стандартная библиотека Python: http.server, json |
| Клиент | HTML, CSS, JavaScript без сторонних библиотек |
| Данные | Локальные JSON-файлы |
| Тестирование | unittest из стандартной библиотеки |
| AI-слой | Локальное фактологическое объяснение; опциональный интерфейс адаптера для LLM |
| Внешние API/сервисы | Не используются |
Проект не требует установки пакетов, ключей API или сетевого доступа для запуска основной версии.
Архитектура
data/*.json
│
▼
src/data ──► src/validator ──► src/engine ──► src/ai
│ │
└────► src/web ◄┘
│
браузер / JSON API
src/solver ──► validator + engine
src/app ──► validator + engine + ai
data/— исходные синтетические данные: районы, мероприятия, веса, правила, синергии и несовместимости.src/data/— загрузка JSON и проверка структуры набора.src/validator/— чистая проверка пользовательского набора решений.src/engine/— чистый расчёт Score и полный журнал расчётных изменений.src/ai/— объяснение только по готовомуScoreResult; арифметику не выполняет.src/web/— локальный HTTP-сервер, JSON API и статический интерфейс; не дублирует правила или расчёты.src/app/— альтернативный CLI.src/solver/— необязательное ранжирование допустимых сценариев.tests/— тесты правил, расчёта, API, интерфейсов, объяснения и ранжирования.
Установка и запуск
Требование: Python 3.10 или новее.
git clone https://github.com/BAITC-Hacks/hack-15801fec-hackeron.git
cd hack-15801fec-hackeron
python3 -m src.web
Откройте в браузере: http://127.0.0.1:8000.
Если порт занят:
python3 -m src.web --port 8765
Тогда интерфейс будет доступен по адресу http://127.0.0.1:8765.
Также доступен CLI:
python3 -m src.app
Как проверить решение
Проверка в веб-интерфейсе
Выберите следующие пять мер:
| Мера | Район |
|---|---|
| M7 — Школа + детсад | Нура |
| M8 — Центр семейного здоровья / поликлиника | Нура |
| M10 — Освещение и камеры | Нура |
| M12 — Единая цифровая платформа обращений | город |
| M5 — Чистое топливо | Сарыарка |
Ожидаемый результат из текущей модели:
- бюджет: 95 / 100;
- Score: 56.54;
- изменение к базовому сценарию: +3.99;
- критических значений: 0.
Это соответствует примеру из задания, где ожидается Score около 56.5.
Автоматическая проверка
PYTHONDONTWRITEBYTECODE=1 python3 -m unittest discover -s tests -p '*_test.py' -v
Тесты проверяют базовый Score, эталонный набор, лаги, синергии, независимость от порядка мер, обработку недопустимых наборов, CLI, JSON API, объяснения и ранжирование.
Данные и интеграции
Все данные лежат в репозитории и не загружаются из внешних источников во время работы:
data/districts.json— 5 районов, доли населения и 10 показателей.data/measures.json— 14 мероприятий, стоимость, лаг и эффекты.data/rules.json— бюджет, веса, горизонт, критический порог, синергии и несовместимости.
Числа транскрибированы из части II INSTRUCTIONS.md. Исходные документы сохранены в task/original/, текстовые версии — в task/txt/; происхождение и контрольные суммы описаны в DOCUMENTATION.md.
Расчёт и хранение состояния не требуют внешних API, баз данных или развёрнутой LLM-интеграции; публичный экземпляр выше — только слой размещения приложения.
Ограничения текущей версии
- Публичная демо-версия доступна, но не заменяет локальный воспроизводимый запуск и не содержит многопользовательского режима.
- Объяснение по умолчанию локальное и фактологическое, а не ответ от подключённой LLM.
- Интерфейс не содержит многопользовательского сравнения команд, PDF/презентации и подключения к реальному набору городских данных.
- Ранжирование сценариев исчерпывающее и может выполняться десятки секунд.
- Датасет синтетический и предназначен для хакатонной демонстрации, а не для управления реальным городом.
Ссылка на deployed-версию
Публичный развёрнутый экземпляр: https://hackalemai.amrosia.dev/.
Для воспроизводимой локальной проверки используйте запуск по инструкции выше.
Авторы коммитов
История коммитов
- 2026-09-23 17:35docs: finalize submission materials and deployment linkamrosia
- 2026-09-23 17:30deploy: add minimal deploy.sh that runs the web service on 0.0.0.0amrosia
- 2026-09-23 17:26docs(agent-chat): log local 0.0.0.0:8080 deployment of the web serviceamrosia
- 2026-09-23 17:07chore: release paused artifact scopeCodex
- 2026-09-23 17:06ci: remove blocked workflowCodex
- 2026-09-23 16:43ci: verify supported Python versionsCodex
- 2026-09-23 16:42chore: merge coordination log historiesCodex
- 2026-09-23 16:33docs: add jury scorecardamrosia
Все коммиты (26)
- 2026-09-23 16:23web: expand multilingual interface labelszhmukhamed
- 2026-09-23 16:20web: add Russian Kazakh English language switcherzhmukhamed
- 2026-09-23 16:00docs: highlight jury essentials in readmezhmukhamed
- 2026-09-23 15:27web: add scenario tools and risk simulationzhmukhamed
- 2026-09-23 15:15web: add interactive district visual dashboardzhmukhamed
- 2026-09-23 15:02docs: add judge-facing Russian READMEzhmukhamed
- 2026-09-23 14:51web: add local simulator interfaceamrosia
- 2026-09-23 14:42solver: rank valid decision scenariosamrosia
- 2026-09-23 14:33ai: add fact-grounded Russian explanationsamrosia
- 2026-09-23 14:30docs: add reproducible simulator guideamrosia
- 2026-09-23 14:29app: add Russian simulator CLIamrosia
- 2026-09-23 14:27engine: implement deterministic scoringamrosia
- 2026-09-23 14:22validator: enforce simulator selection ruleszhmukhamed
- 2026-09-23 14:02data: add source-traceable simulator dataset loaderzhmukhamed
- 2026-09-23 13:53docs(agents): add agents/ folder with general structure plan for the simulatoramrosia
- 2026-09-23 13:45docs(task): archive source docx, add txt conversions, merged INSTRUCTIONS.md and DOCUMENTATION.mdamrosia
- 2026-09-23 13:33docs(agent-chat): release bootstrap scopeamrosia
- 2026-09-23 13:33docs: add AGENTS.md coordination protocol and AGENT_CHAT.md logamrosia
Структура репозитория (39 файлов)
.gitignore DOCUMENTATION.md INSTRUCTIONS.md JUDGE_SCORECARD.md README.md data/districts.json data/measures.json data/rules.json deploy.sh src/ai/__init__.py src/ai/explanation.py src/app/__init__.py src/app/__main__.py src/app/cli.py src/data/__init__.py src/data/loader.py src/engine/__init__.py src/engine/scoring.py src/solver/__init__.py src/solver/ranking.py src/validator/__init__.py src/validator/selection.py src/web/__init__.py src/web/__main__.py src/web/api.py src/web/server.py src/web/static/app.js src/web/static/index.html src/web/static/style.css task/original/HackAlem_AI_«Аким_на_5_часов»_AI_симулятор_управления_городом.docx task/original/Датасет районов.docx task/txt/HackAlem_AI_«Аким_на_5_часов»_AI_симулятор_управления_городом.txt task/txt/Датасет районов.txt tests/ai_explanation_test.py tests/app_cli_test.py tests/engine_scoring_test.py tests/solver_ranking_test.py tests/validator_selection_test.py tests/web_api_test.py
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.