2017-03-11 2 views
1

Wie würde ich eine Uniform Crossover-Methode in Java für einen Genetischen Algorithmus implementieren?Uniform Crossover für Genetische Algorithmen in Java

Derzeit verwende ich 2 ArrayLists, die miteinander verbunden werden müssen, bevor das Programm fortgesetzt wird. Unten ist der Beginn des Verfahrens I verwendet habe:

private void UniformCrossOver(int ListOne,int ListTwo) 
{ 
... 
} 

Wo ich im Moment stehe ich unter der Annahme bin, dass ich muß noch 2 Arraylisten machen, die in die Datenteilung haben, aber ich habe keine Ahnung, wo soll ich mit dem Crossover anfangen? Würde ich eine for-Schleife verwenden, bei der die Größe der neuen Arrays der definierende Schlüssel ist?

Ihre Hilfe würde sehr geschätzt werden.

+0

http://stackoverflow.com/questions/9318881/uniform-crossover-in-java –

+0

Sie benötigen eine 'ArrayList', um das Ergebnis zu speichern. An jedem Punkt wählen Sie nach dem Zufallsprinzip ein Element aus einer der beiden 'ArrayLists' mit einer Wahrscheinlichkeit von 0,5 aus. Sie können dies tun, indem Sie einen Zufallszahlengenerator verwenden, um zwischen 0 und 1 zu wählen, zB ('Random :: nextInt (0,2)'). Sie speichern das resultierende Element in der result arrayList. –

+0

Ok. Also würde das bedeuten, dass ich eine inkrementierende "for" -Schleife erstellen muss, die für jedes Element in der "ArrayList" läuft. Der Zufallszahlengenerator ist das Element der Unsicherheit, das die Entscheidung darüber trifft, ob ein neuer Knoten von Eltern A oder Eltern B genommen wird. –

Antwort

0

Sie müssen keine neuen Array-Listen erstellen, wenn Sie nach dem Crossover keine Eltern benötigen. Dies sollte so lange arbeiten, um Ihre Chromosomen sind von gleicher Größe

public void uniformCrossover(ArrayList<Integer> a, ArrayList<Integer> b){ 
    for (int i = 0; i <a.size(); i++) { 
     if(Math.random() < crossoverProbability){ 
      int tmp = a.get(i); 
      a.set(i, b.get(i)); 
      b.set(i, tmp); 
     } 
    } 
} 
0

Sie können es Arrays machen

//Some example chromosomes 
int[] chromosomeA = {1, 1, 0, 1}; 
Int[] chromosomeB = {1, 0, 0, 0}; 

    for(int i = 0; i < chromosomeA.length; i++){ 
     int a = chromosomeA[i]; 
     if(new Random().nextInt(2) == 0){ 
     chromosomeA[i] = chromosomeB[i]; 
     chromosomeB[i] = a; 
     } 
    } 
Verwandte Themen