Evolutionärer Algorithmus Verbesserungsvorschläge?

...komplette Frage anzeigen

1 Antwort

Ich habe weder gym noch numpy installiert und kann es daher nicht testen.

Auffällig ist aber, dass Du ziemlich oft env.reset() ausführst. Das riecht ein bisschen nach Alzheimer-Strategie :-/

Allgemein zu Python:

  1. fitness=[0]*100 wäre lesbarer.
  2. action = output < 0.5 wäre lesbarer.
  3. fitness.index(max(fitness)) würde ich zwecks Lesbarkeit als Variable max_pos speichern. Außerdem bevorzuge ich
    max_pos = max(range(fitness), key=fitness.__getitem__)
    Ist aber Geschmackssache.
  4. weights1[weights1.index(x)][x.index(y)] ist reichlich um die Ecke gedacht: Du nimmst ein Element x einer Liste, bestimmst dann die Position von x in dieser Liste und schaust nach, was an dieser Position steht — Ich kaufe ein x :-)
    Probier mal:

    for x in weights1: 
for i in range(x):
x[i]=random.choice(fitest1)[i]
if random.randint(1,5) == 1:
random.choice(random.choice(weights1)) \
 + random.choice([0.1, -0.1])

Die letzte Zeile hat allerdings keinen Effekt. Fehlt da eine Zuweisung?

KayJer 27.05.2017, 16:30

Danke. Deine Vorschläge haben mir sehr geholfen. Allerdings hätte ich 2 Fragen:

  1. Was genau meinst du mit "Alzheimer-Strategie"?
  2. würde 'x[i]=random.choice(fitest1)[i]' nicht enfach x überschreiben und nicht das Element in weights1?
0
ralphdieter 27.05.2017, 17:10
@KayJer

zu 1) env.reset() klingt danach, als würde alles auf den Initialzustand zurückgesetzt werden. Dann bringen auch 100 Genaration Training bringen nicht mehr als eine.

Falls mit reset() nur die Startposition im Tal eingenommen wird und Dein "Gelerntes" in den fit*-Arrays gespeichert bleibt, sieht es natürlich anders aus.

Zu 2) In Python ist eine Zuweisung keine Kopie; es wird nur eine weitere Referenz auf das Objekt erzeugt.

Bei x=weights1[0] ist x das erste Objekt in weights1. Wenn Du den Inhalt von x änderst, spiegelt sich das unmittelbar in weights1 wider. Sobald Du diesem x selbst einen anderen Wert zuweist (z.B. x=[]), ändert sich dabei in weights1 nichts.

0

Was möchtest Du wissen?