function [ fitnesswert, idealwert, aussenlaenge, wabenanzahl, fitnessquotient ] = fitness( zustandsraum )
%FITNESS Berechnet den Fitnesswert für eine beliebige Wabenstruktur
%   Kriterien zur Berechnung der Fitness können stark variieren.
%   Erste Ideen: - Kompaktheit der Struktur: man berechnet die
%                 Gesamtlänge der Außenkanten und teilt sie durch die
%                 Anzahl der bebauten Zellen. Je höher dieser Wert, desto
%                 kompakter die Struktur - Idealfall: Kreisform
%                - Geschlossenheit: Löcher in der Struktur müssen zur
%                  Abwertung der Fitness führen

global Knotenzahl;

zellenflaeche = ( 3 / 2 ) * sqrt( 3 );

bebautezellen = find(zustandsraum(4,:));

wabenanzahl = length(bebautezellen);

aussenlaenge = 0;
for zellindex=1:wabenanzahl
    nachbarliste = nachbarn(bebautezellen(zellindex));
    for zindex=1:6
        if (nachbarliste(zindex) < 1) || (nachbarliste(zindex) > Knotenzahl)
            bebauung = 0;
        else
            bebauung = zustandsraum(4,nachbarliste(zindex));
        end
        if bebauung == 0
            aussenlaenge = aussenlaenge + 1;
        end
    end
end

% Kantenlänge des Sechsecks ist 1
% Nimmt man als Fitnesswert das Verhältnis von Fläche zu Umfang der
% Struktur (möglichst groß), so ergibt sich der Idealwert für die Fitness
% bei einer Kreisform:
% - Fläche = Radius ^ 2 * pi
% - Umfang = 2 * Radius * pi
% - Fläche = (Umfang / 2*pi) ^2 * pi = ( Umfang^2 / 4*pi )
% - Fläche / Umfang = Umfang / 4*pi

idealwert = aussenlaenge / ( 4 * pi );
fitnesswert = (wabenanzahl * zellenflaeche) / aussenlaenge;

% differenz = abs(idealwert - fitnesswert);
fitnessquotient = fitnesswert / idealwert;

end