Питание и размножение как смысл искусственной жизни

Эволюция колоний знаменитой игры "Жизнь" удивительно напоминает поведение настоящей живой материи. Однако эволюция колоний в игре Конвэя, поначалу бурная, постепенно замирает, останавливается или зацикливается на повторении одних и тех же простых фигур. Мне же всегда хотелось, чтобы биение искусственной жизни не утихало и не замирало со временем. Конечность бытия отдельной живой единицы должна компенсироваться вечностью круговорота жизни как явления. Поэтому я задумался над такими правилами, которые обеспечивали бы бесконечную во времени эволюцию клеточных колоний. Бесконечно эволюционирующая сложность возникает всегда между двумя диалектическими противоречиями. Основу жизни составляют питание и размножение. Два эти процесса тесно взаимообусловлены. С одной стороны, чем обильнее питание, тем интенсивнее размножение. С другой стороны, чем интенсивнее размножение, тем больше требуется ресурсов питания, а ресурсы, как правило, ограничены. Эта взаимосвязь носит универсальный характер в живой природе и проявляется на всех уровнях ее организации - от микроскопических колоний примитивных бактерий до популяций высших животных. Попробуем разобраться, что может получиться, если смоделировать взаимосвязь процессов питания и размножения в клеточной игре, напоминающей игру "Жизнь". Поступим следующим образом. Первоначально на клеточное поле, свернутое в тор, в случайном порядке разбросаем некоторое количество живых клеток. Затем предположим, что каждая живая клетка за время жизни своего поколения выедает весь ресурс в соседних восьми ячейках. В следующий момент времени в какой-либо клетке поля возникает живая "особь", если в ее окрестности (соседних с ней восьми клетках) в предыдущем поколении обитал хотя бы один живой организм-родитель, а также если в ее окрестности оставалась хотя бы одна клетка с нетронутым ресурсом питания. После того, как поколение клеточных организмов обновилось по описанным правилам, ресурс питания, съеденный предыдущим поколением, обновляется, и весь жизненный цикл повторяется вновь.

Private Sub Form_click()
 Dim x(350,350) As Byte
 Dim y(350,350) As Byte
 Dim R(350,350) As Byte
 Dim color As Long
 Dim n As Integer
 n=340
 For i=1 To n Step 1
  For j=1 To n Step 1
   x(i,j)=0
   If Rnd>0.4 Then x(i,j)=1
  Next j
 Next i
 For i=1 To n
  For j=1 To n
   R(i,j)=1
   color=RGB(255,255,255)
   If x(i,j)=1 Then color=RGB(0,0,0)
   PSet(i,j),color
  Next j
 Next i
 For l=1 To 27
  x(0,0)=x(n,n)
  x(0,n+1)=x(n,1)
  x(n+1,0)=x(1,n)
  x(n+1,n+1)=x(1,1)
  For k=1 To n
   x(0,k)=x(n,k)
   x(k,0)=x(k,n)
   x(n+1,k)=x(1,k)
   x(k,n+1)=x(k,1)
  Next k
  For i=1 To n
   For j=1 To n
    s=x(i-1,j-1)+x(i-1,j)+x(i-1,j+1)+x(i,j-1)+x(i,j+1)+x(i+1,j-1)+x(i+1,j)+x(i+1,j+1)
    If s>0 Then R(i,j)=0
   Next j
  Next i
  R(0,0)=R(n,n)
  R(0,n+1)=R(n,1)
  R(n+1,0)=R(1,n)
  R(n+1,n+1)=R(1,1)
  For k = 1 To n
   R(0,k)=R(n,k)
   R(k,0)=R(k,n)
   R(n+1,k)=R(1,k)
   R(k,n+1)=R(k,1)
  Next k
  For i=1 To n
   For j=1 To n
    sX=x(i-1,j-1)+x(i-1,j)+x(i-1,j+1)+x(i,j-1)+x(i,j+1)+x(i+1,j-1)+x(i+1,j)+x(i+1,j+1)
    sR=R(i-1,j-1)+R(i-1,j)+R(i-1,j+1)+R(i,j-1)+R(i,j+1)+R(i+1,j-1)+R(i+1,j)+R(i+1,j+1)
    y(i,j)=0
    If sX>0 And sR>0 Then y(i,j)=1
   Next j
  Next i
  For i=1 To n
   For j=1 To n
    color=RGB(255,255,255)
    If y(i,j)=1 Then color=RGB(0,0,0)
    PSet(i,j),color
    x(i,j)=y(i,j)
    R(i,j)=1
   Next j
  Next i
 Next l
End Sub

Как видно, правила предельно просты и вместе с тем похожи в чем-то на то, что реально происходит в природе. Несмотря на предельную простоту, поведение описанного клеточного автомата чрезвычайно занимательно. Он способен порождать прямоугольные волны, вечно видоизменяющиеся структуры, симметричные узоры и смешанные комбинации всего перечисленного. Иногда картинки, порожденные этой игрой, напоминают хитросплетение линий на материнской плате компьютера, иногда элементы традиционного белорусского орнамента.

Вечное диалектическое противоречие между питанием и размножением в условиях ограниченного ресурса заставляет хаотичное исходное множество точек превращаться в упорядоченные, бесконечно изменяющиеся структуры. Как и в природе, "жизнь" постоянно сама все расставляет по своим местам.

А. КОЛЕСНИКОВ,
[email protected]

Версия для печатиВерсия для печати

Номер: 

39 за 2003 год

Рубрика: 

Азбука программирования
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!

Комментарии

Аватар пользователя Инкогнито
А что-нибуть поновее нету? Не кажется, что эта тема (с моделью "Жизнь") всем известна?
Аватар пользователя Колесников А.
В статье речь идет не совсем про "Жизнь". Рассказывается о другом клеточном автомате. Автомат был придуман мною не более месяца назад. Новее что-либо отыскать сложно. Может быть тема клеточных автоматов и не нова, но меня она до сих пор очень интересует. Я думаю, что она далеко не исчерпана, а, напротив, очень перспективна. Поверьте, возиться с клеточными автоматами - супер занятное дело! Впрочем - дело вкуса...