1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
|
n = 100;
m = 100;
milieu = zeros(n,m); % Matrice modélisant le mileu de vie
milieu (50,50) = 50; % On place le premier individu sur une case centrale
% On fixe la durée de l'expérience à 1000 déplacements
for k = 1 : 1000
% On test chaque case du milieu
for i = 1 : n
for j = 1 : m
if milieu(i,j) ~= 0 % On test si la case est vide ou non
% On déplace l'individu aléatoirement
a = floor( rand(1)*3 )-1;
b = floor( rand(1)*3 )-1;
if ((a ~= 0) & (b ~= 0)) & (milieu(i+a,j+b) ~= milieu(i,j))
milieu(i+a,j+b) = milieu(i,j);
milieu(i,j) = 0;
end
% On tue les individus étant entourés de 8 autres individus
if milieu(i+1,j+1)~= 0 & milieu(i,j+1) ~= 0 & milieu(i-1,j+1) ~= 0 & milieu(i+1,j) ~= 0 & milieu(i+1,j-1) ~= 0 & milieu(i,j) ~= 0 & milieu(i-1,j) ~= 0 & milieu(i,j-1) ~= 0 & milieu(i-1,j-1) ~= 0
milieu(i,j) = 0;
end
% Chaque individu peut se reproduire (20% de chance)
if ( floor(rand(1)*100) < 20 )
e = 1; % Variable permettant d'entrer une première fois dans la boucle
% On test si une des cases adjacentes est libre
% d'acceuillir un nouvel individu
while (e == 1) | ((milieu(i+a,j+b) ~= 0) & (milieu(i+1,j+1) == 0 | milieu(i,j+1) == 0 | milieu(i-1,j+1) == 0 | milieu(i+1,j) == 0 | milieu(i+1,j-1) == 0 | milieu(i,j) == 0 | milieu(i-1,j) == 0 | milieu(i,j-1) == 0 | milieu(i-1,j-1) == 0))
e = 0;
a = floor( rand(1)*3 )-1;
b = floor( rand(1)*3 )-1;
end
milieu(i+a,j+b) = 50;
end
image(milieu);
end
end
end
pause(0.2);
end |
Partager