| Code: | function [dRow,dCol,action,mark] = solver(mainMap,foodMap,myAntMap,opAntMap, ...
myScentMap,opScentMap,myDeathMap,opDeathMap)
nfoodMap = foodMap.*~(mainMap == 1);
if rand < nfoodMap(3,3)%/myAntMap(3,3)
action = 1;
if ~isempty(find(mainMap(1:5,1:5)==1))
n = rand;
if n < 0.33
[a b] = find(mainMap==1);
ix = a==3&b==3;
a(ix)=[];
b(ix)=[];
elseif n < 0.66
[a b] = find(mainMap(2:4,2:4)==1);
a = a+1;
b=b+1;
ix = a==3&b==3;
a(ix)=[];
b(ix)=[];
else
[a b] = find(~isnan(mainMap(2:4,2:4)));
a = a+1;
b=b+1;
ix = a==3&b==3;
a(ix)=[];
b(ix)=[];
end
if isempty(a)
[a b] = find(~isnan(mainMap(2:4,2:4)));
a = a+1;
b=b+1;
ix = a==3&b==3;
a(ix)=[];
b(ix)=[];
end
dRow = max(2,min(4,a(ceil(rand*length(a)))))-3;
dCol = max(2,min(4,b(ceil(rand*length(b)))))-3;
else
if rand < 0.5
[a b] = find(myScentMap(2:4,2:4) == max(max(myScentMap(2:4,2:4))));
else
[a b] = find(myScentMap == max(max(myScentMap)));
end
dRow = max(2,min(4,a(ceil(rand*length(a)))))-3;
dCol = max(2,min(4,b(ceil(rand*length(b)))))-3;
end
elseif ~isempty(find(nfoodMap > 0))
% action = -1;
% n = rand;
% if n < 0.9
% [a b] = find(nfoodMap > 0);
% ix = a==3&b==3;
% a(ix)=[];
% b(ix)=[];
% elseif n < 0.66
% [a b] = find(nfoodMap(2:4,2:4)>0);
% ix = a==3&b==3;
% a(ix)=[];
% b(ix)=[];
% else
% [a b] = find(~isnan(mainMap(2:4,2:4)));
% ix = a==3&b==3;
% a(ix)=[];
% b(ix)=[];
% end
% if isempty(a)
% [a b] = find(~isnan(mainMap(2:4,2:4)));
% ix = a==3&b==3;
% a(ix)=[];
% b(ix)=[];
% end
%
% dRow = max(2,min(4,a(ceil(rand*length(a)))))-3;
% dCol = max(2,min(4,b(ceil(rand*length(b)))))-3;
foodsum = sum(sum(nfoodMap));
chanceup = sum(sum(nfoodMap(1:2,:)))/foodsum;
chancestay = sum(sum(nfoodMap(3,:)))/foodsum;
rowrand = rand();
if rowrand < chanceup
dRow = -1;
elseif rowrand < chanceup + chancestay
dRow = 0;
else
dRow = 1;
end
chanceleft = sum(sum(nfoodMap(:,1:2)))/foodsum;
chancestay = sum(sum(nfoodMap(:,3)))/foodsum;
colrand = rand();
if colrand < chanceleft
dCol = -1;
elseif colrand < chanceleft + chancestay
dCol = 0;
else
dCol = 1;
end
action = -1;
else
n = rand;
if n < 0.33
[a b] = find(myScentMap(2:4,2:4) == min(min(myScentMap(2:4,2:4))));
a = a+1;
b=b+1;
ix = a==3&b==3;
a(ix)=[];
b(ix)=[];
elseif n < 0.66
[a b] = find(myScentMap == min(min(myScentMap)));
ix = a==3&b==3;
a(ix)=[];
b(ix)=[];
else
[a b] = find(~isnan(mainMap(2:4,2:4)));
a = a+1;
b=b+1;
ix = a==3&b==3;
a(ix)=[];
b(ix)=[];
end
if isempty(a)
[a b] = find(~isnan(mainMap(2:4,2:4)));
a = a+1;
b=b+1;
ix = a==3&b==3;
a(ix)=[];
b(ix)=[];
end
dRow = max(2,min(4,a(ceil(rand*length(a)))))-3;
dCol = max(2,min(4,b(ceil(rand*length(b)))))-3;
action = 0;
end
outermask = [1 1 1 1 1;1 0 0 0 1;1 0 0 0 1;1 0 0 0 1;1 1 1 1 1];
innermask = [0 0 0 0 0;0 1 1 1 0;0 1 1 1 0;0 1 1 1 0;0 0 0 0 0];
mark = max((50000-myScentMap(3,3))*mainMap(3,3), max(max(myScentMap))/4 - myScentMap(3,3))/myAntMap(3,3);
%mark = max((1000-myScentMap(3,3))*sum(sum((mainMap==1).*outermask == 1)), min(isempty(find(mainMap.*innermask==1)),1)*max(max(myScentMap))/4-myScentMap(3,3))/myAntMap(3,3);
if opAntMap(3,3) > 0 && rand() < myAntMap(3,3)/opAntMap(3,3)
action = -1;
dRow = 0;
dCol = 0;
end
end |