layered-waves-haikei (1)-svg-svg

PolisEngine

Моделирование городов, экономики и общества

PolisEngine — это библиотека моделирования с открытым исходным кодом для городов, экономики и общества. Она позволяет ответить на вопросы вроде: что произойдёт, если государство повысит налоги, национализирует предприятия или прервутся поставки товаров. Она создаётся как бэкенд для градостроительных стратегий, но применима везде, где нужно моделировать общество без игры и пользовательского интерфейса вокруг.

О проекте


PolisEngine — это библиотека моделирования, написанная на языке C# для .NET 10. Она моделирует экономику, население, общество, транспорт и инфраструктуру, причём все эти системы взаимно влияют друг на друга — дефицит товаров снижает уровень удовлетворённости, падение доверия подрывает легитимность правительства, а экономический коллапс вызывает миграцию.

Engine намеренно работает в режиме headless. Он знает состояние мира и правила симуляции, но не занимается визуальным оформлением — вся визуальная часть является задачей фронтенда, который подключает engine как зависимость. Таким образом, одну и ту же симуляцию может использовать и 3D-игра, и веб-интерфейс, и консольное приложение.

Headless

Отсутствие зависимости от игрового engine или пользовательского интерфейса

Детерминированный

Один и тот же вход всегда дает один и тот же результат

Поддающийся модификации

Содержимое и поведение можно расширить без изменения кода

Управляемый данными

Содержимое определено в файлах данных

Что моделирует engine


PolisEngine моделирует несколько взаимосвязанных доменов. Каждый из них функционирует автономно, но настоящая динамика возникает только благодаря их взаимодействию на протяжении всех симуляционных тиков.

Экономика

Рынки, цены, предприятия, налоги, государственный бюджет и долг, центральный банк, приватизация и национализация, потоки капитала и плановая экономика. Экономические модели взаимозаменяемы — капиталистическую реализацию можно заменить другой, не затрагивая ядро.

Население

Население в качестве отдельных субъектов или в виде совокупных групп в зависимости от необходимого уровня детализации. Демографические данные, образование, потребности, социальные слои и миграция.

Общество

Доверие к правительству, легитимность, социальные показатели и их обратные связи, культурные ценности и нормы. Показатели рассчитываются по графу зависимостей, поэтому их можно связывать произвольно.

Инфраструктура и транспорт

Здания, транспортные сети, транспортные средства и расписания движения, цепочки поставок, склады и выявление сбоев в поставках.

Мир и пространство

Мир в виде сетки, разбитой на чанки, с рельефом, природными ресурсами и зонами. Уровень детализации симуляции задаётся отдельно для каждого чанка, что позволяет рассчитывать большие карты без потери производительности.

Модификация

API для модификаций позволяет добавлять новые типы зданий, товаров и социальных показателей, регистрировать собственные экономические модели и писать игровую логику на языке Lua.

Для чего это можно использовать


Engine создаётся не только для игр. Поскольку он не связан ни с графикой, ни с пользовательским вводом, его можно запустить везде, где требуется моделировать общество или экономику.

Градостроительная стратегия

Фронтенд отправляет команды и принимает события, а engine, работающий в фоне, выполняет всю симуляцию.

Экономическая песочница

Сравнение того, как различные экономические системы реагируют на один и тот же внешний шок.

Обучение ИИ

Детерминированный headless-цикл, с которым агент может работать на полной скорости оборудования.

Моделирование сценариев

Моделирование экономических и социальных преобразований и наблюдение за их результатами.

Технические характеристики


Библиотека

Язык: C#
Целевая платформа: .NET 10
Лицензия: LGPL v3
Конфигурация: Fluent Builder или TOML
Распространение: библиотека классов .NET

Качество и тестирование

Тесты: xUnit, FluentAssertions
Бенчмарки: BenchmarkDotNet
Архитектура: SOLID, ориентированный на данные, разделение на слои
Режимы: реального времени и headless

Статус проекта


PolisEngine находится на ранней стадии разработки и пока не готов к использованию. Базовая инфраструктура находится в стадии создания, большинство систем моделирования ещё не разработано. Публичный API не является стабильным и может изменяться без предварительного уведомления. Поэтому на данный момент его ещё нельзя внедрять.

Ранняя стадия разработки

Код и разработка


PolisEngine разрабатывается в открытом доступе на GitHub. Код, архитектурная документация и план разработки доступны общественности — их можно просматривать, использовать и комментировать.

Текущий статус: ранняя стадия разработки

PolisEngine — это проект с открытым исходным кодом. Условия использования приведены в лицензии, размещённой в репозитории.