ID:49937
Title:Wild Hunter
Author:Nick Howe
Date:2008-11-06 10:10:00
Score:10407.8198
Result:9725.01 (cyc: 17, node: 545)
CPU Time:132.2652
Status:Passed
Comments:
Based on:none
Code:
function [dRow,dCol,action,mark] = wildhunter(mainMap,foodMap,myAntMap,opAntMap, ...
    myScentMap,opScentMap,myDeathMap,opDeathMap)

%dRt = repmat([-1;-1;0;1;1],1,5);
%dCt = dRt';

% mask
mask = isnan(mainMap);
if mask(7)
    mask([1 2 6]) = true;
end;
if mask(9)
    mask([4 5 10]) = true;
end;
if mask(17)
    mask([16 21 22]) = true;
end;
if mask(19)
    mask([20 24 25]) = true;
end;
if mask(8)
    mask(3) = true;
end;
if mask(12)
    mask(11) = true;
end;
if mask(14)
    mask(15) = true;
end;
if mask(18)
    mask(23) = true;
end;
mainMap(mask) = nan;

% decide scent
if (mainMap(13) == 1)
    mark = 100;
else
    mark = floor((max(max(myScentMap(2:4,2:4)))-myScentMap(13)-1)/myAntMap(13));
end;
myScentMap(mainMap==1) = inf;

% fight if challenged
if (any(any(opAntMap(2:4,2:4))))
    action = -1;
    dRow = 0;
    dCol = 0;
    return
end;

% look for food
action = 0;
netFood = foodMap-myAntMap;
netFood(mask) = 0;
netFood(mainMap==1) = 0;
if (mainMap(13)~=1)&&(foodMap(13) > 0)&&(rand > (myAntMap(13)-foodMap(13))/myAntMap(13))
    % carry
    action = 1;
    myScentMap(mask) = -inf;
    myScentMap(13) = -inf;
    maxScent = max(myScentMap(:));
    if (maxScent == 0)
        [r,c] = find(~isnan(mainMap(2:4,2:4)));
        pick = ceil(rand*numel(r));
        dRow = sign(r(pick)-2);
        dCol = sign(c(pick)-2);
    else
        [r,c] = find(myScentMap==maxScent);
        dRow = sign(r(1)-3);
        dCol = sign(c(1)-3);
    end;
elseif (any(netFood(:) > 0))
    % gather
    [r,c] = find(netFood==max(netFood(:)));
    dRow = sign(r(1)-3);
    dCol = sign(c(1)-3);
else
    % explore
    if (rand>.9)
        [r,c] = find(~isnan(mainMap(2:4,2:4)));
        pick = ceil(rand*numel(r));
        dRow = sign(r(pick)-2);
        dCol = sign(c(pick)-2);
    else
        myScentMap(mask) = inf;
        myScentMap(13) = inf;
        [r,c] = find(myScentMap==min(myScentMap(:)));
        pick = ceil(rand*numel(r));
        dRow = sign(r(pick)-3);
        dCol = sign(c(pick)-3);
    end;
end;
end