Moja diplomová práca Half-Life sa začína jednoduchou otázkou:
Čo sa stane, keď Conwayova hra Life prestane byť striktne binárna?
V klasickej hre Life je každá bunka buď živá, alebo mŕtva. Práve táto ostrosť je jedným z dôvodov, prečo je model taký zaujímavý: pravidlá sa dajú zapamätať za pár sekúnd, ale výsledné správanie obsahuje stabilné objekty, oscilátory, lode, klzáky, generátory klzákov aj výpočtovo univerzálne konštrukcie.
Binárny stavový priestor je však zároveň obmedzenie. Veľa systémov sa medzi krajnými stavmi nepohybuje okamžite. Niečo môže rásť, slabnúť, doznievať alebo zostať v prechodnom stave. V práci som túto myšlienku skúmal cez nový trojstavový celulárny automat Half-Life.
Model možno chápať ako diskrétnu aproximáciu fuzzy verzie Conwayovej hry Life. Zachováva mriežku, Mooreovo okolie aj synchrónnu aktualizáciu buniek, ale stavový priestor rozširuje z dvoch hodnôt na tri:
- označuje mŕtvu bunku,
- označuje polovične živú bunku,
- označuje živú bunku.
Názov Half-Life odkazuje práve na medzistav . Bunka sa nemusí narodiť ani zaniknúť v jednom kroku. Narodenie prebieha ako a zánik ako .
Čo práca rieši
Cieľom nebolo iba definovať nový automat, ale aj zistiť, či také malé rozšírenie vytvára zaujímavé správanie. Preto práca spája formálnu definíciu, automatizované vyhľadávanie, experimentálnu analýzu a webový simulátor.
Hlavné časti práce sú návrh fuzzy rozšírenia, formálna definícia modelu Half-Life, implementácia nástroja na hľadanie pravidiel a vzorov, experimenty s intervalovými pravidlami a webová aplikácia Fuzzy Life na simuláciu výsledkov.
Model Half-Life
Mriežka je rovnaká ako v klasickej hre Life:
Stavový priestor je:
Konfigurácia je funkcia, ktorá každej bunke v mriežke priradí stav:
Okolie je osemprvkové Mooreovo okolie:
Rozdiel oproti klasickej hre Life je v súčte susedov. Keďže sused môže mať hodnotu , alebo , výsledný súčet už nemusí byť celé číslo od 0 do 8. Môže nadobúdať hodnoty:
Súčet susedov bunky v konfigurácii je:
Pravidlo Half-Life zapisujem pomocou častí B a S. B určuje intervaly pre narodenie a S intervaly pre prežitie. Napríklad:
B3-7/S2-3,5-8znamená, že bunka smeruje k narodeniu pri súčte susedov od 3 do 7, zatiaľ čo živá alebo polovične živá bunka prežíva pri súčte od 2 do 3 alebo od 5 do 8.
Jadro modelu tvorí cieľová funkcia:
Tá neurčuje nový stav priamo. Iba povie, či sa má bunka pohybovať smerom k stavu , alebo k stavu . Lokálna prechodová funkcia potom posunie aktuálny stav o polovicu smerom k cieľu:
Half-Life teda neprepisuje bunku naraz. Bunka sa mení postupne, takže narodenie aj zánik majú prechodnú fázu.
Prečo treba automatizované hľadanie
V klasickej hre Life existuje pre Life-like pravidlá možností. V Half-Life je možných súčtov susedov 17. Keby sme povolili ľubovoľné množiny pre narodenie a prežitie, dostali by sme:
To je príliš veľký priestor na ručné skúmanie. Aj pri obmedzení na jednoduché intervaly vznikne viac než 23-tisíc kombinácií. Preto som vytvoril nástroj Half-Life Explorer v Ruste.
Nástroj simuluje veľké množstvo pravidiel, generuje náhodné počiatočné konfigurácie a hľadá vzory, ktoré sa opakujú, pohybujú, stabilizujú alebo rastú. Pri hlavných 2D experimentoch bolo každé pravidlo testované na 3 000 náhodných konfiguráciách na mriežke .
Detekcia je empirická, nie dôkazová. Slúži na hľadanie kandidátov, ktoré sa následne dajú overovať a skúmať podrobnejšie.
Teoretický príklad
Pre pravidlo B1/S1.5-2 práca ukazuje jednoduchý pohybujúci sa vzor. Nech je globálna prechodová funkcia a vzor so štyrmi polovične živými bunkami:
Pre každý čas platí:
Inými slovami, vzor má po každej generácii rovnaký tvar a je posunutý o jednu bunku doľava. Ide teda o loď periódy 1 s rýchlosťou .
Vývoj vzoru pri pravidle B1/S1.5-2. Kliknutím sa vzor otvorí priamo v simulátore.
Výsledky experimentov
Prvý veľký experiment prešiel všetky pravidlá s jedným intervalom pre narodenie a jedným intervalom pre prežitie: 153 možných intervalov narodenia, 153 možných intervalov prežitia, 23 409 pravidiel a 70 227 000 simulácií.
V tomto priestore sa našlo 243 pravidiel, ktoré vygenerovali aspoň jeden pohybujúci sa vzor. Najvýraznejším pravidlom bolo B1/S1.5-2, pri ktorom sa po deduplikácii našlo 20 typov klzákov a 3 typy oscilátorov.
Druhý experiment skúmal pravidlá s deleným intervalom prežitia, napríklad:
B3-7/S2-3,5-8Také pravidlo dovolí bunke prežiť v nízkej alebo vysokej hustote susedov, ale nie v medzere medzi nimi. V simuláciách to často bránilo vzniku veľkých stabilných zhlukov a podporovalo cykly rastu a rozpadu.
Z 11 475 testovaných pravidiel v tomto experimente vytvorilo klzáky 309 pravidiel. Z nich 266 používalo delený interval prežitia. Nejde o matematický dôkaz, že delené intervaly sú všeobecne lepšie, ale je to silný empirický signál, že ide o zaujímavý smer ďalšieho skúmania.
Po zlúčení a deduplikácii výsledkov obsahoval finálny katalóg:
- 514 pravidiel podporujúcich pohybujúce sa štruktúry,
- 3 381 objavených vzorov,
- klzáky a lode s rôznymi rýchlosťami,
- oscilátory s mnohými periódami,
- vzory pripravené na otvorenie vo webovom simulátore.
Najpomalší nájdený klzák má rýchlosť .
Oscilátor periódy 60 pri pravidle B1.5/S1.
Fuzzy Life
Súčasťou práce je aj webová aplikácia Fuzzy Life, ktorá umožňuje tieto pravidlá a vzory skúšať interaktívne. Simulátor je napísaný v Reacte a vykresľuje sa cez HTML5 Canvas.
Pravidlá Half-Life a objavené vzory si môžete vyskúšať priamo vo Fuzzy Life.
Otvoriť Fuzzy Life ->Simulátor prepája offline vyhľadávanie v Ruste s vizuálnym prostredím v prehliadači. Obsahuje režim Half-Life, klasickú Conwayovu hru Life, jednorozmerné automaty aj ďalšie experimentálne varianty. Pri Half-Life režime sú dostupné prednastavené pravidlá a vzory z katalógu, takže výsledky práce nie sú iba tabuľky v texte, ale dajú sa okamžite spustiť a pozorovať.
Záver
Hlavným výsledkom práce je ukážka, že aj veľmi malé rozšírenie klasickej hry Life vytvára veľký a zaujímavý priestor pravidiel. Jeden medzistav mení spôsob, akým sa bunky rodia, prežívajú, zanikajú a vytvárajú pohybujúce sa štruktúry.
Half-Life nie je náhradou za Conwayovu hru Life. Je to blízky model, ktorý kladie inú otázku: čo sa stane, keď život nemusí byť hneď živý alebo mŕtvy, ale môže byť najprv polovičný?