Consider a 20 by 20 two-dimensional lattice with x and y coordinates varying from 1 to 20. My program needs to simulate two people moving on this lattice in a self-avoiding random walk with periodic boundary conditions. One person starts at position (5,15) and the other starts at (15,5). “Self-avoiding” means that once a node has been visited by one of the walkers, it can never be visited again by either walker.
Help in making this self avoiding and adding another walker??
if true %Random walk in 2D, periodic boundaries
xmax = 20; %grid size
ymax = 20; %grid sizensteps = 400; %number of steps in the simulation
x = round(xmax/2);y = round(ymax/2);plot(x,y,'bo')ht = title('Steps taken = 0');h = [];axis([0.8 xmax+0.2 0.8 ymax+0.2])hold onfor i = 1:nsteps d = randi(4); %direction (north(1), west(2), south(3), east(4))
dx = 0; dy = 0; switch d case 1 dy = 1; case 2 dx = -1; case 3 dy = -1; case 4 dx = 1; end nx = x + dx; ny = y + dy; %Now apply periodic boundary conditions
if nx<1 x = x + xmax; nx = nx + xmax; elseif nx>xmax; x = x - xmax; nx = nx - xmax; end if ny<1 y = y + ymax; ny = ny + ymax; elseif ny>ymax; y = y - ymax; ny = ny - ymax; end %Draw a line from the current position to the next position
if ~isempty(h) set(h,'MarkerEdgeColor','b') end line([x nx],[y ny]) h = plot(nx,ny,'r*'); set(ht,'String',['Steps taken = ' num2str(i)]) x = nx; y = ny; pause(0.1) %the pause that refreshes
endhold off end
Best Answer