ID:50062
Title:myAnt2
Author:Werner Schmid
Date:2008-11-06 23:45:00
Score:39557.0592
Result:37454.58 (cyc: 17, node: 946)
CPU Time:149.2450
Status:Passed
Comments:
Based on:none
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