Tekst napisany w roku 2004
Automaty komórkowe zainteresowały mnie na chwilę, przy okazji lektury książki Petera Coveneya i Rogera Higfielda Granice złożoności, Prószyński i S-ka, Warszawa 1997. Napisałem kilka programów w QBASICu, które odtwarzały zestaw reguł rządzących automatem. Poniżej przytaczam program, który losuje położenia punktów w "świecie automatu" i następnie realizuje schemat ewolucyjny według zadanych reguł.
'automat komórkowy. odtwarza dane książkowe. Zbudowany 2 marca 2001.
bok = 50 ' bok świata
lewol = 1000 ' liczba ewolucji
screen 10
dim a(1 to bok, 1 to bok)
dim b(1 to bok, 1 to bok)
'przypadkowy układ punktów
for j = 1 to 723
x = int(rnd(1) * bok) + 1
y = int(rnd(1) * bok) + 1
a(x, y) = 1: pset (x * 2, y * 2)
next j
'pętla główna
for k = 1 to lewol
for y = 2 to bok - 1
for x = 2 to bok - 1
gosub sasiedzi:
if a(x, y) = 1 then
if (suma = 2) or (suma = 3) then b(x, y) = 1
else
b(x, y) = 0
end if
if suma = 3 then b(x, y) = 1
next x
next y
'nowa tablica a i malowanie tablicy b na ekranie, zerowanie tablicy b
for y = 1 to bok
for x = 1 to bok
a(x, y) = 0 'zerowanie tablicy a
a(x, y) = b(x, y) 'nadawanie nowych wartoci tablicy a
pset (x * 2, y * 2), 0 'mazanie starego ekranu
if b(x, y) = 1 then pset (x * 2, y * 2), 1 'malowanie nowego ekranu
b(x, y) = 0 'zerowanie tablicy b
next x
next y
next k
end
sasiedzi:
'oblicza liczbę "pionków" wokół badanego punktu
suma = 0
for i = x - 1 to x + 1
for j = y - 1 to y + 1
if (i = x) and (j = y) then goto tu
if a(i, j) = 1 then suma = suma + 1
tu: next j
next i
return
Obserwacja zmian na ekranie jest ciekawa. Oczekuje się rychłego ustabilizowania się układu ewoluujących punktów, a tymczasem całość długo zmienia swoją postać.
Poniżej pokazuję ekran monitora po pewnej liczbie iteracji.
Pewne układy początkowe stabilizują się po pewnej liczbie iteracji. Ciekawe zjawisko, zwłaszcza, że modyfikuje się pole wokół obiektu. Czuje się tu jakiś związek z fizyką cząstek. Tylko jaki?
Brak komentarzy :
Prześlij komentarz