function taskSelectionPureRandom
% Funzione che realizza la logica di assegnazione Nearly Brute Force

global X pool t;

%% aggiornamento liste:
for n = 1 : length(X) %per ogni agente:
    [X(n).index] = deal([]); %pulisci liste e punteggi.
    for h = 1 : length(pool) %scorre il pool
        if ismember(n,[pool(h).list]) %se il task e' compatibile:
            X(n).index(end+1) = h; %salva posizione nel pool
        end
    end
%     message(['AGENT' num2str(n) '. compatibile list:']);
%     message(X(n).index');
end

%% assegnazione:
for n = randperm(length(X))   %per ogni agente (in ordine casuale):
    % se l'agente sta eseguendo un task diverso dal patroling passa
    % all'agente successivo:
    if isstruct(X(n).tsk) && ~strcmp(X(n).tsk.type,'pat')
        disp('agente continua ad eseguire il suo task');
        continue;
    end
    % altrimenti scorri in ordine casuale i task compatibili ed associa il
    % primo libero (se non comporta lo scambio di due patroling):
    for h = X(n).index(randperm(length(X(n).index)))
        if pool(h).a == 0
            if isstruct(X(n).tsk)
                if strcmp(pool(h).type,'pat'), break;
                else pool(logical(X(n).tsk.ID == [pool.ID])).a = 0;
                end
            end
            pool(h).a = n;
            X(n).tsk = pool(h);
            message(['Agent' num2str(n) ' now executes:']);
            message(X(n).tsk);
            break;
        end
    end
end

end


