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

Text
& Design
Copyrights
by Piotr
Lasoń
[Home
Page]
|