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 typu: co się stanie, jeśli państwo podniesie podatki, znacjonalizuje przedsiębiorstwa lub nastąpi przerwanie dostaw towarów. Powstała jako zaplecze dla gier strategicznych typu „budowanie”, 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ę.

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

Bezgłowy

Brak zależności od silnika gry ani interfejsu użytkownika

Deterministyczny

To samo dane zawsze daje 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 silnik


PolisEngine modeluje kilka powiązanych ze sobą domen. Każda z nich działa niezależnie, ale prawdziwa dynamika powstaje dopiero w wyniku ich wzajemnego oddziaływania w poszczególnych taktach 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 – kapitalistyczny model można zastąpić innym bez ingerencji w jego istotę.

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.

Firma

Zaufanie do rządu, legitymizacja, wskaźniki społeczne i ich wzajemne powiązania, wartości i normy kulturowe. Wskaźniki są obliczane za pomocą wykresu 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 siatce podzielony na bloki symulacyjne, teren, zasoby naturalne i strefy. Poziom szczegółowości symulacji jest regulowany dla każdego bloku z osobna, dzięki czemu można obliczać duże mapy bez utraty wydajności.

Modding

API moddingowe pozwala dodawać nowe typy budynków, towarów i wskaźników społecznych, rejestrować własne modele ekonomiczne oraz pisać logikę gry w języku Lua. Bardziej niebezpieczne uprawnienia, takie jak dostęp do sieci, muszą być wyraźnie zezwolone.

Do czego można to wykorzystać


Silnik nie powstał 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ę.

Strategia rozwoju

Frontend wysyła polecenia i odbiera zdarzenia, a silnik 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: w czasie rzeczywistym i bezinterfejsu

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 programowanie


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 w repozytorium.