Crossover (Vermischung)

$cross : P \mapsto P$

Die theoretische crossover-Funktion $cross()$ (die eine spezielle 'Vermischung' von zwei Informationsketten durchführt), wird in dem scilab Programm in zwei Schritten realisiert. Zunächst wird die vorbereitende Funktion $crossoverPrep()$ ausgeführt. In dieser Funktion werden zwei Zeilen 'j' und 'r' per Zufall ausgewählt - hier: $j=1$ und $r=2$ - und diese werden dann für die eigentliche crossover-Operation benutzt. Die Kette aus der j-ten Zeile wird links abgelegt und die Kette aus der r-ten Zeile rechts, so dass beide Ketten ein potentielles Paar bilden.

-->show=1,[POP]= crossoverPrep(POP,l,p,n,show)
 show  =
 
    1.  
 
 j=   
 
    1.  
 
 r=   
 
    2.  
 
 j=   
 
    2.  
 
 r=   
 
    1.  
 
 j=   
 
    3.  
 
 r=   
 
    1.  
 
 j=   
 
    4.  
 
 r=   
 
    2.  
 
 crossoverPrep=   
 
    1.    1.    0.    0.    0.    24.    576.    0.4923077    1.9692308    2.    1.    1.    0.    0.    0.  
    1.    1.    0.    0.    0.    24.    576.    0.4923077    1.9692308    2.    1.    1.    0.    0.    0.  
    0.    1.    1.    0.    1.    13.    169.    0.1444444    0.5777778    1.    1.    1.    0.    0.    0.  
    1.    0.    0.    1.    1.    19.    361.    0.3085470    1.234188     1.    1.    1.    0.    0.    0.  
 POP  =
 
    1.    1.    0.    0.    0.    24.    576.    0.4923077    1.9692308    2.    1.    1.    0.    0.    0.  
    1.    1.    0.    0.    0.    24.    576.    0.4923077    1.9692308    2.    1.    1.    0.    0.    0.  
    0.    1.    1.    0.    1.    13.    169.    0.1444444    0.5777778    1.    1.    1.    0.    0.    0.  
    1.    0.    0.    1.    1.    19.    361.    0.3085470    1.234188     1.    1.    1.    0.    0.    0.

Nach dieser Vorbereitung generiert die scilab $crossover()$-Funktion für jede Zeile einen 'Schneidepunkt' $x \in [1,l-1]$, bezogen auf den der rechte Teil der linken Kette durch den rechten Teil der rechten Kette ersetzt wird.

-->[POP]= crossover(POP,l,p,n,show) 
crossover x = 2
crossover x = 2
crossover x = 1
crossover x = 3
 POP  =
 
    1.    1.    0.    0.    0.    24.    576.    0.4923077    1.9692308    2.    1.    1.    0.    0.    0.  
    1.    1.    0.    0.    0.    24.    576.    0.4923077    1.9692308    2.    1.    1.    0.    0.    0.  
    0.    1.    0.    0.    0.    13.    169.    0.1444444    0.5777778    1.    1.    1.    0.    0.    0.  
    1.    0.    0.    0.    0.    19.    361.    0.3085470    1.234188     1.    1.    1.    0.    0.    0.

Nochmals, um einer Verwirrung vorzubeugen, die beiden scilab Funktionen 'crossoverPrep()' und 'crossover() zusammen repräsentieren die theoretische crossover Funktion $cross()$. Man könnte die Funktion $crossoverprep()$ natürlich leicht in die Funktion $cross()$ integrieren, aber da es verschiedene Varianten von der Funktion $cross()$ geben kann, soll hier, um die Transparenz möglichst zu erhalten, diese Integration vorläufig nicht vorgenommen werden.

Gerd Doeben-Henisch 2014-01-14