Implementação Life (Jogo da Vida) - Sistemas Autômatos - Sistemas Inteligentes
-
Upload
erivan-ramos -
Category
Documents
-
view
1.230 -
download
3
description
Transcript of Implementação Life (Jogo da Vida) - Sistemas Autômatos - Sistemas Inteligentes
SISTEMAS DE INFORMAÇÃOSISTEMAS INTELIGENTES
ADRIANO RÉGIS - 2006103696ERIVAN DE SENA RAMOS - 2006103675
IMPLEMENTAÇÃO PROJETO LIFE
FORTALEZA2008
ADRIANO RÉGIS - 2006103696
ERIVAN DE SENA RAMOS - 2006103675
IMPLEMENTAÇÃO GAME OF LIFE
Trabalho acadêmico apresentado à disciplina de Sistemas Inteligentes, do curso de Sistemas de Informação da Faculdade Integrada do Ceará como requisito para a obtenção de parte da nota de AV2. Sob a orientação do Professor Cláudio Olany.
FORTALEZA2008
2
SUMÁRIO
1. INTRODUÇÃO 4
2. OBJETIVO 5
3. DESENVOLVIMENTO 6
3.1 REGRAS 7
3.2 CÓDIGOS FONTE 8
4. CONCLUSÃO 11
5. BIBLIOGRAFIA 12
3
1. INTRODUÇÃO
Na década de 40, um dos problemas matemáticos mais famoso era o de
achar uma máquina que fosse capaz de construir cópias de si mesma, que teve
uma solução baseada em um autômato celular extremamente engenhoso e
complicado inventado pelo renomado matemático John von Neumann. John
Conway inventou o Jogo da Vida (ou Game of Life) ao utilizar suas descobertas
anteriores relacionadas com o problema de encontrar um grupo simétrico de
esferas em 24 dimensões proposto por John Leech para simplificar a solução de
Von Neumann.
O jogo fez sua primeira aparição na edição de Outubro de 1970 da
Scientific American, na coluna de jogos matemáticos de Martin Gardner. De um
ponto de vista teórico, ele é interessante pois tem o poder de uma máquina de
Turing universal: tudo pode ser computado através de algoritmos no Jogo da Vida
de John Conway. Também era dito desde 1970 que foi destinado mais tempo de
computação ao Jogo da Vida do que à qualquer outra atividade.
O jogo fez John Conway famoso instantaneamente, mas ele também abriu
um novo campo na pesquisa matemática, ao campo dos autômatos celulares. Por
causa das analogias de Life com o aumento, redução e alteração de uma
sociedade de organismos vivos, isto pertence a uma classe crescente que é
chamada "jogos de simulação" - jogos que recriam processos do mundo-real.
Desde sua publicação, ele tem atraído muito interesse devido aos
caminhos surpreendentes que pode tomar. Life é um exemplo de auto-
organização.
4
2. OBJETIVO
Este "jogo" é na realidade um jogo sem jogador, o que quer dizer que sua
evolução é determinada pelo seu estado inicial, não necessitando de nenhuma
entrada de jogadores humanos. Ele é jogado em um conjunto de células
quadradas que seguem ao infinito em todas as direções. Cada célula tem oito
"vizinhos", que são as células adjacentes, incluindo as diagonais. Cada célula
pode estar em dois estados: "viva" ou "morta". (Também são usados os termos
"ligado" e "desligado".) O estado do tabuleiro evolui e se modifica em pequenas
passagens de tempo.
Os estados de todas as células em um instante são considerados para
calcular o estado de todas as células no instante seguinte. Todas as células são
atualizadas simultaneamente. As transições dependem apenas do número de
vizinhos vivos
A idéia básica do "jogo" é começar com uma configuração simples de
células vivas (organismos) que são colocadas em um tabuleiro 2D de vários
métodos. Isto constitui a primeira geração. As "leis genéticas" de Conway para
nascimentos, mortes e sobrevivência são então aplicadas e a nova geração é
então colocada de acordo. Geração a geração os "jogador(es)" observam as
várias imagens que surgem.
É importante entender que todos os nascimentos e mortes ocorrem
simultaneamente. Juntos eles constituem uma geração ou, como podemos
chamá-los, um "instante" na história da vida completa da configuração inicial.
5
3. DESENVOLVIMENTO
O presente trabalho, foi desenvolvido em VBA - Visual Basic for
Applications, linguagem derivada do Visual Basic, implementado no aplicativo
Microsoft Office Excel 2003, através macros que são executadas em resposta a
um determinado evento, utilizando as regras do jogo Life, definidas por John
Conway.
Foram desenvolvidas as seguintes macros e funções que possibilitam o
funcionamento do jogo:
Function Sobrevivencia(Boundaries As Range)
Esta funcão identifica se a célula atual deve ficar viva ou não, contando
quantas células vivas estão ao redor.
Sub VerificaVida()
Esta Macro que verifica todas as células para saber se ficarão vivas ou
mortas.
Sub JogodaVida()
Essa macro copia o conteúdo da pasta Jogo para a Temporaria, roda a macro
VerificaVida, e copia de volta o conteúdo da Temporaria para a pasta Jogo.
Sub PorGeracao()
Macro que execulta o jogo por rodada.
Sub Limpar()
Macro que limpa a tabela.
6
3.1 REGRAS
As regras satisfazem a três critérios:
1. Não deve haver nenhuma imagem inicial para a qual haja uma prova
imediata ou trivial de que a população pode crescer sem limite.
2. Deve haver imagens iniciais que aparentemente crescam sem limite.
3. Deve haver imagens iniciais simples que cresçam e mudem por um
período de tempo considerável antes de chegar a um fim das possíveis formas:
I- Sumindo completamente (por superpopulação ou por ficarem muito
distantes).
II- Estacionando em uma configuração estável que se mantem imutável
para sempre, ou entrando em uma fase de oscilação na qual são repetidos
ciclos infinitos de dois ou mais períodos.
As regras as seguintes:
I - Qualquer célula viva com menos de dois vizinhos vivos morre de
solidão.
II - Qualquer célula viva com mais de três vizinhos vivos morre de
superpopulação.
III - Qualquer célula com exatamente três vizinhos vivos se torna uma
célula viva.
IV - Qualquer célula com dois vizinhos vivos continua no mesmo estado
para a próxima geração.
7
3.2 CÓDIGOS FONTE
Dim continua As Integer
Function Sobrevivencia(Boundaries As Range) 'Esta funcão identifica se a
célula atual deve ficar viva ou não
Dim contador As Integer 'Conta quantas células vivas estão ao redor
contador = Boundaries(1, 1)
contador = contador + Boundaries(2, 1)
contador = contador + Boundaries(3, 1)
contador = contador + Boundaries(1, 2)
contador = contador + Boundaries(3, 2)
contador = contador + Boundaries(1, 3)
contador = contador + Boundaries(2, 3)
contador = contador + Boundaries(3, 3)
If Boundaries(2, 2) = 0 Then 'Célula atual: se for zero, está morta
If contador = 3 Then 'Se caso existir 3 células vivas ao redor, a
célula ressussita.
Sobrevivencia = 1
continua = 1 'Se continua for 0, identifica que o jogo acabou.
End If
End If
If Boundaries(2, 2) = 1 Then 'Aqui são as regras de sobrevivência para a
célula viva
If contador > 3 Then 'Se existirem mais que 3 células ao redor, morte
por superpopulação
Sobrevivencia = 0
continua = 1
ElseIf contador < 2 Then 'Se existirem menos de 2 células ao redor,
morte por solidão
Sobrevivencia = 0
continua = 1
Else
Sobrevivencia = 1 'Significa que a célula pode continuar viva.
End If
End If
End Function
8
Sub VerificaVida() 'Esta Macro que verifica todas as células para saber
se ficarão vivas ou mortas, e copia o resultado para a planilha
"Temporaria" . Em cada célula, é realizada essa função, e insere como
entrada o Range de células que a cercam.
Dim contalinha As Integer 'Contador de linhas
Dim contacoluna As Integer 'Contador de colunas
contalinha = 2
Do While contalinha <= 41
contacoluna = 2
Do While contacoluna <= 41
Sheets("temporaria").Cells(contalinha, contacoluna) =
Sobrevivencia(Range(Sheets("jogo").Cells(contalinha - 1, contacoluna -
1), Sheets("jogo").Cells(contalinha + 1, contacoluna + 1)))
contacoluna = contacoluna + 1
Loop
contalinha = contalinha + 1
Loop
End Sub
Sub JogodaVida() 'Essa macro copia o conteúdo da pasta Jogo para a
Temporaria, roda a macro VerificaVida, e copia de volta o conteúdo.
continua = 1
Do While continua = 1 'continua=1 é o indicador que o jogo ainda não
acabou.
continua = 0
Application.ScreenUpdating = False
Sheets("Jogo").Range("B2:Ao41").Copy
Sheets("Temporaria").Range("B2:Ao41").PasteSpecial
Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False,
Transpose:=False
Call VerificaVida 'Chama a macro VerificaVida.
Sheets("Temporaria").Range("B2:Ao41").Copy
Sheets("Jogo").Range("B2:Ao41").PasteSpecial Paste:=xlPasteValues,
Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Cells(1, 1).Select
Application.ScreenUpdating = True
Loop
End Sub
9
Sub PorGeracao() 'Macro que execulta o jogo por rodada
Application.ScreenUpdating = True
Sheets("Jogo").Range("B2:Ao41").Copy
Sheets("Temporaria").Range("B2:Ao41").PasteSpecial
Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False,
Transpose:=False
Call VerificaVida
Sheets("Temporaria").Range("B2:Ao41").Copy
Sheets("Jogo").Range("B2:Ao41").PasteSpecial Paste:=xlPasteValues,
Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Cells(1, 1).Select
Application.ScreenUpdating = True
End Sub
Sub Limpar() 'Macro que limpa a tabela.
Range("B2:AO41").Select
Selection.ClearContents
Range("A1").Select
End Sub
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As
Boolean)
'Alterna o valores entre 0 e 1 no duplo clique.
If Selection.Value = 1 Then
Selection.Value = 0
Else
Selection.Value = 1
End If
End Sub
1
4. CONCLUSÃO
O desenvolvimento do presente trabalho nos levou a concluir que a vida
pode ser simulada em ambientes computacionais. Sistemas Autômatos são uma
forma de implementar modelos onde se espera encontrar complexidade da
simplicidade.
O Jogo da Vida de Conway cria um universo complicado a partir de
poucas regras. Ele é interessante para biólogos, matemáticos, economistas,
filósofos e outros a observar o modo como imagens complexas podem surgir de
implementações de regras muito simples.
1
5. BIBLIOGRAFIA
GREEN, David G. Cellular Automata, 1993. Disponível em
http://life.csu.edu.au/complex/tutorials/tutorial1.html, acessado em 13/11/2008.
REGIS, Ed. Who's Got Einstein's Office?, Addison-Wesley, 1987. Disponível em
http://www.stephenwolfram.com/about-sw/interviews/87-einstein/text.html,
acessado em 13/11/2008.
Wilkipédia, a enciclopédia livre, Jogo da Vida, 2008. Disponível em
http://pt.wikipedia.org/wiki/Jogo_da_vida, acessado em 14/11/2008.
1