1 / 21

Cellular Automata: Exploring Applications

Cellular Automata: Exploring Applications . Erik Aguilar Amelia Yzaguirre Amy Femal. Goal Explore 3 specific types of cellular automata applications and use MATLAB to model them. Types of Cellular Automata. Boolean Excitable Media Lattice Gas Automata. Boolean Cellular Automata.

nailah
Télécharger la présentation

Cellular Automata: Exploring Applications

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Cellular Automata:Exploring Applications Erik Aguilar Amelia Yzaguirre Amy Femal

  2. Goal Explore 3 specific types of cellular automata applications and use MATLAB to model them.

  3. Types of Cellular Automata • Boolean • Excitable Media • Lattice Gas Automata

  4. Boolean Cellular Automata Excitable Media can be seen in The Game of Life

  5. Rules for the Game of Life • Any live cell with fewer than 2 live neighbors dies • Any live cell with more than 3 neighbors dies • Any live cell with 2 or 3 live neighbors lives on to the next generation • Any dead cell with exactly 3 live neighbors becomes a live cell

  6. Writing the code %First we must create an n x n matrix of zeros. n=75; z=zeros(n,n); %Produces random "0" and "1" throughout matrix cells = (rand(n,n))<.12; %Creates an image using the matrix imh = image(cat(3,cells,z,z)); %When the image is replaced, the old image is not erased first set(imh, 'erasemode', 'none') x=(2:n-1); %creates array x which is used for position y=(2:n-1); %creates array y which is used for position %creates matrix for summations sum(x,y)=zeros(n-2,n-2);

  7. a=0; while a==0; %equations for the corner cells to check for infected %neighbors sum(1,1)=cells(1,2)+cells(2,1)+cells(2,2); sum(1,n)=cells(2,n)+cells(2,n-1)+cells(1,n-1); sum(n,1)=cells(n,2)+cells(n-1,1)+cells(n-1,2); sum(n,n)=cells(n,n-1)+cells(n-1,n)+cells(n-1,n-1); %equations for the edge rows/columns to check for infected %neighbors sum(1,y)=cells(1,y-1)+cells(1,y+1)+cells(2,y)+cells(2,y+1)+... cells(2,y-1); sum(n,y)=cells(n,y+1)+cells(n,y-1)+cells(n-1,y)+cells(n-1,y+1)+... cells(n-1,y-1); sum(x,1)=cells(x-1,1)+cells(x+1,1)+cells(x,2)+cells(x+1,2)+... cells(x-1,2); sum(x,n)=cells(x-1,n)+cells(x+1,n)+cells(x,n-1)+cells(x+1,n-1)+... cells(x-1,n-1);

  8. %equations for the interior cells to check for infected %neighbors sum(x,y)=cells(x,y+1)+cells(x,y-1)+cells(x+1,y)+cells(x-1,y)+... cells(x+1,y+1)+cells(x+1,y-1)+cells(x-1,y+1)+cells(x-1,y-1); %updating the cells matrix cells = (sum(1:n,1:n)==3)|(sum(1:n,1:n)==2 & cells); %draw the new image set(imh, 'CData', cat(3,cells,z,z)) drawnow%displaying the updated image waitforbuttonpress end

  9. Excitable Media can be observed in the BZ reaction Belousov-Zhabotinsky reaction

  10. What is the BZ reaction? It is a chemical reaction caused by the mixture of Sulfuric Acid Sodium Bromate Malonic Acid Sodium Bromide Phenanthroline Ferrous Sulfate Triton X-100 Surfactant

  11. Rules for the BZ Reaction • Cells can be in 10 different states. • State 0 = resting • States 1 – 5 = active • States 6 – 9 = refractory • Like LIFE, each cell of the BZ reaction is dependent on its 8 surrounding neighbors. • If 3 or more neighbors are active, cell = 1 • A cell in State 1 will change to State 2. • A cell in State 2 will change to State 3 and so on. • A cell in State 9 will change to State 0.

  12. Code for the BZ Reaction clear all n=200; %size M=zeros(n); %this will give us an n by n matrix grid=M; %the grid will be made up of the n by n matrix grid=(rand(n))<.06; sum=M; bz=image(cat(3,grid,M,M)); x=[2:n-1]; y=[2:n-1]; axis tight

  13. t = 6; % when t is in active state for i=1:1000 %duration of loop sum(x,y) = ((grid(x,y-1)>0)&(grid(x,y-1)<t)) + ... ((grid(x,y+1)>0)&(grid(x,y+1)<t)) + ... ((grid(x-1, y)>0)&(grid(x-1, y)<t)) + ... ((grid(x+1,y)>0)&(grid(x+1,y)<t)) + ... ((grid(x-1,y-1)>0)&(grid(x-1,y-1)<t)) + ... ((grid(x-1,y+1)>0)&(grid(x-1,y+1)<t)) + ... ((grid(x+1,y-1)>0)&(grid(x+1,y-1)<t)) + ... ((grid(x+1,y+1)>0)&(grid(x+1,y+1)<t)); %the sum of each cell in active state of the 8 surrounding neighbors grid = ((grid==0) & (sum>=3)) + 2*(grid==1) + 3*(grid==2) + ... 4*(grid==3) + 5*(grid==4) + 6*(grid==5) +... 7*(grid==6) + 8*(grid==7) + 9*(grid==8) +... 0*(grid==9); %when state=1, next state=2... set(bz,'cdata', cat(3,M,grid/10,M) ) %bz is the image, cdata contains %data array drawnow%creates image end

  14. Lattice Gas Automata Evolution of Gas Particles

  15. Lattice Gas Automata Rules Cells have 2 states 0 = empty 1 = moving gas particle Each cell has 3 neighbors for a given time step where a block rule is applied to a 2 x 2 block of cells.

  16. Code for Lattice Gas Automata %Cellular Automata model of gas particles in a box with a partition %This will make use of a Margolus neighborhood to create motion of an HPP %(Hardy, Pazzis, Pomeau) lattice gas... Curious if we meet Gibbs' paradox! clear all clf%clears any frames being used. %--------------We must first create our grid---------- %These variables will be used to define the dimension of the matrix in our %grid nx=52; %must be divisible by 4, since each cell will be divided into groups of four ny=100; z=zeros(nx,ny); %Creates an nx by ny matrix of zeros called z o=ones(nx,ny); %Creates an nx by ny matrix of ones called o

  17. %Initialize each of the matrices to be used later cells = z ; cellsNew = z; ground = z ; diag1 = z; diag2 = z; and12 = z; or12 = z; sums = z; orsum = z; %create the box ground(1:nx,ny-3)=1 ; % right ground line ground(1:nx,3)=1 ; % left ground line ground(nx/4:nx/2-2,ny/2)=1; % the hole in the middle of the partition ground(nx/2+2:nx,ny/2)=1; %the hole in the middle of the partition ground(nx/4, 1:ny) = 1; %top line ground(3*nx/4, 1:ny) = 1; %bottom line %We now want to "fill" the left side of the container with "gas particles" r = rand(nx,ny); cells(nx/4+1:3*nx/4-1, 4:ny/2-1) = r(nx/4+1:3*nx/4-1, 4:ny/2-1)<0.3;

  18. %Define the image of the gas particles in the container! imh = image(cat(3,z,cells,ground)); set(imh, 'erasemode', 'none') axis equal axis tight %This is where we define the motion of the particles for i=1:1000 p=mod(i,2); %Margolus neighborhood defined %upper left cell update xind = [1+p:2:nx-2+p]; yind = [1+p:2:ny-2+p]; %See if exactly one diagonal is ones %We can only have one of the following to hold: diag1(xind,yind) = (cells(xind,yind)==1) & (cells(xind+1,yind+1)==1) & ... (cells(xind+1,yind)==0) & (cells(xind,yind+1)==0); diag2(xind,yind) = (cells(xind+1,yind)==1) & (cells(xind,yind+1)==1) & ... (cells(xind,yind)==0) & (cells(xind+1,yind+1)==0);

  19. %This gives the diagonals both not occupied by two particles andboth(xind,yind) = (diag1(xind,yind)==0) & (diag2(xind,yind)==0); %This gives one diagonal occupied by two particles orone(xind,yind) = diag1(xind,yind) | diag2(xind,yind); %For a given gas particle, check if it is near the boundary sums(xind,yind) = ground(xind,yind) | ground(xind+1,yind) | ... ground(xind,yind+1) | ground(xind+1,yind+1) ; %Rules: %If (no walls) and (diagonals are both empty) %then there are no particles to swap, so the block stays the same cellsNew(xind,yind) = ... (andboth(xind,yind) & ~sums(xind,yind) & cells(xind+1,yind+1)) + ... (orone(xind,yind) & ~sums(xind,yind) & cells(xind,yind+1)) + ... (sums(xind,yind) & cells(xind,yind));

  20. cellsNew(xind+1,yind) = (andboth(xind,yind) & ~sums(xind,yind) & cells(xind,yind+1)) + (orone(xind,yind) & ~sums(xind,yind) & cells(xind,yind))+ ... (sums(xind,yind) & cells(xind+1,yind)); %If (no walls) and (only one diagonal occupied) %then this is representative of a collision--- treat as though the %particles hit and deflect each other at 90 degrees, i.e. one diagonal %is converted to the other on the time step. cellsNew(xind,yind+1) = ... (andboth(xind,yind) & ~sums(xind,yind) & cells(xind+1,yind)) + ... (orone(xind,yind) & ~sums(xind,yind) & cells(xind+1,yind+1))+ ... (sums(xind,yind) & cells(xind,yind+1)); %If (wall) %then the cell stays the same in the block (causes a reflection) cellsNew(xind+1,yind+1) = ... (andboth(xind,yind) & ~sums(xind,yind) & cells(xind,yind)) + ... (orone(xind,yind) & ~sums(xind,yind) & cells(xind+1,yind))+ ... (sums(xind,yind) & cells(xind+1,yind+1));

  21. cells = cellsNew; set(imh, 'cdata', cat(3,z,cells,ground) ) drawnow waitforbuttonpress; end

More Related