Wirtualne Życie

[wróć]    

Cuda złożoność

Wojny rdzeniowe

Dylemat więźnia

Chaos

Fraktale

Automaty komórkowe

Życie na skraju chaosu.

Ewolucja i algorytmy genetyczne

Wirtualne ekosystemy

Wirtualne neurony

 

Cuda złożoność

Jeśli jakimś cudem nie zaśniecie w trakcie czytania tego artykułu, dowiecie się co mają wspólnego ze sobą: chaos, fraktale, algorytmy genetyczne, wojny rdzeniowe, sieci neuronowe, teoria gier i .... doprowadzająca was nocą do szaleństwa kapiąca woda z kranu. Przekonacie się, że nie tylko Bóg gra w kości lecz również człowiek, na dodatek aby coś ulepszyć lub lepiej zrozumieć. Poruszymy także kwestie: początku - czy naukowcy postulujący, że świat powstał drogą ewolucji mają rację, czy też należy ją przyznać religii mówiącej, że życie powstało za sprawą ingerencji siły wyższej?..i porządku - Czy harmonia i piękno współdziałania organów człowieka mogły powstać przez przypadek? Odpowiedzi będzie jednak trudniej zrozumieć niż postawione pytania.

Otaczający nas świat jest skomplikowany bardziej niż jesteśmy to sobie w stanie wyobrazić. Ciało ludzkie składa się z bilionów współdziałających komórek, procesów i związków chemicznych. Wystarczy przeczytać fragment podręcznika do fizjologii, by ulec fascynacji tym jak dobrze to wszystko do siebie pasuje, mimo całej towarzyszącej temu komplikacji. Na razie pozostaje nam jedynie fascynacja, bo wyjaśnić tego zjawiska współczesna nauka nie potrafi. Na przykład znana ze szkolnej ławy fizyka dobrze radzi sobie z układami trzech poruszających się obiektów, niestety jest nieskuteczna się gdy układ zawiera tych obiektów więcej. Naukowiec podobnie jak normalny człowiek jeśli nie może czegoś poznać w całości, rozbija to coś na czynniki pierwsze. Każdy zapewne zna przypowieść o słoniu: trzech niewidomych ludzików dotykając słonia w różnych miejscach z przekonaniem wygłaszało o nim zupełnie różne twierdzenia. Podobnie jak oni nauka kroi słonia na plasterki by stwierdzić że to czym naprawdę jest to owe parujące flaczki. Oczywiście z powrotem nie jest w stanie poskładać oryginału. W rzeczywistości im bardziej analizujemy fragmenty całości tym mniej dowiadujemy się o wzajemnych relacjach, a widząc jak mało wiemy tniemy i dzielimy w nieskończoność (popadając w błędne koło).

Chcąc opisać coś co jest nawet mniej złożone od słonia nie możemy rozbijać tego na atomy, gdyż utracimy ogląd całości. Coraz wyższy stopień komplikacji, widoczny również w powyższych rozważaniach możemy ukrócić w inny sposób niż poprzez redukcję świata do atomów. Musi być inny sposób. Załóżmy, że istnieją proste reguły kierujące naturalnymi zjawiskami, oraz że to właśnie te reguły powodują całą widoczną gołym okiem złożoność. Zwolennicy nauki zwanej Teorią Systemów są przekonani, że odnalezienie tzw. systemowych praw pozwoliłoby zrozumieć działanie układów złożonych: społeczeństw, mózgu, galaktyk i gry w szachy. Twierdzą oni, że istnieją prawa uniwersalne i to je właśnie powinniśmy badać w pierwszej kolejności. Czy mamy podstawy, aby uwierzyć Teoretykom przez duże „T” i co z tego wynika dla osoby posiadającej peceta? Otóż przy użyciu komputera osobistego możemy w prosty sposób przekonać się, jak prostota generuje nam urzekające piękno złożoności - właśnie to co dostrzega każdy średnio wrażliwy student medycyny na pierwszym roku. Powiemy teraz o fraktalach, automatach komórkowych, wojnach rdzeniowych i teorii gier. Bądźcie przygotowani na ostrą jazdę.

 

Wojny rdzeniowe

Przemieszczające się na ekranie kolorowe kwadraciki, zjadające się nawzajem, dokonujące nieskończonych podziałów - oto jak wygląda świat/arena wojen rdzeniowych. Historia Wojen Rdzeniowych zaczęła się w roku 1982, kiedy to na łamach renomowanego czasopisma naukowego profesor Dewdney zaproponował nową koncepcję rozrywki. Ogólnie gra polegać miała na walce programów-wojowników w pamięci komputera, która stanowić miała dla nich arenę lub inaczej rdzeń. Dewdney wraz ze swoimi studentami opracował szczegółowe zasady kierowania rozgrywką czym rozpoczął niegasnący szał wirtualnych wojen. Nikomu te wojny nie szkodziły a wręcz dostarczały rozrywki. Środowisko gry w wojnach rdzeniowych jest ściśle kontrolowane przez komputer i nie ma mowy o przeniknięciu takiego wojownika do systemu operacyjnego - to tak jakbyśmy chcieli wypasać kozy na Marsie. Jednak w jakiś czas później, pewni ludzie - dziś zwani hakerami - zmodyfikowali pomysł Dewdneya i zapytali: jak bardzo cool byłoby gdyby dać wojownikowi zupełną swobodę poczynań? Z tej właśnie idei narodził się wirus komputerowy. Wróćmy jednak do wojen rdzeniowych w wersji Super Light.

Gracz wojen rdzeniowych wystawia do walki specjalnie zaprogramowanego (czytaj wytrenowanego) wojownika. Najczęściej składa się on z kilku linijek programu które wyglądają mniej więcej jak polecenia asemblera. Każda linia programu zawiera jedno polecenie napisane w specjalnie stworzonym do tego celu języku RedCode, wzorowanym zresztą na asemblerze. Wojownicy umieszczani są na arenie walki składającej się z następujących po sobie komórek pamięci, zapętlonych w taki sposób, że po dojściu do ostatniej trafiamy na pierwszą. Na monitorze arena wygląda jak ekran z programu Norton Speed Disk lub Disk Doctor - tam jedna komórka to jeden kluster dyskowy. Pojedyncza instrukcja z „ciała” wojownika zapełnia tylko jedną komórkę pamięci areny. Na początku gry, losowane są miejsca startowe dla poszczególnych wojowników. Od takiego miejsca program umieszcza w kolejności cały kod wojownika. Rozpoczyna się rozgrywka. Każdy z wojowników ma jeden takt procesora na wykonanie jednej instrukcji. Arbiter pobiera je według kolejności umieszczenia na arenie. Wojownik A wykonuje jeden ruch po nim B i tak do knockoutu. Celem gry jest zablokowanie przeciwnika, aby się zapętlił lub wykonał instrukcję niedozwoloną. Strategie, choć najprzeróżniejsze prowadzą jednego celu - podsunięcia w miejsce linii programu przeciwnika własnego rozkazu lub wykasowania jego rozkazu instrukcją pustą. Mimo prostych zasad gra jest niepowtarzalna - dwaj tacy sami wojownicy mogą staczać różne boje. Podobnie jak w boksie o wyniku nie decyduje jedna runda, lecz cała ich seria. Po 100 walkach wiadomo, który wojownik jest lepszy. Ciekawie robi się gdy wprowadzamy na arenę kilku wojowników. W chaosie wielokolorowych kropek dostrzegamy swojego podopiecznego. Na chwile wcielamy się w trenera zapominając o tym, że ekscytujemy się czymś abstrakcyjnym i nierealnym. Dzięki żywiołowości akcji ten wirtualny świat staje się bardzo namacalny....i nieprzewidywalny. Taki jak materialny świat.

 

Dylemat więźnia

Wojny rdzeniowe generują bardzo złożone, ciekawe i nieprzewidywalne wyniki. Jest to jednak przede wszystkim dobra rozrywka, trudno się tutaj dopatrzyć wyraźnych analogii pomiędzy światem rzeczywistym a areną walki. Jej idea okazała się jednak na tyle płodna i uniwersalna, że z biegiem czasu, w oparciu o nią zaczęto podejmować próby symulacji zjawisk zachodzących w naturze. Przykładem jednym z wielu jest świeża dziedzina wiedzy zwaną Teorią Gier.

Teoria Gier jest nauką o tym jak podejmujemy, lub powinniśmy podejmować decyzje w sytuacjach konfliktu interesów, tzn. konkurencji o dany zasób, rzecz, lub cokolwiek co ma dla nas jakąś wartość. Czy powinniśmy dążyć do maksymalizacji zysku kosztem drugiej strony, czy też w pewnych sytuacjach korzystniej jest współpracować dla osiągnięcia wspólnego zysku? W mniej lub bardziej skomplikowanych modelach Teorii Gier niezmiennie przewija się motyw konkurencji i kooperacji. Żyjemy w czasach panowania ustroju kapitalistycznego i wydawać by się mogło, że status hasła „kooperacja” jest lekko nadwerężony. Nic bardziej mylnego - symulacje komputerowe pokazują, że nawet w warunkach najbardziej ostrej konkurencji zwyciężają osobniki stawiające przede wszystkim na współpracę, zaś na konkurencję tylko wtedy, gdy trafią na kogoś kto chce ich wykorzystać.

Aby lepiej wyjaśnić na czym polega Teoria Gier posłużymy się przykładem jej bazowego problemu, czyli Dylematu Więźnia. Wyobraź sobie, że jesteś jednym z dwóch szefów mafii oskarżonych o ciężką zbrodnię, którą faktycznie wspólnie popełniliście. Policja nie ma wystarczającej liczby dowodów aby skazać was obu, na przesłuchaniu stara się więc z jednego z was wyciągnąć zeznania obciążające drugą stronę. Pojawia się poważny dylemat, ponieważ nie wiemy jaką strategię przyjmie nasz partner. Jeśli będzie lojalny (współpraca) wówczas odmówi złożenia zeznań, oczekując że postąpimy podobnie. Z drugiej strony, chcąc otrzymać całkowite uniewinnienie może złożyć obciążające nas zeznania (konkurencja). Podobnie jak nasz partner możemy być lojalni: jeśli i partner jest lojalny oszacujmy zysk na +1 na osobę - niski ponieważ nie mamy pewności czy policja nie odnajdzie jednak dowodów przeciwko nam. Jeśli jednak będziemy lojalni ale partner nas zdradzi wówczas dostajemy -2, partner +2 i za naiwność natychmiast lądujemy za kratkami. Ze strachu przed wykorzystaniem, lub nadzieją na całkowite uniewinnienie możemy wybrać strategię zdrady: wtedy jeśli partner będzie lojalny wygrywamy najwyższą stawkę +2 bo on idzie siedzieć a my zostajemy na wolności, jeśli oboje zdradzimy wówczas lądujemy za kratkami, ale odpowiedzialność rozkłada się na dwie osoby, dostajemy -1 punkt. Cóż więc mamy zrobić w takiej sytuacji? Problem ten przekłada się na wiele innych sytuacji gdy dokonujemy  różnych wyborów tego typu, dlatego też Teoria Gier ma zastosowanie w ekonomii, psychologii, strategiach militarnych, etologii itp.

Aby znaleźć optymalną strategię postępowania Robert Axelrod zorganizował turniej programów komputerowych zaprogramowanych do uczestnictwa w takich rozgrywkach. W tej i następnej edycji turniej zwyciężył bardzo prosty „wojownik”, który w turze pierwszej sygnalizował gotowość do współpracy, zaś w następnych postępował jak jego partner, oszukiwał jeśli i on oszukiwał, współpracował jeśli i partner wyrażał chęć współpracy - jak się okazuje jest to reguła istnienia większości populacji zwierząt. Pozostałe strategie, nawet bardzo skomplikowane okazały się mniej efektywne. Oczywiście strategia „jak ty mnie, ja tobie” nie jest uniwersalna, bo każda sytuacja posiada dodatkowe niepowtarzalne cechy: na przykład wybór możliwy jest tylko raz jak to ma miejsce w oryginalnym sformułowaniu dylematu więźnia. Istotne jest, że działanie programu możemy dopasować do sytuacji i przeprowadzając symulację wykazać, która strategia jest najkorzystniejsza. Do Teorii Gier jeszcze nawiążemy w dalszej części artykułu przy omawianiu algorytmów genetycznych. W dalszej kolejności przedstawię teorię chaosu, która wyjaśni dodatkowe aspekty złożoności wirtualnych światów.

 

Chaos

Termin „chaos”, ostatnio tak często pojawiający się w publikacjach popularno-naukowych należy do czołówki najbardziej modnych określeń. Chaos to, chaos tamto, ale w gruncie rzeczy po przeczytaniu książki poświęconej temu zagadnieniu nie do końca zdajemy sobie sprawę z czym mamy do czynienia. Można nawet odnieść wrażenie, iż sam autor nie czując się pewnie w kluczowych kwestiach pomija je milczeniem. Mając na uwadzę porażki innych,  z góry przepraszam, za mierny efekt.

Oczywiście w żadnej z książek o chaosie nie może zabraknąć stwierdzenia że „poruszenie skrzydełek motyla w Indonezji może spowodować huragan w Ameryce Północnej”. Ten slogan rozmija się z prawdą, bo gdyby tak było, to zamiast inwestować w Japonii w superelastyczne budynki, można byłoby zapobiec trzęsieniu ziemi umiejętnie poruszając dużym palcem u nogi. Aby to ogólne stwierdzenie było prawdą należy zawęzić je do pewnej kategorii zjawisk w których faktycznie niewielka zmiana jakiegoś czynnika może spowodować kolosalne konsekwencje - mówimy wówczas, że układ jest w stanie chaotycznym = niesłychanie podatnym na zmiany a przez to niesłychanie nieprzewidywalnym. Dla przykładu przyjmijmy, że zachowanie się kapiących kropli z kranu opisuje pewien wzór rekurencyjny - taki przepis który mówi, jak z A otrzymać B, a z B otrzymać C i tak w nieskończoność. Wzór rekurencyjny może mieć następującą postać: zmierz odległość pomiędzy kapnięciami, podnieś do potęgi i wymnóż przez parametr R a otrzymasz czas, który upłynie do następnego kapnięcia (tak naprawdę nie znamy wzoru na kapanie wody). Zwróćmy również uwagę na fakt, że wzór rekurencyjny opisany jest równaniem nieliniowym - kolejne odstępy kapania wynikają z potęgowania wartości zmiennej np. B =R* A*(1-A). Nieliniowość pojawia się zawsze wtedy, gdy zmienna wpływa sama na siebie poprzez sprzężenie zwrotne. Proces kapania może być chaotyczny, ale nie musi, to znaczy czasami notujemy regularne kapanie, a czasami w cale nie potrafimy odnaleźć reguły w tym procesie. To czy system jest chaotyczny, czy nie zależy od parametru V którym dla naszego przykład będzie szybkość strumienia wody płynącej w kranie. Odkręcając wodę bardziej lub mniej (tak jedna aby nie płynęła strumieniem), i notując czasy kapania możemy zauważyć, że dla początkowych  wartości krople kapią regularnie. Zwiększając strumień przepływu wody zauważamy, że kapanie staje się coraz bardziej złożone ale schemat cały czas jest powtarzalny - co więcej są pewne wartości graniczne, których przekroczenie wprowadza nową cykliczność. Te momenty graniczne (wartości przepływu) zwane są punktami bifurkacji. Między kolejnymi punktami bifurkacji układ zachowuje się z grubsza podobnie. Bardzo ważnym punktem bifurkacji jest wartości po przekroczeniu której układ wchodzi w stan chaosu.

Mówimy o chaosie ponieważ dla tej szczególnej wartości (i wyższej) parametru, proces kapania jest niesłychanie podatny na wpływ zewnętrzne. Dla przykładu niewielka zmiana temperatury płynącej wody, wywoła „kolosalne skutki” wprowadzając dodatkową zmianę w naszą rekurencję. A jak wiemy z istoty rekurencji zmiana ta w każdym kolejnym obliczeniu będzie narastała, tym bardziej im układ jest bliższy chaosowi. Gdybyśmy jednak nasz kran umieścili w idealnych warunkach znając wzór na kapanie moglibyśmy przewidzieć kolejne odstępy pomiędzy kapiącymi kroplami. Na tym bowiem polega istota chaosu deterministycznego - chociaż proces będący w stanie chaotycznym jest bardzo wrażliwym na zmianę parametrów wejściowych, to przy założeniu, że później nic się nie zmienia a nasze obliczenia są idealnie dokładne moglibyśmy przewidzieć rozwój układu. Niestety zwykle algorytm ten jest nieznany, a na dodatek nasze komputery nie są w stanie przeprowadzić „idealnych” obliczeń ponieważ wszystkie obliczenia obcinają któreś miejsce po przecinku, a więc wprowadzają zakłócenia w rodzaju „machnięcia skrzydełek w Indonezji”. Ta cecha nie jest istotna gdy generujemy wyniki dla układów stabilnych ale dla chaotycznych owszem - tak jak wzory mechaniki relatywistycznej nie są potrzebne w codziennym życiu, ale stają się niezbędne dla prędkości bliskich C. Z powodu wrażliwości procesów chaotycznych komputery nigdy nie będą w stanie ich prognozować. Zapamiętajmy więc, że dany układ jest w stanie chaotycznym czyli bardzo wrażliwym na zmiany tylko w pewnych sytuacjach. Wówczas jest nieprzewidywalny bo: w świecie wirtualnym komputery zaokrąglają obliczenia a w rzeczywistości pojawiają się zmiany czynników, których nie bierzemy pod uwagę (bo na przykład są tak znikome, że nie jesteśmy ich w stanie zmierzyć). Na przykładzie kapania wyjaśniliśmy sobie podstawowe pojęcia teorii chaosu: źródło nieprzewidywalności, punkty bifurkacji itp. Potencjalny (możliwy) rozwój stanów układu chaosu deterministycznego możemy przedstawić przy pomocy wykresu fazowego na który naniesione są tak zwane atraktory - graficznie są to linie po których „porusza się” obiekt (lub zmieniają się cechy nie związane z przemieszczaniem lecz na przykład temperaturą lub katalizacją reakcji chemicznych). Na przykład chcąc pokazać atraktor kulki staczającej się w dół lejka narysowalibyśmy linie krzywe zbiegające się do jednego punktu - środka lejka. Oprócz atraktorów, nazwijmy je „normalnych” posiadających tzw. cykle graniczne lub punkty stałe są również dziwne atraktory. Te dziwne atraktory to nic innego jak wykresy zachowania się układów chaotycznych. Przyglądając się na przykład atraktorowi Lorentza zauważamy, że trajektoria zachowania obiektu zależy od najdrobniejszych detali sytuacji początkowej. Niewielka zmiana w dowolnym momencie przeprowadzania symulacji, lub rzeczywistego eksperymentu powoduje przeskoczenie na zupełnie inną trajektorię, w związku z czym układ w sumie zachowuje się chaotycznie, choć jest ściśle deterministyczny.

 

Fraktale

Drugą cechą atraktorów, obok „wrażliwości” na zmianę parametrów jest ich fraktalna budowa. Słowo „fraktal” ukuł dla teorii chaosu Mandelbrot. Nawiasem mówiąc odkryty przez niego fraktal jest jednym z najczęściej prezentowanych w publikacjach naukowych. Termin „fraktal” określa nieregularne i „postrzępione” figury, które wyglądają podobnie we wszystkich skalach obserwacji. Powiększając fraktala w różnych miejscach odnajdujemy znajome motywy, aczkolwiek zawsze jesteśmy zaskakiwani ich nieprzewidywalnością. Podróż do wnętrza fraktala jest bardzo emocjonującą przygodą. Dobrze wiemy, że powiększanie rysunku, choćby był on zapisany w maksymalnej rozdzielczości, zawsze prowadzi do powstania efektu pixelozy - rozmycia szczegółów. Z fraktalem jest zupełnie inaczej. Obiekt ten w teorii jest nieskończenie głęboki, w praktyce powiększenie zależy od dokładności oprogramowania generującego fraktale. Na marginesie - polecam sharewarowy program FractInt, przy pomocy którego naocznie przekonamy się jak wyglądają fraktale, lub Iterations który dodatkowo generuje sekwencję video powiększania fraktala (to po prostu trzeba zobaczyć!). Na każdym swoim poziomie fraktal zachowuje cechy całości ale też zadziwia swoją różnorodnością. Motywy są wymieszane, rozciągnięte w przestrzeni, zakręcone, lecz mimo, że przedstawiają chaos w najczystszej postaci są po prostu urzekające. Najdziwniejsze jest to, że fraktale - obiekty o nieskończenie złożonej budowie - są generowane przy użyciu bardzo prostych wzorów rekurencyjnych  (wykres bifurkacji jest również fraktalem). Może więc cała złożoność natury, podobnie jak fraktale, jest tworzona przez niezwykle proste reguły? O tym jak bardzo są proste świadczy poniższy przykład tworzenia fraktala. Aby go zrozumieć musimy bez szemrania zaakceptować istnienie tzw. liczb zespolonych składających się z części rzeczywistej i urojonej. Jest to jedna liczba choć składa się z dwóch elementów - nie są one czyjąś fanaberią, w matematyce liczby zespolone są bardzo przydatne. (Poza tym służą do tworzenia fraktali). Na płaszczyźnie dwuwymiarowej na której generujemy fraktala, oś X oznacza część rzeczywistą a Y urojoną - tak więc każdy punkt to jedna liczba. Wzór rekurencyjny na prostego fraktala to Z2=Z1*Z1 + C, gdzie Z1 to poprzednia wartość liczby zespolonej, Z2 - wynik iteracji a C to stała wartość jakiejś liczby zespolonej. Dla każdego punktu na płaszczyźnie przeprowadzamy cykl iteracji stawiając czarną kropkę gdy obliczenia zmierzają do jakiejś granicy, i kolorową jeśli do nieskończoności. W ten banalny sposób powstaje złożony świat fraktala. To, co zobaczymy na ekranie reprezentuje wszystkie cechy chaosu deterministycznego: powtarzalność na różnych poziomach, wrażliwość na zmianę parametru, samoorganizację. W dalszej części artykułu pokażemy inne oblicze złożoności - automaty komórkowe - układy balansujące pomiędzy stabilnością i chaosem.

 

Automaty komórkowe

Automaty komórkowe mają w sobie coś z przedstawionych wcześniej Wojen Rdzeniowych i coś z fraktali. W latach siedemdziesiątych kiedy komputery jeszcze utrudniały życie, w kręgach samotników z Uniwersytetu w Cambridge popularna była gra Life. Aby w nią zagrać wystarczyło mieć szachownicę, lub kwadrat podzielony na pola oraz odpowiednią ilość dwukolorowych żetonów. Przed rozpoczęciem gry/symulacji na szachownicy ustawiano przypadkowy układ żetonów pustych i pełnych. Gra podzielona była na tury. W każdym ruchu przyglądamy się poszczególnym polom. Jeśli „pusty” żeton sąsiaduje z trzema „pełnymi” wówczas dzięki wsparciu sąsiadów „ożywa” lub jeśli ktoś woli następuje tam akt prokreacji. Drugą reguła mówi, że jeśli kwadrat sąsiaduje z dwoma „pełnymi” żetonami wówczas nic się nie dzieje. Jeśli natomiast wokół niego jest inna liczba sąsiadów niż dwa lub trzy to żeton „pełny” umiera z samotności, lub z powodu nadmiernego tłoku na planszy. W każdej turze przeglądamy stany wszystkich pól i zmieniamy konfigurację całej planszy. Czas w grze Life nie jest ciągły - automat działa zgodnie z tyknięciami zegara. Ewolucja układu odbywa się w oparciu o reguły lokalne - każda komórka aby się „zadeklarować” na kolejną turę potrzebuje tylko informacji o stanie swoich sąsiadów.

Podane reguły stanowią odpowiednik praw fizyki a żetony rzeczywistych obiektów, stąd nazwa gry Life - Życie. Można mieć wątpliwości co do zasadności tego stwierdzenia jeśli się nie widziało efektów takiej symulacji. Na szczęście komputery symulują automaty komórkowe w czasie rzeczywistym, co bardzo uatrakcyjnia pokaz. To co się dzieje na ekranie zadziwia do tego stopnia, że poważni naukowcy poświęcają temu zagadnieniu swoje prace doktorskie. O ile bowiem reguły ich funkcjonowania są niezwykle proste, o tyle efekty często przerastają rozumienie największych autorytetów w dziedzinie chaosu. Najciekawsze układy pojawiające się w trakcie ewolucji automatów komórkowych otrzymały swoje nazwy np.: bochenek, staw, pasieka, pulsar, szybowiec. Ostatni z nich - szybowiec - to zbiór żetonów poruszających się razem przez szachownicę. Dużym zainteresowaniem cieszyła się swojego czasu „wyrzutnia szybowców” - struktura wyrzucająca do trzydzieści ruchów „szybowiec”. Strumienie przecinających się szybowców tworzą wówczas nieprzewidywalne kombinacje. Niekiedy w ten sposób powstają kolejne „wyrzutnie szybowców” ostrzeliwujące siebie wzajemnie. Ukoronowaniem ewolucji tego układu jest umieszczenie wyrzutni w taki sposób, iż strumienie szybowców tworzą fabrykę, która montuje i wyrzuca co 300 ruchów statek kosmiczny! Ciekawe jest to, że mimo prostych reguł nikt nie jest w stanie przewidzieć jakie konfiguracje początkowe dadzą jakie rezultaty. Automaty komórkowe pozwalają symulować dowolne zjawiska zachodzące w świecie rzeczywistym: wzrost, reprodukcję, ewolucję i konkurencję.

 

Życie na skraju chaosu.

Wybierając różne reguły kierujące układem możemy definiować dowolnie dużo automatów komórkowych, lub wielowymiarowych światów wirtualnych. Owe reguły można zrozumieć poprzez analogię do wzoru na kapanie wody z kranu. Ten wzór również był pewną regułą ewolucji układu, w odróżnieniu jednak od układów dwuwymiarowych kapanie wody było jednowymiarowe (bo był to ciąg odstępów czasowych pomiędzy kroplami). Jak pamiętamy był tam jednak parametr który decydował o tym, czy układ kapiący zachowywał się regularnie czy też chaotycznie. Automaty komórkowe również zachowują się różnie zależnie od tego według jakich reguł działają: jedne z nich gasną po kilku iteracjach, inne generują powtarzalne acz monotonne wzory a jeszcze inne zachowują się jak „żywe”. Drugim czynnikiem decydującym o rozwoju układu komórkowego, obok reguł rządzących jego światem, jest stan początkowy. W programach służących do symulacji działania układów komórkowych stan początkowy jest zazwyczaj losowany, aczkolwiek możemy sami pobawić się w konstrukcję ciekawych układów - mając oczywiście największą frajdę jeśli pojawia się w nich samoorganizacja lub inne oznaki życia.

Stephen Wolfram jako pierwszy zadał pytanie jakie cechy reguł lokalnych oraz stanów początkowych powodują, że układ globalnie zachowuje się jak żywy - czyli przypomina nam funkcjonowanie rzeczywistości. Wolfram, bawiąc się różnymi kombinacjami reguł i stanów swoich jednowymiarowych układów doszedł do wniosku, że istnieją cztery typy zachowania się układów w długiej skali czasowej. Tego jakie reguły i jaki układ kropek stworzą daną klasę nie potrafił określić zanim nie przeprowadził symulacji (co świadczy o dziewiczości tej nauki). Po wielu miesiącach spędzonych na obserwacji migających pixeli Wolfram określił cechy tych czterech klas. Automaty komórkowe należące do Klasy I znikają, albo przechodzą do jednorodnego stanu. W przypadku Klasy II automaty  generują wzór powtarzający się okresowo. Automaty Klasy III zmieniają się w sposób chaotyczny. Ich struktury nigdy się nie powtarzają i nie posiadają śladów jakiejkolwiek regularności. Ostatnią najciekawszą grupę stanowią automaty Klasy IV, które generują współdziałające, ewoluujące struktury (takie jak opisana wcześniej wyrzutnia statków kosmicznych). Jak udało się wykazać Wolframowi Klasa IV leży pomiędzy Klasą II (powstawanie struktur okresowych) a Klasą III (totalny chaos). Jest to jakby punkt przejścia (bifurkacja) między nudną powtarzalnością a destruktywnym i nie wnoszącym nic chaosem. Na styku regularności i przypadkowości pojawia się twórcza adaptacja. Jak zwał tak zwał, w każdym razie organizmy te łączą zdolność do spontanicznego wprowadzania innowacji ze stabilnością. Ponadto co jest najciekawsze wydają się stanowić jeden superorganizm, zbiór współpracujących komórek mimo, że w regułach gry zapisana jest tylko lokalność (zależność komórek od jej sąsiadów). Samoorganizacja, powielanie, współpraca, powtarzalność a jednocześnie twórczy nieporządek są cechami określającymi Życie. Złożoność wprowadzana jest przez bliskość chaosu z jednej strony (Klasa III) zaś zdolność do uporządkowania przez powtarzalność z drugiej (Klasa II). Oba te pierwiastki - Ying i Yang są niezbędne dla powstania i utrzymania życia.

Pamiętając czym są dziwne atraktory możemy powiedzieć, że wykresy te zawierają wszystkie możliwe kombinacje długookresowego zachowania układu. Układ będąc w stanie chaosu może testować efektywność nowych rozwiązań, które osiąga przez przypadek poruszając się po różnych trajektoriach atraktora a następnie wycofywać się w obszar stabilności, jeśli nowe rozwiązanie będzie lepsze od poprzedniego. Chaos daje układom Klasy IV „natchnienie” i zdolność do adaptacji.

Jak pamiętamy, o przebiegu symulacji automatu komórkowego decydują reguły oraz stany początkowe. Zakładając że mówimy o rzeczywistym świecie reguły są w nim niezmienne. To co w nim obserwujemy to efekty pojawiania się różnych kombinacji czynników. Właściwie widzimy tylko te z układów, które są skuteczne tzn. tworzą struktury i ewoluują (Klasa IV), pozostałe tzn. Klasa I znikają lub trwają bez zmian, należące do Klasy II tworzą kryształy zaś Klasa III to działanie bez ładu i składu. Zjawiska rzeczywiste mogą przechodzić między Klasami pod wpływem działania czynników zewnętrznych. Na przykład badacz Blaine Cole posługując się kamerą video wykazał, że samotne mrówki zachowują się chaotycznie - błąkają się bez celu po czym odpoczywają.. Jeśli jednak ilość mrówek na określonej powierzchni przekroczy pewną gęstość progową wówczas w zachowaniu całej grupy pojawia się współdziałanie. Jak określił to Brian Goodwin „zamiast zbioru osobników zachowujących się w chaotyczny sposób nagle pojawia się jedna całość - kolonia funkcjonuje jak jeden superorganizm, wykazujący równocześnie rytm i przestrzenne uporządkowanie”. Jeszcze ciekawsze jest, że mrówki „wiedzą” o tym, tak dostosowując swoją gęstość aby żyć blisko tego punktu krytycznego. Jeśli na przykład badacz zmieni szerokość terytorium wylęgu, to po jakimś czasie mrówki przepchają jego granice na poprzednie miejsce aby gęstość powróciła do normy.

 

Ewolucja i algorytmy genetyczne

Proste automaty komórkowe można porównać do kolonii mrówek. Mówiąc w uproszczeniu każda mrówka jest identyczna, a o sukcesie decyduje ich współpraca w mrowisku, podobnie jak w przypadku automatów komórkowych układ początkowy. Co by się stało gdyby każdą z komórek potraktować jak niezależny organizm? Czy otrzymalibyśmy skuteczny model środowiska, wraz z jego całą złożonością?

Zanim odpowiemy na to pytanie podajmy sobie przepis na wirtualne organizmy. Każdej komórce w posiadanym automacie komórkowym dodajmy jeden wymiar - nić wirtualnego DNA zawierającą informacje o indywidualnym zachowaniu organizmu. Dodanie naszym komórkom genotypu spowoduje, że zamiast modelu organizmu kolektywnego otrzymamy model środowiska. Zależnie od kaprysu pozwólmy organizmom przemieszczać się w poszukiwaniu partnera lub ofiary (fauna), ewentualnie ograniczmy swobodę ruchu i kontaktu do najbliższych sąsiadów (flora). Po szczegóły techniczne kreacji nowego świata odwołajmy się do doświadczenia matki Natury. Aby wirtualny system żył swoim własnym życiem potrzebna jest nam ewolucja.

Proces ewolucji polega na stopniowym doskonaleniu organizmu. Jego „doskonałość” opiera się o dwie cechy: zdolność do reprodukcji i zdolność do przetrwania. Umiejętności przetrwania i prokreacji rozbić można na wiele różnych cech takich jak: atrakcyjność fizyczna, skuteczność w ochronie potomstwa, ilość składanych jaj, umiejętność zdobywania pożywienia i tak dalej. Na bardziej szczegółowym poziomie każdą z cech możemy dokładniej rozpisać, np. atrakcyjność fizyczną na kolor upierzenia, długość ogona, feromony itd. Większość z nich (a przynajmniej w populacji zwierząt) regulowana jest genetycznie. Najczęściej geny odziaływują wspólnie na wiele cech, lub wiele genów oddziałowuje na jedną cechę. Panuje tam istne zamieszanie, co jednak nie przeszkadza ewolucji skutecznie doskonalić organizmów bowiem nie interesuje „jej” co się dzieje w środku, tylko czy to jest korzystne.  Rozumienie „czarnej skrzynki” jest niezwykle istotne - może wydawać nam się że jakieś cechy fizyczne są gorsze w kolejnych pokoleniach, ale dzieje się tak ponieważ pogorszenie cechy mogło być korzystne z punktu widzenia całości. Na przykład krótszy ogon może być mniej atrakcyjny, ale z drugiej strony jego skrócenie mogło polepszyć zdolność ptaka do lotu, co zwiększyło jego skuteczność unikania drapieżników. Doskonalenie całego organizmu może być więc związane z pogarszaniem niektórych jego cech.

„Przetrwanie najlepiej dostosowanego” oznacza, że im osobnik jest „lepszy” w prokreacji i przetrwaniu tym więcej swoich genów przekazuje potomstwu i tym skuteczniej walczy o swoje prawa z innymi organizmami. Z pokolenia na pokolenie jego replik jest coraz więcej. Ten fakt nie wystarczy do tego, aby zaistniała ewolucja. Niezbędna jest przypadkowość. Natura doskonali organizmy metodą prób i błędów - losuje różne kombinacje genów, po czym dobór naturalny wybiera kombinacje najlepsze. Te są ponownie modyfikowane: powstają gorsze i lepsze, ale dobór wciąż faworyzuje te lepsze. Z pokolenia na pokolenie organizmy są więc coraz lepiej przystosowane. Przypadkowość, niezbędny składnik ewolucji osiągana jest poprzez losową wymianę informacji genetycznej pomiędzy rodzicami czyli tzw. crossing-over (trochę od taty i trochę od mamy) oraz przez mutacje (losowe zmiany zapisu genów).

Podsumujmy jakie składniki są niezbędne aby zaistniała ewolucja. Są to: występowanie przypadkowych zmian w organizmach, dobór faworyzujący organizmy o określonych cechach, posiadanie przez organizmy genotypu - zbioru genów. Jeśli stosujemy metody ewolucyjne w modelowaniu systemów wirtualnych wówczas kryteria doboru naturalnego mogą być najróżniejsze np. szybkość poszukiwania liczb pierwszych, osiągnięty zysk w dylemacie więźnia - dobór kryterium zależy wyłącznie od programisty. Programista ustala również jak wygląda DNA wirtualnych organizmów, jakie cechy decydują o efekcie, oraz jakie są zasady funkcjonowania w tym wirtualnym świecie. Pozostaje jeszcze przypadkowość, która jest generowana przez „stan na pograniczu stabilności i chaosu” i komputerowy crossing-over. Po takich zabiegach wystarczy uruchomić symulacje i obserwować wyniki. Przy dostatecznej ilości powtórzeń system wygeneruje rozwiązania dla zadanych problemów np. odpowie nam jaką strategię zastosować w dylemacie więźnia (jakie ma być DNA organizmu) aby efekty był najlepszy.

Tego typu podejście rozwiązywania problemów, oparte na mechanizmach dziedziczności i doboru naturalnego nosi nazwę algorytmów genetycznych. Jak powiedzieliśmy wcześniej, zasady doboru mogą być bardzo abstrakcyjne, gdyż dotyczą tzw. funkcji celu rozwiązywanego problemu; szybkości, skuteczności, bliskości dopasowania. Algorytmy genetyczne opierając się na silnym (lecz niezwykle prostym!) enginie ewolucji nie sprowadzają się jedynie do przypadkowego błądzenia, lecz wykorzystują przeszłe doświadczenia do określenia nowych obszarów poszukiwań rozwiązań o większej wydajności. Jak wygląda środowisko algorytmów genetycznych? Otóż jest to zbiór organizmów posiadających w swoim DNA zakodowane różne sposoby rozwiązania danego problemu (tak naprawdę organizmy są rozwiązaniami). Warto wiedzieć jaka jest różnica między genem a allelem. Otóż allel jest wariantem genu, określającego jakąś cechę. Jeśli gen wpływa na kolor oczu to allel określa czy są one niebieskie, piwne, czy też zielone. Osobniki tego samego rodzaju mają w gruncie rzeczy te same geny, ale inne allele i to właśnie o odnalezienie właściwych alleli nam chodzi. Po dokładny opis procedury tworzenia genotypu organizmu odsyłam do literatury.

Oczywiście już na starcie pewne osobniki są lepsze a inne gorsze. Komputer testuje osobniki sprawdzając jak rozwiązują dany problem, i w zależności od tego przyznaje im możliwość reprodukcji - jak w naturze gdzie osobniki lepiej przystosowane mają więcej potomstwa. Lepiej przystosowane ciągi kodów wprowadzają większą liczbę potomków do środowiska. Dalszy schemat postępowania nieco odbiega od tego, który obserwujemy w naturze. Po zakończeniu reprodukcji dokonujemy operacji krzyżowania, wprowadzamy trochę losowych mutacji i .... powtarzamy cykl od nowa.

Kolejnym wyzwaniem dla algorytmów genetycznych jest tworzenie tzw. programów ewolucyjnych., jak również tzw. genetycznych systemów uczących się. Te nowe gałęzie algorytmów genetycznych przezwyciężają problem jednakowego genotypu (zestawu genów). W naturze mamy do czynienia z różnymi osobnikami o różnych genotypach. Mówiąc o „uproszczonych” algorytmach genetycznych mamy na myśli populację złożoną z jednego gatunku. Wyobraźmy sobie jak bardzo korzystne byłoby wprowadzenie do populacji nowych genów warunkujących nowe przystosowawcze cechy. Wówczas programy służące do optymalizacji mogłyby same dopisywać sobie linijki kodów. Nie jest to zadanie proste dla programisty gdyż jak wiadomo standardowe języki programowania nie są tolerancyjne na błędy. Nadzieja leży w programowaniu obiektowym zintegrowanym z algorytmami genetycznymi. Z drugiej strony może i dobrze, bo pomyślmy co by się stało gdyby wirusy komputerowe mogły sobie swobodnie ewoluować.

 

Wirtualne ekosystemy

Opisana w poprzednim akapicie metoda znajduje zastosowanie zarówno w rozrywce jak i nauce. Wyposażenie wirtualnych organizmów w mechanizmy dziedziczenia i doboru naturalnego pozwala nam obserwować na ekranie monitora zjawiska dobrze znane przyrodnikom. Odejdźmy więc na moment od  abstrakcyjnych algorytmów genetycznych. Dużo bliższe powinny nam być próby symulacji ekosystemów i populacji, gdzie „funkcją celu” jest przetrwanie i reprodukcja.

Thomas Ray jako pierwszy zaprogramował wirtualny świat, który odpowiadał wymogom darwinowskiego doboru naturalnego. Ze względu na podatność typowych języków programowania na błędy, Ray wykorzystał środowisko bardziej tolerancyjne na mutacje - kod maszynowy komputera. W jego świecie o nazwie Tierra pojawiły się trzy rodzaje mutacji, możliwość powstawania nowych gatunków, „kostucha” czyli śmierć, wymiana informacji poprzez odczytywanie i wykorzystywanie cudzych genotypów i oczywiście „to co tygrysy lubią najbardziej” czyli reprodukcja. 3 stycznia 1990 Ray zaszczepił w swoim wirtualnym świecie życie - cyfrowy organizm składający się z osiemdziesięciu instrukcji. Był to komputerowy odpowiednik bezpłciowego, jednokomórkowego organizmu z prehistorii Ziemi. Od momentu zainicjowania życia Ray śledził ilość nowych osobników i powstających gatunków. W świecie Tierry powstawały najróżniejsze organizmy, np. pasożyty które mając ograniczony zestaw instrukcji nie były w stanie same się reprodukować, hiperpasożyty potrafiące się reprodukować ale również wykorzystujące inne organizmy do tego celu. Na koniec Tierra wytworzyła kompletny ekosystem współpracujących, „kopulujących” i wykorzystujących siebie nawzajem organizmów.

 

Wirtualne neurony

Mianem Neuronalnego Darwinizmu określa się ewolucję zachodzącą w trakcie życia osobnika. Każdy z nas jest efektem ewolucji gatunku, ale również sam podlega ewolucji na przestrzeni całego swojego życia. Nie mam tutaj na myśli zmian w organizmie związanych z jego biologicznym rozwojem, gdyż są one zdefiniowane już na starcie. Ewolucji, w takim sensie jak zostało to nakreślone wcześniej podlegają sieci komórek nerwowych tworzących przede wszystkim mózg, w drugiej kolejności rdzeń kręgowy.

Co dzieje się gdy małe dziecko po raz pierwszy próbuje sięgnąć po grzechotkę? W stanie, gdy jego umysł jest „czystą kartą” brakuje mu oczywiście odpowiednich programów zachowania. Istota Neuronalnego Darwinizmu polega na tym, że dziecko nabywa te programy metodą kumulacji wyników udanych prób. Dziecko inicjuje jakiś przypadkowy ruch, ale ręka skacze mu w przeciwną stronę, podejmuje więc kolejną próbę i tym razem udaje mu się zachować odpowiedni kierunek. Dziecko zapamiętuję tą konfigurację i przyjmuje jako  punkt wyjścia do dalszych prób. W kolejnych setkach lub tysiącach powtórzeń doskonali nową umiejętność, udaje mu się dotknąć zabawki, w końcu precyzyjnie chwycić i wreszcie dziecko wkłada grzechotką do buzi osiągając w ten sposób stan chwilowej ekstazy.

Czynność sięgania po zabawkę realizuje sieć neuronów w mózgu. Testowanie ruchów jest tym samym co na płaszczyźnie neuronów testowanie różnych ich konfiguracji. W przykładzie pierwsza konfiguracja była zupełnie nieefektywna, dziecko próbowało więc dalej stopniowo przybliżając się do takiej konfiguracji, która umożliwiłaby mu zaspokojenie danej potrzeby. W odróżnieniu od „klasycznej” ewolucji nie występuje tutaj zjawisko „crossing-over”. Przypadkowość niezbędna do powstania ewolucji generowana jest przez oscylacje zachodzące w układach złożonych na pograniczu chaosu i stabilności.

Komputerowe sieci neuronowe bazują na tej samej zasadzie działania co mózg człowieka. Wirtualne neurony połączone niewidzialnymi synapsami ewoluują tak aby były w stanie wykonać zadanie w najbardziej optymalny sposób. Każda sieć posiada warstwę neuronów wejściowych i wyjściowych. Wyjaśnijmy to na przykładzie dziecka sięgającego po grzechotkę. Na wejście sieci realizującej to zadanie dopływa informacja o położeniu grzechotki i położeniu ręki dziecka. Neurony będące na wyjściu przesyłają sygnał uruchamiający mięśnie. To co dzieje się wewnątrz jest „czarną skrzynką”, ani my, ani ewolucja ani tym bardziej dziecko nie wiemy co w niej jest ukryte.

Obecnie sieci neuronowe wykorzystuje się do rozwiązywania problemów trudnych lub wręcz niemożliwych do rozwiązani w tradycyjny sposób. Wystarczy wybrać odpowiednią sieć, efekt jaki chcemy osiągnąć, po czym wyuczyć ją właściwych reakcji. Uczenie sieci rozpoznawania pisma polega na wielokrotnym pokazywaniu na wejściu liter pisanych odręcznie lub różnymi krojami a na wyjściu wersji drukowanej. Metodą propagacji wstecznej (dla dobra czytelnika nie wnikam w szczegóły) ustalane są wagi neuronów sieci. Wyuczona sieć jest w stanie bardziej efektywnie rozpoznawać pismo niż metody matematyczne, wymagające dodatkowego zaangażowania programistów. Obecnie stosuje się sieci neuronowe w naprowadzaniu pocisków balistycznych, prognozowaniu kursów walutowych lub cen akcji, ocenianiu wiarygodności kredytowej klientów banku, odczytywaniu ręcznie zapisanych adresów na listach i wielu innych zastosowaniach.

Nauka, której zarys tutaj przedstawiłem jest stosunkowo młoda, gdyż powstała dzięki możliwościom jakie dają obecnie komputery. Bez nich nie bylibyśmy w stanie lepiej poznać i zrozumieć całej złożoności otaczającego nas świata, mimo to nie zapominajmy o tym co stanowi właściwe natchnienie programistów i matematyków badających granice teorii złożoności.

 

Literatura

Coveney, Highfield „Granice złożoności - poszukiwanie porządku w chaotycznym świecie”

Gleick „Chaos”

Goldberg „Algorytmy genetyczne i ich zastosowania”

Dawkins „Ślepy zegarmistrz”

Roetzheim „Laboratorium złożoności” (książka z dyskietką)

 

[wróć]    

 

Piotr Lasoń, Wrocław 1999

 

Napisz do mnie

 

Text & Design

Copyrights by Piotr Lasoń

[Home Page]

komentarz do artykułu