System rozproszony / ESP32
Civilization Zero.
Trzy urządzenia. Trzy niezależne światy.
Schemat procesu
Decyzje mieszkańców
Autorski system cywilizacji agentowych dla trzech urządzeń ESP32-S3. Każde prowadzi własny świat, przechowuje jego historię i wymienia informacje z pozostałymi. Budowałem wspólny silnik, komunikację, trwałość danych oraz obserwatorium pozwalające śledzić rozwój tych światów.
Historia i zakres pracy
Trzy światy bez jednego centralnego silnika
Każde urządzenie uruchamia własny silnik cywilizacji i zachowuje własny stan. Jeden z węzłów udostępnia dodatkowo lokalną stronę z publicznymi informacjami, ale nie staje się przez to sterującym centrum. Wiedza o sąsiadach pochodzi z odebranych wiadomości. Zbudowałem wspólne źródła oprogramowania dla wszystkich węzłów oraz oddzieliłem tożsamość świata od profilu, którym kompiluje się jego firmware.
Mieszkańcy, rodziny i społeczeństwo
Model obejmuje indywidualnych mieszkańców, gospodarstwa domowe, pracę, własność, pamięć i przekonania. Relacje społeczne i instytucje wynikają z działań oraz potrzeb tych agentów. Rozwijałem reguły lokalnych decyzji i ich konsekwencje dla całego świata. Nazwanie przez obserwatora większego zjawiska nie powinno sterować mieszkańcami. To pozwala badać przebieg symulacji bez wpisywania z góry oczekiwanego scenariusza.
Komunikacja, która uwzględnia zgubioną wiadomość
Przygotowałem komunikację przez ESP-NOW, z kontrolą poprawności pakietów, potwierdzeniami, ponawianiem i rozpoznawaniem duplikatów. Wymiana wymagająca uzgodnienia przechodzi przez osobne etapy przygotowania, akceptacji, zatwierdzenia i potwierdzenia wyniku. Sprawdzałem scenariusze utraty wiadomości, zmiany ich kolejności i restartu uczestnika. Ważne było, aby spóźniony albo powtórzony pakiet nie oznaczał wykonania tej samej operacji po raz kolejny.
Historia, która przeżywa restart
Rozwijałem zapis stanu i dziennika na urządzeniu oraz odzyskiwanie tożsamości po ponownym uruchomieniu. Zatrzymanie jednego węzła dotyczy jego własnego czasu; pozostałe nie muszą rozpoczynać świata od nowa. Praca obejmowała także odzyskiwanie po wcześniejszych problemach i zachowanie istniejących historii. Zmiana oprogramowania, odtworzenie zapisu i utworzenie nowej cywilizacji pozostają odrębnymi czynnościami.
Jeden silnik: komputer i urządzenia
Oddzieliłem logikę C++ od warstwy sprzętowej, dzięki czemu ten sam model można badać na komputerze i przygotować dla ESP32. Symulator pozwala zmieniać warunki sieci, odłączać węzły i odtwarzać ten sam przebieg. Praca obejmowała również uruchomienia na fizycznych płytkach oraz sprawdzanie ograniczeń pamięci. Wynik symulatora i obserwacja sprzętu odpowiadają na różne pytania, dlatego zachowuję obie ścieżki.
Rzeczywisty problem: pamięć przestrzenna mieszkańców
Podczas badania upadku dwóch światów znalazłem błąd w ograniczonej pamięci przestrzennej: kolejność przeglądania otoczenia wypierała użyteczne informacje o zasobach. Poprawka wybierała najlepszą zaobserwowaną żywność, materiał i najważniejsze zagrożenie. Nie dopasowywałem przy tym śmiertelności ani rozrodczości do oczekiwanego zakończenia. Porównanie wielu przebiegów pozwoliło sprawdzić przyczynę błędu przy zachowaniu różnych możliwych losów cywilizacji.
Obserwatorium i gazeta świata
Zbudowałem warstwę zbierającą publiczne informacje i pokazującą historię trzech światów obok siebie. Obejmuje ona lokalną stronę, zewnętrzny zapis obserwacji oraz rozwój gazety świata. Podgląd zachowuje informację o świeżości danych i nie dopowiada prywatnego stanu sąsiedniego węzła. Obserwator pozostaje poza silnikiem decyzji, dzięki czemu można analizować wydarzenia bez wpływania na ich wynik samym oglądaniem.
Co daje ta praca
Projekt połączył programowanie urządzeń, system rozproszony, model agentowy i narzędzia obserwacji. Pokazuje także mój sposób badania błędów: od historii zdarzeń do poprawki ich rzeczywistej przyczyny.
Portfolio przedstawia zbudowane elementy i historię badań. Nie jest podglądem bieżącego stanu urządzeń.