Fitness Funktion

Das allgemeine Format der Fitnessfunktion war angegeben worden als

$Fit : P \longmapsto P \times FVAL$

Es war erklärt worden, dass eine Fitnessfunktion mindestens eine Variable - in unserem Fall des Fitnesswert $f \in FVAL$ - in Abhängigkeit von mindestens einer veränderlichen Variablen - in unserem Fall die einzelnen Informationsketten von POP - optimiert. Goldberg [144] benutzt in seinem Beispiel eine sehr einfache Fitnessfunktion $Fit(x) = x^{2}$. Dies bedeutet, dass die Informationsketten $g \in \{0,1\}^{5}$ danach bewertet werden, wie hoch ihr Quadratwert $x^{2}$ ist.

Da die Fitnessfunktion Dezimalzahlen voraussetzt, muss man die Werte der binären Informationsketten in Dezimalzahlen umrechnen. Im scilab Programm 8.1.1 wird für diese Umrechnung die Funktion $bin22dec$ zur Verfügung gestellt. Diese berechnet die dezimalen Werte der binären Werte auf den Positionen 1-5 und speichert das Resultat in Spalte 6.

-->POP,l=5,show=0,[POP]=bin22dec(POP,l,show)
  
 POP  =
 
    0.    1.    1.    0.    1.    13.  
    1.    1.    0.    0.    0.    24.  
    0.    1.    0.    0.    0.    8.   
    1.    0.    0.    1.    1.    19.

Auf diese dezimalen Werte in Spalte 6 kann dann die Fitnessfunktion $Fit()$ anwenden, die im Programm 8.1.1 $fitnessComp1()$ heißt; deren Ergebnis wird dann in Spalte 7 abgespeichert.

[POP]=fitnessComp1(POP,l,show)
 POP  =
 
    0.    1.    1.    0.    1.    13.    169.  
    1.    1.    0.    0.    0.    24.    576.  
    0.    1.    0.    0.    0.    8.     64.   
    1.    0.    0.    1.    1.    19.    361.

Zusätzlich wird die Gesamtfitness berechnet, die maximale Fitness unter allen Fitnesswerten, sowie der durchschnittliche Fitnesswert ('average fitness', AFITNESS).

-->[FITNESS_ALL]=fitness(POP,l,show)
 FITNESS_ALL  =
 
    1170.  
 
-->[MFITNESS]=maxfitness(POP,l,show)
 MFITNESS  =
 
    576.

Dann wird in der Spalten 8 die relative Fitness für jedes Element berechnet und in Spalte 9 wird dieser Wert mit der Anzahl $n$ der Elemente multipliziert. Dieser Wert wird dann weiter umgerechnet in einen Ganzzahlanteil in Spalte 10. Diese Ganzzahl repräsentiert dann die potentielle Anzahl $n$ der Mitglieder in der nächsten Generation.

-->n=4,[POP,AFITNESS]=rfitness(POP,l,n,FITNESS_ALL,show)
 n  =
 
    4.  
 AFITNESS  =
 
    292.5  
 POP  =
 
    0.    1.    1.    0.    1.    13.    169.    0.1444444    0.5777778    1.  
    1.    1.    0.    0.    0.    24.    576.    0.4923077    1.9692308    2.  
    0.    1.    0.    0.    0.    8.     64.     0.0547009    0.2188034    0.  
    1.    0.    0.    1.    1.    19.    361.    0.3085470    1.234188     1.

Gerd Doeben-Henisch 2014-01-14