18+
Ta strona może zawierać treści nieodpowiednie dla osób niepełnoletnich.
Zapamiętaj mój wybór i zastosuj na pozostałych stronach
topic

Gra w Życie

gi...........on • 2012-08-13, 22:53
"Gra w Życie" (ang. The Game of Life)

Jest wymyślonym przez brytyjskiego matematyka Johna Conwaya w 1970 roku automatem komórkowym, czyli prościej mówiąc zestawem modeli matematycznych opisujących siatkę komórek oraz reguły ich zachowania - zmiany stanów i przejść.

Założenie również jest proste - mamy dwuwymiarową płaszczyznę podzieloną na komórki. W teorii jest ona nieskończenie wielka - tutaj natomiast dla celów prezentacyjnych będzie miała określony, skończony wymiar X na Y.

Każda komórka na płaszczyźnie może przyjąć jeden z dwóch stanów (stany binarne) - wizualnie komórka jest "wypełniona" (żywa) lub pusta (martwa).

Po zadaniu stanu początkowego na płaszczyźnie (wypełnieniu określonych przez "gracza" komórek) algorytm startuje i przetwarza stany wszystkich komórek w każdym kolejnym korku według określonych zasad:

- Jeśli zadana komórka jest martwa i otaczają ją dokładnie trzy komórki żywe, to komórka ta staje się żywa (rodzi się) w następnej turze.

- Jeśli zadana komórka jest żywa i otaczają ją mniej niż dwie lub więcej niż trzy żywe komórki, to komórka ta umiera w następnej turze - w przeciwnym wypadku pozostaje żywa.

Przez komórki otaczające mają być rozumiane takie, które sąsiadują z zadaną komórką - znajdują się na dowolnym z otaczających ośmiu pól na siatce 3x3, na której zadana komórka jest na środku.

Warto nadmienić, że opisane zasady wykorzystane są w oryginalnej grze, natomiast modyfikując je można stworzyć "życie" tworzące struktury innego rodzaju i reagujące w inny sposób.


To by było na tyle, jeśli chodzi o teorię...

No tak... pewnie początek wrzutki nie brzmi za ciekawie, bo robię wywody matematyczne, ale zaraz będzie ciekawiej.

Otóż okazuje się, że prosty w założeniu i pracujący na prostych zasadach układ jest w stanie wykazywać bardzo ciekawe "zachowania" - poczynając od tworzenia różnych typów struktur, które można pogrupować (o czym dalej), a kończąc na złożonych konfiguracjach potrafiących na przykład replikować się, tworzyć inne struktury, lub nawet... dokonywać obliczeń, stając się przy tym maszyną Turinga (modelem komputera zdolnego wykonywać algorytmy).

I z grubsza na tym polega cały fenomen - ludzie od lat obserwują zachowania się zadanych układów, odnajdując coraz nowsze cechy charakterystyczne.


Rodzaje struktur

Stabilne:

Struktury, których komórki nie zmieniają stanów w kolejnych fazach (generacjach, rundach "gry"), przykładowo takie:



Oscylatory:

Struktury zmieniające się okresowo, czyli powtarzające pewien cykl w formie zestawu układów komórek w nieskończoność.

Przykładowo prosty oscylator zwany "blinker" o okresie równym 2:



Oraz bardziej zaawansowany "pulsar" o okresie 3:



Oczywiście istnieją też bardziej zaawansowane oscylatory z okresami rzędów tysięcy.

"Statki":

Podobnie jak oscylatory charakteryzują się cyklicznością, jednak w odróżnieniu od nich przemieszczają się po wykonaniu pełnego okresu (w kierunku zależnym od struktury) - przykładowo "glider":



"Pociągi" (lub "Lokomotywy"): (ang. "puffers")

Warianty statków, które dodatkowo przy przemieszczaniu się pozostawiają za sobą inne struktury. Nazwa pochodzi od skojarzenia z lokomotywą, która pozostawia za sobą kłęby dymu.

Bardziej zaawansowana forma puffera to Breeder ("rozpłodnik"), zdolny do pozostawiania po sobie innych bardzo złożonych struktur. Jego przyrost komórek w populacji jest kwadratowy.

Breeder w makroskali:



Pozostawia on po sobie serie "dział" (ang. Guns) - struktur produkujących seryjnie statki. W tym przypadku są to działa "Gosper's Glider", które wyglądają tak (w przybliżeniu i odwrócone o 90 stopni w stosunku do poprzedniego obrazka):



Jak można zauważyć i wywnioskować po nazwie, działo to produkuje opisane wcześniej "glidery".

Niestałe (niestabilne):

To struktury, które "żyją" i rozwijają się przez określoną ilość pokoleń, po czym ulegają zniszczeniu lub stabilizacji w prostszą stałą strukturę - przykładowo taki układ (zwany "acorn"):



Potrzebuje on 5206 faz aby się ustabilizować - dodatkowo przy okazji produkując inne struktury.


Podsumowując

Jeśli temat Cię zaciekawił to polecam obejrzeć te filmy:





Oraz pobawić się napisanym przeze mnie symulatorem. Kliknięcie w komórkę zmienia stan - ustaw stan początkowy (i ewentualnie prędkość upływania pokoleń w milisekundach), kliknij "Start" i podziwiaj. Ewentualnie klikaj w "Step", aby samemu wywoływać kolejne pokolenia:

http://www.gipson.pl/gol/

P.S. Symulator jest on-line, napisany w JavaScript'cie - nic nie trzeba ściągać.

JakobekS

2012-08-14, 11:32
@gipson
Ano jest niewydajne, przy 200 iteracji zaczynają się u mnie problemy z wydajnością, za bardzo zapycha pamięć. Do takiego symulatora nadaje się dobrze Java. ;)

askar

2012-08-14, 11:39
a teraz prosze w google wpisać: conway's game of life

gi...........on

2012-08-14, 11:48
askar napisał/a:

a teraz prosze w google wpisać: conway's game of life



No i? Spodziewałeś się, że sam to wymyśliłem, czy o co chodzi? Przecież to oczywiste, że będzie to opisane na Wikipedii i tysiącach innych stron - podobnie jak 99% materiałów zamieszczanych w innych wrzutkach.

Serio, nie rozumiem ludzi, którzy mają z tym problemy - gdyby każdy dodawał tylko oryginalne rzeczy, których nigdzie wcześniej nie było, a ilość treści byłaby taka sama jak teraz, to Sadistic byłby najpopularniejszym portalem na świecie... a patrząc realnie - portalu nie byłoby w ogóle.

Wrzucam materiały bo lubię pisać i dzielić się rzeczami, które uważam za interesujące - nie oczekuję aplauzu, ale też nie uważam, że zasługuję na takie traktowanie - tym bardziej, że cała treść jest opracowana przeze mnie, a nie skopiowana. Zaznaczam, że zawszę przyjmuję konstruktywną krytykę, ale takie wpisy nią nie są.

askar

2012-08-14, 12:07
gipson napisał/a:



No i? Spodziewałeś się, że sam to wymyśliłem, czy o co chodzi? Przecież to oczywiste, że będzie to opisane na Wikipedii i tysiącach innych stron - podobnie jak 99% materiałów zamieszczanych w innych wrzutkach.

Serio, nie rozumiem ludzi, którzy mają z tym problemy - gdyby każdy dodawał tylko oryginalne rzeczy, których nigdzie wcześniej nie było, a ilość treści byłaby taka sama jak teraz, to Sadistic byłby najpopularniejszym portalem na świecie... a patrząc realnie - portalu nie byłoby w ogóle.

Wrzucam materiały bo lubię pisać i dzielić się rzeczami, które uważam za interesujące - nie oczekuję aplauzu, ale też nie uważam, że zasługuję na takie traktowanie - tym bardziej, że cała treść jest opracowana przeze mnie, a nie skopiowana. Zaznaczam, że zawszę przyjmuję konstruktywną krytykę, ale takie wpisy nią nie są.



:roll: trzeba było najpierw sprawdzić na google:
nie mam nic przeciwko temu co robisz i jak to robisz, nawet dalem piwo, no ale OK ;)

gi...........on

2012-08-14, 12:16
Zwracam honor askar (w postaci piwa :) ) - nie zauważyłem appletu po prawej stronie w wynikach.

dagothar

2012-08-14, 12:36
Automaty komórkowe to dla mnie fascynujący temat :) GoL jest oczywiście kompletna w sensie Turinga, co oznacza, że można w niej wykonywać obliczenia, np. zbudować komputer. Tu na filmiku widać grę w życie zaimplementowaną w... grze w życie: (poszukajcie na youtubie; filmik: Life in life)

Innym fajnym automatem jest Wireworld (http://en.wikipedia.org/wiki/Wireworld). Symuluje jakby działąnie dyskretnych obwodów logicznych. Paru gości zrobiło w nim w pełni działający komputer, z pamięcią procesorem i wyświetlaczem: http://www.quinapalus.com/wi-java.html
Na symulacji widać jak oblicza liczby pierwsze.

nanab

2012-08-14, 13:06
Jakieś bezsensowne animacje

Szoqn

2012-08-14, 13:31
.;.';.'].];']'l.[;.];

A i jeszcze polecam zbadać to: .,/;'.[;,.[;,.[;.[;,;[-------->( <-c=8 [wygląda trochę jak penis, a to pulsar przed okresem)

clinton

2012-08-14, 13:38
fajny temat. jebne posta... piwa nie dam za muzyczke z drugiego filmiku. jebłem..

.:...........:.

2012-08-14, 13:39
Cytat:

fajny temat. jebne posta...



A co mi tam, też jebnę. 8-)

ozzy88

2012-08-14, 14:05
nanab napisał/a:

Jakieś bezsensowne animacje



Znawca się odezwał.

Mówiłbyś inaczej, gdybyś rozumiał sens całości...

A jeśli chodzi o post wyżej, ktoś wspominał o filmiku "life in life". Szczerze przyznam, genialnie wykonane. Ktoś musiał na tym długo siedzieć.

@topic Sam temat genialny, oczywiście leci piwo ode mnie. Sam się w tym pobawię i postaram coś stworzyć :D

Sitwa8

2012-08-14, 14:30
Na większą skale to chyba lepiej użyć sieci neuronowych.Wtedy dać zasady, żeby się komórki uczyły jak przetrwać i masz grę o życie :)

majster0000

2012-08-14, 15:50
Ciekawy temat ogólnie ale nie rozumiem troche jaki jest cel takiego symulatora i w jaki sposob mial by on wykonywać obliczenia i co tak właściwie te kwadraciki reprezentują ? bo na tych różnych animacjach w filmiku to oprócz psychodelicznych struktor tych kwadracików to większego sensu nie widze w tym ?

gi...........on

2012-08-14, 16:34
majster0000 napisał/a:

Ciekawy temat ogólnie ale nie rozumiem troche jaki jest cel takiego symulatora i w jaki sposob mial by on wykonywać obliczenia i co tak właściwie te kwadraciki reprezentują ? bo na tych różnych animacjach w filmiku to oprócz psychodelicznych struktor tych kwadracików to większego sensu nie widze w tym ?



Ok, spróbuję wytłumaczyć w DUŻYM skrócie.

1. Co to jest maszyna Turinga: link - wiki

2. Maszyna taka została zaimplementowana (zbudowana) za pomocą tych "kwadracików" na przykład tutaj: link.

Po kliknięciu w obrazek włącza się podgląd na którym można przybliżać do takiego stopnia, że widać każdą komórkę. Gdzieś na tej stronie można też zobaczyć filmy jak to działa w symulatorze.

3. Po zadaniu odpowiedniego wejścia otrzymujemy wynik przetworzony przez zadany w maszynie algorytm - tutaj jest implementacja w JavaScript'cie: link.

- Na stronie z powyższego linku wybierz 'Binary addition' na dole z listy 'Example programs' i klinij 'Load' - jest to dodawanie liczb binarnych. W polu tekstowym załaduje się wskazany algorytm.
- Nad polem tekstowym w 'Initial input' wprowadź dwie wartości binarne oddzielone spacją i zaznacz obok "ptaszka". Przykładowo wartości 3 oraz 4, także wejście będzie miało postać: 11 100
(są to wartości 3 oraz 4 zamienione z systemu dziesiętnego na binarny)
- Kliknij 'Run' i po chwili otrzymasz wynik: 111, który jest odpowiednikiem liczby 7 w systemie binarnym.
- Jak widać symulator potrafi mnożyć - dokładnie tak samo potrafi zachowywać się taki symulator zbudowany jedynie z "kwadracików" na płaszczyźnie działających według opisanych, prostych reguł.

4. Jako ciekawostkę wrzucam filmik, na którym maszyna Turinga wykonana jest w... Minecrafcie :)



Mam nadzieję, że trochę przybliżyłem problem i może kogoś zainteresowałem.

Adenozynotrifosforan

2012-08-14, 16:41
Co do symulatora, polecam pobawić się c ciągiem Fibbonaciego, struktury z tymi liczbami trwały u mnie najdłużej :)