| Code: | function [dRow,dCol,action,mark] = solver(mainMap,foodMap,myAntMap,opAntMap, ...
myScentMap,opScentMap,myDeathMap,opDeathMap)
global iCont
if isempty(iCont)
iCont=0;
end
iCont=iCont+1;
if mod(iCont,100)==1
kk=9;
end
foodMap=max(foodMap-1e6.*double(mainMap==1),0);
if ~isempty(find(mainMap,1))
mark=100;
else
mark=20;
end
fProbNido=foodMap(3,3)/myAntMap(3,3);
fAleatorio=rand;
if fAleatorio<fProbNido
action=1;
IrNido=1;
mark=1;
else
action=0;
IrNido=0;
end
bCercaNido=0;
if IrNido
[r,c]=find(mainMap==1);
if isempty(r)
[r,c]=find(myScentMap~=0);
end
if isempty(r)
bCercaNido=0;
dRow = round(rand*2) - 1;
dCol = round(rand*2) - 1;
while isnan(mainMap(3+dRow,3+dCol)) || (dRow==0 && dCol==0)
dRow = round(rand*2) - 1;
dCol = round(rand*2) - 1;
end
else
bCercaNido=1;
[kk,imin]=min((r-3).^2+(c-3).^2);
iRow=r(imin(1))-3;
iCol=c(imin(1))-3;
dRow=fnlimit(iRow,-1,1);
dCol=fnlimit(iCol,-1,1);
while isnan(mainMap(3+dRow,3+dCol)) || (dRow==0 && dCol==0)
dRow = round(rand*2) - 1;
dCol = round(rand*2) - 1;
end
end
else
[r,c]=find(foodMap-opAntMap>0);
if isempty(r)
dRow = round(rand*2) - 1;
dCol = round(rand*2) - 1;
while isnan(mainMap(3+dRow,3+dCol)) || (dRow==0 && dCol==0)
dRow = round(rand*2) - 1;
dCol = round(rand*2) - 1;
end
else
[kk,imin]=min((r-3).^2+(c-3).^2);
dRow=fnlimit(r(imin(1))-3,-1,1);
dCol=fnlimit(c(imin(1))-3,-1,1);
end
end
if bCercaNido || max(max(opDeathMap))>0
fProbAtacar=opAntMap(3,3)/myAntMap(3,3);
fAleatorio=rand;
if fAleatorio<fProbAtacar
dRow=0;
dCol=0;
action=-1;
end
end
end
function [Output]=fnlimit(fNumber,fMin,fMax)
Output=max(min(fNumber,fMax),fMin);
end
|