ID:50741
Title:DYS partial
Author:Yuko Santo
Date:2008-11-09 09:39:24
Score:24399.8924
Result:24363.11 (cyc: 15, node: 643)
CPU Time:86.1142
Status:Passed
Comments:
Based on:Deacon_0003
Code:
function [dRow,dCol,action,mark] = chintweak(mainMap,foodMap,myAntMap,opAntMap, ...
    myScentMap,opScentMap,myDeathMap,opDeathMap)

% Commented by Alan Chalker
% PLEASE LEAVE THE COMMENTS IN IF YOU REUSE!
%
% Setup obstacle mask
mask = isnan(mainMap); % Find existing obstacles
%K = [7 7 7 9 9  9 17 17 17 19 19 19 8 12 14 18]; % Indexes for just immediate neighbours
L = [1 2 6 4 5 10 16 21 22 20 24 25 3 11 15 23]; % Mapping index to outer neighbours
Y = [7 8 9 12 13 14 17 18 19]; % Mask for immediate neighbours
mask(L(mask([7 7 7 9 9  9 17 17 17 19 19 19 8 12 14 18]))) = true; %Fill in outer neighbours if inner neighbour is an obstacle
mainMap(mask) = nan; % Apply mask to map

% Default Actions are no actions.
dRow = 0;
dCol = 0;

% Setup scent trail to be decreasing further from bases
myScent = myScentMap(13);
H = mainMap == 1; 
if H(13)
    mark = 100; 
else
    mark = floor((max(myScentMap(Y))-myScent-1)/myAntMap(13)); 
end
myScentMap(H) = inf; %mask bases as maximium scent

%% Fight Mode
if (any(opAntMap(Y))) 
    if (sum(myAntMap(:))<8)||(rand < 0.3) 
        action = -1; 
        return
    else 
        if sum(opAntMap(Y))>19
            action = -1;
            return
        end
    end
    mainMap(opAntMap > 0 & opAntMap <8) = nan;  
end

action = 0;

%% Food Search
% look for food in view
foodMap(H) = 0; 
netFood = foodMap-myAntMap; 
netFood(mask|H) = 0; 
netFood = netFood > 0; 
myFood = foodMap(13);
if (myFood > 0)&&(rand > (myAntMap(13)-myFood)/myAntMap(13))
    lowFood = netFood&(myScentMap<myScent);
    if ~any(lowFood(:))||((myFood > 1)&&(rand > sqrt(1/myFood))) 
        action = 1;
        myScentMap(mask) = -inf; 
        myScentMap(13) = -inf;
        maxScent = max(myScentMap(:)); 
        if (maxScent == 0) 
            mainMap(13) = nan;
            [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
    else 
        lowFoodPositive = lowFood > 0;
        [r,c] = find(lowFoodPositive&(myScentMap==min(myScentMap(lowFoodPositive)))); 
        dRow = sign(r(1)-3); 
        dCol = sign(c(1)-3);
    end
elseif any(netFood(:) > 0) 
    [r,c] = find(netFood&(myScentMap==min(myScentMap(netFood)))); 
    dRow = sign(r(1)-3); 
    dCol = sign(c(1)-3);
else 
    if rand>.82 
        mainMap(13) = nan;
        [r,c] = find(~isnan(mainMap(2:4,2:4))); 
        if isempty(r)
            action = -1;
            dRow=0;
            dCol=0;
            return;
        end;
        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