| 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))
[a b] = find(mainMap(1:5,1:5)==1);
dRow = max(2,min(4,a))-3;
dCol = max(2,min(4,b))-3;
else
[a b] = find(myScentMap == max(max(myScentMap)));
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))
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
action = -1;
dRow = round(rand*2) - 1;
dCol = round(rand*2) - 1;
end
if opAntMap(3,3) > 0 && rand() < myAntMap(3,3)/opAntMap(3,3)
action = -1;
dRow = 0;
dCol = 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];
if ~isempty(find(mainMap.*outermask == 1))
mark = 100;
else
mark = round(max(max(myScentMap))./100);
end
end |