Hallo Ich arbeite am Genetischen Algorithmus. Ich frage mich, ob jemand mir mit dem Cross-Over-Schritt helfen kann.Python-bekommen eine Unterliste ohne Position zu ändern
Beispiel:
dad=[1,2,3,4,5,6,7]
mom=[2,3,6,1,7,5,4]
Ich mag eine zufällige Teilmenge in Papa holen, kann die Größe der Teilmenge auch zufällig sein. Zum Beispiel [1,2,3] oder [3,4,5] oder [2,3,4] oder [1,2] oder [4,5] oder [1,2,3,4] aber sie muss in der ursprünglichen Reihenfolge in Papa sein.
Also zum Beispiel, zufällige Teilmenge ist [2,3,4,5] Dann möchte ich meine Nachkommen sein [, 2,3,4,5 ,,]. Dann möchte ich den leeren Platz mit Mamas Liste füllen. Ich möchte die Liste von Mama wiederholen. Zuerst betrachte 2, 2 ist bereits in der Liste, also überspringe ich 2. Dann betrachte 3, 3 ist auch schon in der Liste der Nachkommen, also überspringe ich 3. Dann 6, 6 ist nicht in der Nachkommenliste, also werde ich 6 hinzufügen der erste verfügbare Platz. So ist der Nachwuchs nun [6,2,3,4,5]. Schließlich sollte offspring
[6,2,3,4,5,1,7]
sein
Jede Hilfe wird viel geschätzt werden! Ich denke, der schwierigste Teil, den ich brauche, ist, wie man zu diesem Schritt kommt [,2,3,4,5,,]
Die Wiederholung durch die Liste der Mutter wahrscheinlich für mich machbar.
aktualisiert Code
dad=[1,2,3,4,5,6,7]
mom=[2,3,6,1,7,5,4]
upper=random.randint(0,len(dad)-1)
lower=random.randint(0,len(dad)-1)
slice=dad[lower:upper]
child=copy.deepcopy(dad)
j =0
for i in child:
if i not in slice:
child[j] = 0
j+=1
n=len(child)
h=0
k=0
while k <= len(child)-1:
if child[k] == 0:
if mom[h] not in slice:
child[k]=mom[h]
h+=1
k+=1
else:
h+=1
else:
k+=1
Verstehe ich das richtig?Obwohl Sie Schritt für Schritt einen Algorithmus beschrieben haben, können Sie keine * einzelne Codezeile * schreiben, um die Aufgabe zu lösen. Suchen Sie das Paket ** random ** zum Generieren von Pseudozufallszahlen; das kann dir diesen ersten Schritt bringen. – Prune
Frag nicht * us * wie das aussieht: frag Python. Was macht dieses Programm? (Hinweis: Sie haben einen meiner Vorschläge ausgelassen, indem Sie die Werte von Lower & Upper überprüft haben, so dass sie noch nicht voll funktionsfähig ist.) – Prune
Außerdem werden wir Code mit Ein-Buchstaben-Variablennamen wahrscheinlich nicht durchlesen und prüfen. – Prune