Translate

środa, 23 maja 2012

32. Automaty komórkowe


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 wartoœci 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.
(2kB)
  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