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

PolisEngine

Symulacje miast, gospodarek i społeczeństw

PolisEngine to biblioteka symulacyjna typu open source służąca do modelowania miast, gospodarek i społeczeństw. Pozwala odpowiedzieć na pytania w rodzaju: co się stanie, jeśli państwo podniesie podatki, znacjonalizuje przedsiębiorstwa albo zostaną przerwane dostawy towarów. Powstaje jako backend gier strategicznych typu city-builder, ale można ją wykorzystać wszędzie tam, gdzie trzeba symulować społeczeństwo bez samej gry i interfejsu użytkownika.

O projekcie


PolisEngine to biblioteka symulacyjna napisana w języku C# dla platformy .NET 10. Symuluje gospodarkę, populację, społeczeństwo, transport i infrastrukturę, przy czym wszystkie te systemy wzajemnie na siebie oddziałują – niedobór towarów obniża poziom zadowolenia, spadające zaufanie podważa legitymację rządu, a załamanie gospodarcze wywołuje migrację.

Engine jest celowo headless. Zna stan świata i zasady symulacji, ale nie zajmuje się tym, jak wszystko wygląda – cała warstwa wizualna należy do frontendu, który podłącza engine jako zależność. Tę samą symulację może więc obsługiwać gra 3D, interfejs webowy, a także aplikacja konsolowa.

Headless

Brak zależności od game engine’u ani interfejsu użytkownika

Deterministyczny

Te same dane zawsze dają ten sam wynik

Z możliwością modyfikacji

Treść i zachowanie można rozszerzyć bez ingerencji w kod

Sterowany danymi

Zawartość jest zdefiniowana w plikach danych

Co symuluje engine


PolisEngine modeluje kilka powiązanych ze sobą domen. Każda z nich funkcjonuje niezależnie, ale rzeczywista dynamika powstaje dopiero w wyniku ich wzajemnego oddziaływania w ramach poszczególnych taktów symulacji.

Gospodarka

Rynki, ceny, przedsiębiorstwa, podatki, budżet państwa i dług publiczny, bank centralny, prywatyzacja i nacjonalizacja, przepływy kapitałowe oraz gospodarka planowa. Modele ekonomiczne są wymienne – kapitalistyczną implementację można zastąpić inną bez ingerencji w rdzeń silnika.

Ludność

Mieszkańcy jako pojedyncze osoby lub jako zagregowane grupy, w zależności od wymaganego poziomu szczegółowości. Dane demograficzne, wykształcenie, potrzeby, warstwy społeczne i migracja.

Społeczeństwo

Zaufanie do rządu, legitymizacja, wskaźniki społeczne i ich sprzężenia zwrotne, wartości i normy kulturowe. Wskaźniki są obliczane na podstawie grafu zależności, dzięki czemu można je dowolnie łączyć.

Infrastruktura i transport

Budynki, sieci transportowe, pojazdy i rozkłady jazdy, łańcuchy dostaw, magazyny oraz wykrywanie przerw w dostawach.

Świat i przestrzeń

Świat w postaci siatki podzielonej na chunki, z terenem, zasobami naturalnymi i strefami. Poziom szczegółowości symulacji jest regulowany osobno dla każdego chunku, dzięki czemu można obliczać duże mapy bez utraty wydajności.

Modding

API moddingowe umożliwia dodawanie nowych typów budynków, towarów i wskaźników społecznych, rejestrowanie własnych modeli ekonomicznych oraz pisanie logiki gry w języku Lua.

Do czego można to wykorzystać


Engine nie powstaje wyłącznie z myślą o grach. Ponieważ nie jest powiązany ani z grafiką, ani z interakcją użytkownika, można go uruchomić wszędzie tam, gdzie trzeba zasymulować społeczeństwo lub gospodarkę.

Gra strategiczna typu city-builder

Frontend wysyła polecenia i odbiera zdarzenia, a engine działający w tle przeprowadza całą symulację.

Ekonomiczna gra typu sandbox

Porównanie reakcji różnych systemów gospodarczych na ten sam szok zewnętrzny.

Szkolenie w zakresie sztucznej inteligencji

Deterministyczna pętla typu „headless”, z którą agent może pracować z pełną prędkością sprzętu.

Modelowanie scenariuszy

Symulacja przemian gospodarczych i społecznych oraz obserwacja ich skutków.

Specyfikacje techniczne


Biblioteka

Język: C#
Platforma docelowa: .NET 10
Licencja: LGPL v3
Konfiguracja: Fluent Builder lub TOML
Dystrybucja: biblioteka klas .NET

Jakość i testowanie

Testy: xUnit, FluentAssertions
Testy porównawcze: BenchmarkDotNet
Projekt: SOLID, oparty na danych, oddzielne warstwy
Tryby: czasu rzeczywistego i headless

Stan projektu


PolisEngine znajduje się we wczesnej fazie rozwoju i na razie nie nadaje się do użytku. Trwa budowa podstawowej infrastruktury, a większość systemów symulacyjnych jeszcze nie istnieje. Publiczne API nie jest stabilne i będzie ulegać zmianom bez uprzedzenia. Nie nadaje się więc na razie do wdrożenia.

Wczesny etap rozwoju

Kod i rozwój


PolisEngine powstaje w ramach otwartego projektu na GitHubie. Kod, dokumentacja architektury oraz plan rozwoju są publicznie dostępne – można je przeglądać, wykorzystywać i zgłaszać uwagi.

Aktualny stan: wczesny etap rozwoju

PolisEngine to projekt typu open source. Warunki użytkowania można znaleźć w licencji dostępnej w repozytorium.