CONSTRUINDO UM SIMULADOR DE AUTÔMATOS CELULARES EM DELPHI



1. INTRODUÇÃO

Um autômato celular é um modelo discreto, que consiste em uma grelha infinita e regular de células, onde cada uma pode estar em um número finito de estados. São modelos muito usados em Matemática, Física e Biologia, por exemplo, para sistemas que interagem com sua vizinhança. Podem ser usados para simular incêndios, sistemas predador-presa, redes de interações, proliferação de vírus, entre outros.

O interesse neste tipo de sistema é crescente, pois muitos organismos vivos ou aglomerações têm um comportamento semelhante ao de um autômato celular. Os autômatos celulares foram introduzidos por von Neumann e Ulam como modelos para estudar processos de crescimento e auto-reprodução. Qualquer sistema com muitos elementos idênticos que interagem local e deterministicamente pode ser modelado usando autômatos celulares (fonte: WIKIPÈDIA).

O estado de uma célula da grelha é determinado pelo estados das células vizinhas à mesma. Por exemplo, se uma célula for caracterizada por dois estados, 1 e 0, o valor destes estados pode ser determinado a partir dos valores dos estados das células vizinhas.

Neste artigo, pretende-se mostrar um programa feito em Delphi que simula o comportamento de um autômato celular. Mostra-se aqui toda a parte gráfica do programa, componentes utilizados, bem como o código fonte correspondente, com explicação dos trechos de código mais importantes.

2. O PROGRAMA

Os estados possíveis para o autômato são X e vazio (grelha vazia), como indica a figura:


A evolução do autômato dependerá da configuração inicial das células da primeira linha da grade, como mostra a figura a seguir:


Se nenhuma célula estiver marcada com o X, então as grelhas ficarão vazias. Mas, a cada configuração de marcação diferente do X na grelha, determinará evoluções diferentes para o autômato, com nos exemplos das figuras abaixo:



O próximo passo é explicar a função dos componentes principais do programa, de acordo com a figura abaixo:


O botão 1 serve para ativar o autômato. Antes de clicar no botão 1, é interessante que seja escolhida a configuração inicial do autômato, colocando-se um ou mais valores (X) em cada grelha do grid. O botão 2 é usado para parar (pausar) o autômato. Clicando no botão 3, limpa-se as grelhas, podendo começar um autômato com outra configuração. Antes de clicar no botão limpar, deve-se clicar no botão parar. A seguir será descrito o processo de programação do software.

3. CRIANDO O PROGRAMA NO DELPHI

Em primeiro lugar inicie um novo projeto no Delphi. Adicione um componente StringGrid ao form e mude seu nome para grid1, no Object Inspector. Insira três Buttons no form. Mude a propriedade Caption do Button1 para "Começar", do Button2 para "Parar" e do Button3 para "Limpar". Insira um componente Label e um Timer no form. Mude a propriedade Caption do Label1 para CONTADOR (esse Label1 servirá para mostrar os passos efetuados na evolução do autômato celular). O form ficará com o seguinte aspecto:


O próximo passo é codificar esta aplicação.

Altere, no Object Inspector, a propriedae Enabled do Timer1 para False. Altere a propriedade ColCount do grid1 para 9. No evento OnClick do Button1 (Começar) digite o seguinte código:

procedure TForm1.Button1Click(Sender: TObject);

begin

timer1.Enabled:=true;

end;

Ele servirá para ativar o timer (relógio) e dar início à evolução do autômato celular simulado. Inclua, antes da seção Implementation no editor de código do Delphi a seguinte variável:

contador: integer;

Ela será usada para mostrar os passos da evolução do autômato. No evento OnCreate do Form1, digite o seguinte código:

procedure TForm1.FormCreate(Sender: TObject);

begin

contador:= 0;

end;

Ele iniciará a variável contador com zero. No evento OnClick do Button2 (Parar), digite o seguinte código:

procedure TForm1.Button2Click(Sender: TObject);

begin

timer1.enabled:=false;

end;

Ele irá parar a evolução do autômato. No evento OnClick do Button3 (Limpar) digite o seguinte código:

procedure TForm1.Button3Click(Sender: TObject);

var

a, b: integer;

begin

for a:=0 to contador do

begin

for b:=0 to 9 do

grade1.Cells[b, a]:='';

end;

contador:= 0;

grade1.RowCount:=1;

label1.caption:='CONTADOR';

end;

A seguir, será mostrado o trecho de código que faz realmente o autômato celular funcionar. Coloque-a no evento OnTimer do Timer1. Cada parte vem com comentário ao lado sobre sua funcionalidade.

procedure TForm1.Timer1Timer(Sender: TObject);

var

cel: array[1..9] of string; {*array associado a cada coluna do grid1*}

i, j, k: integer;

begin

for k:= 1 to 9 do

begin

cel[k]:= grade1.Cells[k, contador]; {*captura os valores da célula do grid1 para a variável cel*}

end;

for i:= 1 to 9 do

begin

if ((cel[i-1]='') and (cel[i]='') and (cel[i-1]='')) or{**}

((cel[i-1]='') and (cel[i]='x') and (cel[i-1]='x')) or{*REGRA DE EVOLUÇÃO*}

((cel[i-1]='x') and (cel[i]='x') and (cel[i-1]='')) or{*DO AUTÔMATO*}

((cel[i-1]='x') and (cel[i]='x') and (cel[i-1]='x')) then{**}

begin

cel[i]:='';

end

else

begin

cel[i]:='x';

end;

end;

 

contador:= contador + 1; {*Incrementa a variável contador*}

label1.Caption:= inttostr(contador); {*Coloca o número do passo no Labe1*}

grade1.RowCount:=grade1.RowCount + 1; {*Incrementa o grid com mais uma linha*}

 

for j:=1 to 9 do

begin

grade1.cells[j, contador]:= cel[j];{*Transfere o valor da variável cel para uma célula do grid*}

end;

end;

4. CONSIDERAÇÕES FINAIS

A regra de evolução do autômato é simples, porém, a partir de certa configuração, pode-se formar sistemas extremamente organizados que podem simular organismos ou interações sociais, propagação de incêndios ou vírus. Seu estudo através de programas computacionais tem sido o foco de pesquisas em Matemática, Física, Biologia ou Medicina.

5. REFERÊNCIAS BIBLIOGRÁFICAS

TORRES, D. F. M., Autômatos Celulares. Disponível em: http://www2.mat.ua.pt/delfim/delfim/artigos/celular.pdf. Acesso em: 25 de mai. de 2009.

WIKIPÉDIA. Autômatos Celulares. Disponível em: http://pt.wikipedia.org/wiki/Aut%C3%B4matos_celulares. Acesso em: 05 de mai. de 2009.
Autor: Augusto dos Santos Freitas


Artigos Relacionados


Pássaros De Deus

Por Que O Pôr E O Nascer Do Sol Geralmente Possuem Cores Avermelhadas, Alaranjadas Ou Amareladas?

O Ciclo Do Nitrogênio E A Camada De Ozônio

A Matemática Da Célula Tronco

Características Da Rede De Drenagem De Uma Bacia Hidrográfica E A Relação Com Seus Tipos De Solos

Produtos Indispensáveis Para As Férias

Cultivo Mínimo Do Solo?