Anda di halaman 1dari 8

Autmatas celulares

Informtica aplicada al medio ambiente curso 2010/2011

Origenes

Primera etapa con Von Newmann

Tras trabajar en el Eniac intenta crear una mquina que se auto reproduzca y que tenga un comportamiento complejo Implementa la teora de autmatas celulares Define vector de dos dimensiones de nmeros enteros Cada elemento tiene 4 vecinos (arriba, abajo, izquierda y derecha) Valor nuevo= Funcin Ambientetransicin: En2 Informtica aplicada al Medio de funcin del valor actual y el de sus

Juego de la vida

Martin Gardner publica el juego de la vida


Estados: Muerto/vivo Vecinos: 4 de Von Newman + 4 diagonales (Vecindad de Moore) Reglas


Nace si tiene 3 vecinos vivos Muere si tiene menos de 2 vivos(aislamiento) o ms de 3 (sobrepoblacin) Entre 2 y 3 vivos se mantiene

Aplicaciones

Modelado de sistemas fsicos de componentes homogeneos (la funcin de transicin se aplica a todas las clulas por igual), y donde tenga sentido el concepto de vecindad Ejemplos

Modelado de trfico Modelado de fluidos Evolucin de virus

Ejemplo: Virus

Modelo SIR

Susceptible Infectado Recuperado Probabilidad de contagio Duracin de la infeccin Mortalidad

Parmetros

Implementacin en Matlab?

Simulador celular
function M_final=simula(M, automata, parametros, max_iter) %simula(M, automata, parametros, max_iter) %M:Mundo inicial, parametros: parmetros del automata %automata: funcin estado_final= automata(estado, vecinos, parametros) %max_iter: limite de iteraciones iteracion=0; hay_cambios=true; newplot; colormap jet; caxis([0 4]); while iteracion<max_iter && hay_cambios iteracion=iteracion+1; hay_cambios=false; for i=1:size(M, 1); for j=1:size(M, 2) [M_final(i, j), continuar]= feval(automata, M(i,j), vecinos(M, i, j), parametros); hay_cambios= hay_cambios || continuar; end ; end M=M_final; %actualizamos M con la nueva matriz hold; imagesc(M); drawnow; end; end

Ejemplo: SIR
function [nuevo, continuar]=sir(estado, vecinos, parametros) %nuevo=sir(estado, vecinos, parametros) %parametros.contagio (probabilidad de contagio) % .duracion (duracin de la infeccin) % .mortalidad (tasa de mortalidad) %Estados: 0=Vacio, 1=Susceptible, 2=Infectado, 3=Recuperado, 4=Muerto nuevo=estado; %en principio no cambia el estado switch estado case 1 for v=vecinos if (v==2) && (cierto(parametros.contagio)) nuevo=2; %infectado break; end end case 2 if (cierto(1/parametros.duracion)) %fin de la infeccion if (cierto(parametros.mortalidad)) nuevo=4; else nuevo=3; end end end continuar= (nuevo==2); end

Otras funciones
function v=vecinos(M, i, j) v=[extrae(M, i+1, j), extrae(M, i-1, j),... extrae(M, i, j+1), extrae(M, i, j-1)]; end function v=extrae(M, i, j) if (i<1 || j<1 || i>size(M, 1) || j>size(M, 2)) v=0; else v=M(i, j); end end function c=cierto(probabilidad) %devuelve verdadero con una probabilidad dada r=rand(1); c=r<=probabilidad; end

Anda mungkin juga menyukai