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

PolisEngine

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

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

О проекте


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

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

Без дисплея

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

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

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

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

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

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

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

Что моделирует движок


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

Экономика

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

Население

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

Компания

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

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

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

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

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

Модификация

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

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


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

Стратегия строительства

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

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

Сравнение реакции различных экономических систем на один и тот же внешний шок.

Обучение ИИ

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

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

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

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


Библиотека

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

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

Тесты: xUnit, FluentAssertions
Бенчмарки: BenchmarkDotNet
Проект: SOLID, ориентированный на данные, разделение на слои
Режимы: в реальном времени и без интерфейса

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


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

Ранняя стадия развития

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


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

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

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