
%--------------------
% Funcao para Cálculo da Distância Geracional Invertida (IGD)
function IGD = CalculaIGD(pareto, solucao)
    
    % entradas:
    % pareto - Soluções da Fronteira de Pareto
    % solucao - Soluções não dominadas obtidas pelo algoritmo em teste

    [npareto,~] = size(pareto);   % núm. de soluções da fronteira de Pareto
    [nsol,~] = size(solucao);     % núm. de soluções obtidas pelo algoritmo desenvolvido
    
    dmin = zeros(1,npareto);    % guarda menores distâncias (di) entre a fronteira pareto e as soluções não dominadas
    d = zeros(npareto,nsol);    % dist. euclidiana entre cada ponto da fronteira pareto e cada solução não dominada
    
    % calcula distância euclidiana ponto a ponto
    for i=1:npareto
        for j=1:nsol            
            d(i,j) = norm(pareto(i,:)-solucao(j,:),2);
        end
        
        % guarda menor distância
        dmin(i) = min(d(i,:));
    end
    
    % realiza a média das menores distâncias
    IGD = mean(dmin);
    
end