ID:50357
Title:asdfjkl;qjwre
Author:Nate Yoder
Date:2008-11-07 21:27:35
Score:23699.6624
Result:22863.80 (cyc: 51, node: 1093)
CPU Time:134.6906
Status:Passed
Comments:
Based on:none
Code:
function [dRow,dCol,action,mark] = solver( ...
    mainMap,foodMap,myAntMap,opAntMap, ...
    myScentMap,opScentMap,myDeathMap,opDeathMap)

% mainMap(mainMap==-1) = 0;

if ~isempty(find(mainMap>0,1))
    foodMap(mainMap == 1) = 0;
end


mark = 0;
closeOpAntMap = opAntMap(2:4,2:4);
if any(any(closeOpAntMap>0)) || ...
        opAntMap(1) || opAntMap(5) || opAntMap(20) || opAntMap(25)
   action = -1;
   dCol=0;
   dRow=0;
   return;
end
mainMap(isnan(mainMap)) = -1;

rand(1,5);
i35=3:5;
i24=2:4;
i02=0:2;
dirx = [-1,2,2,2,-1; 2,-1,-1,-1,2; 2,0,0,0,2; 2,1,1,1,2; 1,2,2,2,1];
diry = [-1,-1,0,1,1; -1,-1,0,1,1; -1,-1,0,1,1; -1,-1,0,1,1; -1,-1,0,1,1];
% find reachable regions
BAD=mainMap<0;
if BAD(7)||BAD(9)||BAD(17)||BAD(19)
   if BAD(7)
       BAD(1)=1;
       BAD(2)=BAD(2)||BAD(8);
       BAD(3)=BAD(3)||(BAD(8)&&BAD(9));
       BAD(6)=BAD(6)||BAD(12);
       BAD(11)=BAD(11)||(BAD(12)&&BAD(17));
   end
   if BAD(9)
       BAD(4)=BAD(4)||BAD(8);
       BAD(5)=1;
       BAD(10)=BAD(10)||BAD(14);
   end
   if BAD(17)
       BAD(16)=BAD(16)||BAD(12);
       BAD(21)=1;
       BAD(22)=BAD(22)||BAD(18);
   end
   if BAD(19)
       BAD(15)=BAD(15)||(BAD(9)&&BAD(14));
       BAD(20)=BAD(20)||(BAD(14));
       BAD(23)=BAD(23)||(BAD(17)&&BAD(18));
       BAD(24)=BAD(24)||(BAD(18));
       BAD(25)=1;
   end
   % modify current board based on reachable regions
   mainMap(BAD)=-1;
   foodMap(BAD)=0;
   myScentMap(BAD)=0;
end
BAD(13)=1;

findFood = 0;
moveHome = 0;
% Don't want to do this because multiple myAntMap will try to action the foodMap
% If you can get foodMap (foodMap(13)>0) action it away from foodMap
if (foodMap(13)>0 && mainMap(13) ~= 1)
   leftOverFoodMap = foodMap(13)-myAntMap(13);
   if leftOverFoodMap >= 0
       action = 1;
       moveHome = 1;
%    elseif rand<((foodMap(13)+myAntMap(13))/2.1)/myAntMap(13)
    elseif rand<(foodMap(13)*1.2)/myAntMap(13)
       action = 1;
       moveHome = 1;
   else
       action = 0;
       findFood = 1;
   end
else
   action = 0;
   findFood = 1;
end

toMark = 0;
if any(any(mainMap==1))
    toMark = 200-myScentMap(13);
    mark = floor(toMark/myAntMap(13))+(rand<rem(toMark,myAntMap(13))/myAntMap(13));
elseif any(any(myScentMap>175)) % Can see near home but not home
    toMark = 150-myScentMap(13);
    mark = floor(toMark/myAntMap(13))+(rand<rem(toMark,myAntMap(13))/myAntMap(13));
elseif any(any(myScentMap>125)) % Can see near home but not home
    toMark = 100-myScentMap(13);
    mark = floor(toMark/myAntMap(13))+(rand<rem(toMark,myAntMap(13))/myAntMap(13));
elseif any(any(myScentMap>75)) % Can see near home but not home
    toMark = 50-myScentMap(13);
    mark = floor(toMark/myAntMap(13))+(rand<rem(toMark,myAntMap(13))/myAntMap(13));
elseif any(any(myScentMap>18))
    toMark = max(max(myScentMap))*9/10-myScentMap(13);
    if toMark > 20
        mark = floor(toMark/myAntMap(13))+(rand<rem(toMark,myAntMap(13))/myAntMap(13));
    else
        mark = 0;
    end
elseif any(any(myScentMap>7))
    toMark = 15-myScentMap(13);
    mark = floor(toMark/myAntMap(13))+(rand<rem(toMark,myAntMap(13))/myAntMap(13));
% else
%     mark = min(floor(min(myScentMap(myScentMap>0))/myAntMap(13))-2,floor(20/myAntMap(13)));
end

% if moveHome && (max(myScentMap(myScentMap>0))-min(myScentMap(myScentMap>0))>100)
%     mark = 0;
% end

if findFood
%     [yhome,xhome] = find(foodMap-myAntMap>0);
%     dhere=min(min(abs(yhome-3),abs(xhome-3)));
   if any(any(foodMap))
       target = foodMap-myAntMap;
       if mark == 0 && toMark == 0
           toMark = 15-myScentMap(13);
           mark = floor(toMark/myAntMap(13))+(rand<rem(toMark,myAntMap(13))/myAntMap(13));
       end
%        target = 1./(round(rand)*myScentMap+1E5*(mainMap>0)+1e-1);
%        target = 1./(round(rand)*100*(myScentMap>20)+1E5*(mainMap>0)+1e-1);
%         target = 1./(1E5*(mainMap>0)+round(rand)*(myScentMap>40)+1e-1);
   else
       if any(any(myScentMap(~BAD)<18))
           target = myScentMap<18;
       else
           target = 1./((myScentMap>100)*1E3+1E5*(mainMap>0)+1e-1);
%            target = rand(5,5);
       end
   end
%     mark=10;
elseif moveHome
    if any(any(myScentMap>17))
        target = myScentMap+1E6*(mainMap>0);
    else
        target = rand(5,5);
    end
end



target(BAD)=-1;
[y,x]=find(target==max(target(:)));
if (numel(y)>1)
   r=ceil(rand*numel(y));
   y=y(r);
   x=x(r);
end

dCol = dirx(x,y);
if dCol<2
   dRow = diry(x,y);
   return;
end;
m(7,7)=0;
m(y+i02,x+i02)=1;
m=m(i35,i35);
t=target(i24,i24).*m+m;
[dRow,dCol]=find(t==max(t(:)));
r=ceil(rand*numel(dRow));
dRow=dRow(r)-2;
dCol=dCol(r)-2;


return;