Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- clear();clc();close()
- A = zeros(200,20);
- A_up = 6*ones(1,20);
- A_down = zeros(1,20);
- A_left = 6*ones(202,1);
- A_right = A_left;
- A = [A_up; A; A_down];
- A = [A_left A A_right]
- A(202,11) = 10000;
- M = zeros(200,20);
- M_up = (-6)*ones(1,20);
- M_left = (-6)*ones(202,1);
- M = [M_up; M; M_up];
- M = [M_left M M_left]
- max_ant = 20
- deposit = 3;
- maximum = 20;
- level1 = 5;
- level2 = 10;
- level3 = 15;
- level4 = 20;
- total_ants = 10000;
- N = total_ants
- SEMUT(:,:,1) = A;
- PHERO(:,:,1) = M;
- t = 2;
- for asdf = 1:300
- for i = 2:202
- for j = 2:21
- if A(i,j)>0
- for k = 1:A(i,j)
- NWp = M(i-1,j-1);
- NEp = M(i-1,j+1);
- lst = [NWp NEp];
- mx = max(lst);
- plst = find(lst == mx);
- post = plst(randi([1,length(plst)],1));
- pher = lst(1,plst(randi([1,length(plst)],1)));
- if pher == 0
- if i > 2
- if j == 2
- n = 2;
- elseif j == 21
- n = 1;
- else
- n = randi(2);
- end
- if n == 1
- if A(i-1,j-1) < max_ant || i == 3
- A(i,j) = A(i,j) - 1;
- A(i-1,j-1) = A(i-1,j-1) + 1;
- if i == 202 && N>0
- N = N-1;
- A(i,j) = A(i,j) + 1;
- end
- if M(i,j) < maximum
- M(i,j) = M(i,j) + deposit;
- else
- M(i,j) = M(i,j);
- end
- end
- else
- if A(i-1,j+1) < max_ant || i == 3
- A(i-1,j+1) = A(i-1,j+1) + 1;
- A(i,j) = A(i,j) - 1;
- if i == 202 && N>0
- N = N-1;
- A(i,j) = A(i,j) + 1;
- end
- if M(i,j) < maximum
- M(i,j) = M(i,j) + deposit;
- else
- M(i,j) = M(i,j);
- end
- end
- end
- end
- elseif pher < level1
- kecepatan = 1;
- x = i;
- y = j;
- for m = 1: kecepatan
- if x-1 > 1
- NWp = M(x-1,y-1);
- NEp = M(x-1,y+1);
- if y == 2
- NWp = -1;
- elseif y == 21
- NEp = -1;
- end
- lst = [NWp NEp];
- mx = max(lst);
- plst = find(lst == mx);
- post = plst(randi([1,length(plst)],1));
- if post == 1
- if A(x-1,y-1) < max_ant || x == 3
- A(x,y) = A(x,y) - 1;
- A(x-1,y-1) = A(x-1,y-1) + 1;
- if x == 202 && N>0
- N = N-1;
- A(x,y) = A(x,y) + 1;
- end
- if M(x,y) < maximum
- M(x,y) = M(x,y) + deposit;
- else
- M(x,y) = M(x,y);
- end
- x = x-1;
- y = y-1;
- end
- else
- if A(x-1,y+1) < max_ant || x == 3
- A(x-1,y+1) = A(x-1,y+1) + 1;
- A(x,y) = A(x,y) - 1;
- if x == 202 && N>0
- N = N-1;
- A(x,y) = A(x,y) + 1;
- end
- if M(x,y) < maximum
- M(x,y) = M(x,y) + deposit;
- else
- M(x,y) = M(x,y);
- end
- x = x-1;
- y = y+1;
- end
- end
- end
- end
- elseif pher < level2
- kecepatan = 2;
- x = i;
- y = j;
- for m = 1: kecepatan
- if x-1 > 1
- NWp = M(x-1,y-1);
- NEp = M(x-1,y+1);
- if y == 2
- NWp = -1;
- elseif y == 21
- NEp = -1;
- end
- lst = [NWp NEp];
- mx = max(lst);
- plst = find(lst == mx);
- post = plst(randi([1,length(plst)],1));
- if post == 1
- if A(x-1,y-1) < max_ant || x == 3
- A(x,y) = A(x,y) - 1;
- A(x-1,y-1) = A(x-1,y-1) + 1;
- if x == 202 && N>0
- N = N-1;
- A(x,y) = A(x,y) + 1;
- end
- if M(x,y) < maximum
- M(x,y) = M(x,y) + deposit;
- else
- M(x,y) = M(x,y);
- end
- x = x-1;
- y = y-1;
- end
- else
- if A(x-1,y+1) < max_ant || x == 3
- A(x-1,y+1) = A(x-1,y+1) + 1;
- A(x,y) = A(x,y) - 1;
- if x == 202 && N>0
- N = N-1;
- A(x,y) = A(x,y) + 1;
- end
- if M(x,y) < maximum
- M(x,y) = M(x,y) + deposit;
- else
- M(x,y) = M(x,y);
- end
- x = x-1;
- y = y+1;
- end
- end
- end
- end
- elseif pher < level3
- kecepatan = 3;
- x = i;
- y = j;
- for m = 1: kecepatan
- if x-1 > 1
- NWp = M(x-1,y-1);
- NEp = M(x-1,y+1);
- if y == 2
- NWp = -1;
- elseif y == 21
- NEp = -1;
- end
- lst = [NWp NEp];
- mx = max(lst);
- plst = find(lst == mx);
- post = plst(randi([1,length(plst)],1));
- if post == 1
- if A(x-1,y-1) < max_ant || x == 3
- A(x,y) = A(x,y) - 1;
- A(x-1,y-1) = A(x-1,y-1) + 1;
- if x == 202 && N>0
- N = N-1;
- A(x,y) = A(x,y) + 1;
- end
- if M(x,y) < maximum
- M(x,y) = M(x,y) + deposit;
- else
- M(x,y) = M(x,y);
- end
- x = x-1;
- y = y-1;
- end
- else
- if A(x-1,y+1) < max_ant || x == 3
- A(x-1,y+1) = A(x-1,y+1) + 1;
- A(x,y) = A(x,y) - 1;
- if x == 202 && N>0
- N = N-1;
- A(x,y) = A(x,y) + 1;
- end
- if M(x,y) < maximum
- M(x,y) = M(x,y) + deposit;
- else
- M(x,y) = M(x,y);
- end
- x = x-1;
- y = y+1;
- end
- end
- end
- end
- else
- kecepatan = 4;
- x = i;
- y = j;
- for m = 1: kecepatan
- if x-1 > 1
- NWp = M(x-1,y-1);
- NEp = M(x-1,y+1);
- if y == 2
- NWp = -1;
- elseif y == 21
- NEp = -1;
- end
- lst = [NWp NEp];
- mx = max(lst);
- plst = find(lst == mx);
- post = plst(randi([1,length(plst)],1));
- if post == 1
- if A(x-1,y-1) < max_ant || x == 3
- A(x,y) = A(x,y) - 1;
- A(x-1,y-1) = A(x-1,y-1) + 1;
- if x == 202 && N>0
- N = N-1;
- A(x,y) = A(x,y) + 1;
- end
- if M(x,y) < maximum
- M(x,y) = M(x,y) + deposit;
- else
- M(x,y) = M(x,y);
- end
- x = x-1;
- y = y-1;
- end
- else
- if A(x-1,y+1) < max_ant || x == 3
- A(x-1,y+1) = A(x-1,y+1) + 1;
- A(x,y) = A(x,y) - 1;
- if x == 202 && N>0
- N = N-1;
- A(x,y) = A(x,y) + 1;
- end
- if M(x,y) < maximum
- M(x,y) = M(x,y) + deposit;
- else
- M(x,y) = M(x,y);
- end
- x = x-1;
- y = y+1;
- end
- end
- end
- end
- end
- end
- end
- end
- end
- SEMUT(:,:,t) = A;
- PHERO(:,:,t) = M;
- t = t + 1;
- end
- for i = 1:t-1
- colormap([1 1 1;
- 0 0 0])
- image(SEMUT(:,:,i)+1)
- KIN(i) = getframe()
- end
- for i = 1:t-1
- colormap(gray(30))
- image(PHERO(:,:,i)+7)
- KAN(i) = getframe()
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement