[PYTHON] Finden Sie den optimalen Wert der Funktion mit einem genetischen Algorithmus (Teil 2)

Letztes Mal

Code, der zuletzt erstellt wurde https://qiita.com/nmat0031785/items/ceea6f78ab71e9956fce

Aufzeichnung von Optimierungsergebnissen

Die zuvor verwendeten `` `algorithm.eaSimple``` können nur Statistiken für jede Generation hinterlassen. Verbessern Sie, damit die Entwurfsvariablen und die Anpassungsfähigkeit aller Personen erhalten bleiben.

Erzeugung und Bewertung der Grundgesamtheit

Zunächst wird die Anpassungsfähigkeit nur für die ursprüngliche Person berechnet. Danach werden die Entwurfsvariablen, die Anpassungsfähigkeit, die Generierung (0, da es sich um die erste Generierung handelt) und die individuelle Nummer in pd.DataFrame gespeichert.

sample_GA.py


#Generieren Sie eine frühe Bevölkerung
pop = toolbox.population_guess()

#Bewertung der Anpassungsfähigkeit früher Personen
fitnesses = toolbox.map(toolbox.evaluate, pop)
for ind, fit in zip(pop, fitnesses):
    ind.fitness.values = fit
fits = [ind.fitness.values[0] for ind in pop]

#Speichern Sie die erste Person im Logbuch
logbook = pd.DataFrame([])
t1 = pd.DataFrame(pop)
t1.columns = ["x1", "x2"]
t1 = t1.assign(fits=fits, generation=0, ids=range(len(pop)))
logbook = logbook.append(t1)

Evolutionsschleife

Betreten Sie die Evolutionsschleife. Mit `offspring = toolbox.select (pop, POP_SIZE)` werden die Personen für POP_SIZE aus der ursprünglichen Population`` pop erneut ausgewählt. Dies ermöglicht es, die Anzahl der Anfangspopulationen und Populationen in der Evolutionsschleife zu ändern. Individuen jeder Generation erhalten Minuten lang Zufallszahlen, und Individuen, die in "CX_PB" und "MUT_PB" gefangen wurden, werden gekreuzt und auf Mutation ausgerichtet. Danach wird die Anpassungsfähigkeit für die neue Person neu bewertet und zu pd.DataFrame hinzugefügt.

sample_GA.py


#Parameter
N_GEN = 20       #Anzahl der sich wiederholenden Generationen
POP_SIZE = 100   #Anzahl der Personen in der Bevölkerung
CX_PB = 0.8      #Übergangswahrscheinlichkeit
MUT_PB = 0.05    #Mutationswahrscheinlichkeit

#Start der Evolutionsschleife
g = 0
while g < N_GEN:
    g = g + 1
    
    #Auswahl und Vervielfältigung von Personen der nächsten Generation
    offspring = toolbox.select(pop, POP_SIZE)
    offspring = list(map(toolbox.clone, offspring))

    #Kreuzung
    for child1, child2 in zip(offspring[::2], offspring[1::2]):
        #Wählen Sie die zu kreuzenden Personen aus
        if random.random() < CX_PB:
            toolbox.mate(child1, child2)
            #Gekreuzte Personen entfernen Anpassungsfähigkeit
            del child1.fitness.values
            del child2.fitness.values

    #Mutation
    for mutant in offspring:
        #Wählen Sie eine Person aus, die mutiert werden soll
        if random.random() < MUT_PB:
            toolbox.mutate(mutant)
            #Das mutierte Individuum entfernt die Anpassungsfähigkeit
            del mutant.fitness.values

    #Bewerten Sie die Anpassungsfähigkeit von Personen neu, deren Anpassungsfähigkeit gestrichen wurde.
    invalid_ind = [ind for ind in offspring if not ind.fitness.valid]
    fitnesses = map(toolbox.evaluate, invalid_ind)
    for ind, fit in zip(invalid_ind, fitnesses):
        ind.fitness.values = fit
    
    #Aktualisieren Sie die Bevölkerung mit einer neuen Generation
    pop[:] = offspring

    #Extraktion der Anpassungsfähigkeit aller Individuen der neuen Generation
    fits = [ind.fitness.values[0] for ind in pop]

    #Im Logbuch speichern
    t1 = pd.DataFrame(pop)
    t1.columns = ["x1", "x2"]
    t1 = t1.assign(fits=fits, generation=g, ids=range(POP_SIZE))
    logbook = logbook.append(t1)
    
    #debuggen
    print(t1)

terminal


・
・
・
-- Generation 20 --
          x1        x2        fits  generation  ids
0  -1.582142 -3.130247 -106.764537          20    0
1  -1.582142 -3.130247 -106.764537          20    1
2  -1.582142 -3.130247 -106.764537          20    2
3  -1.582142 -3.130247 -106.764537          20    3
4  -1.582142 -3.130247 -106.764537          20    4
..       ...       ...         ...         ...  ...
95 -1.582142 -3.130247 -106.764537          20   95
96 -1.582142 -3.130247 -106.764537          20   96
97 -1.582142 -3.130247 -106.764537          20   97
98 -1.582142 -3.130247 -106.764537          20   98
99 -1.582142 -3.130247 -106.764537          20   99

[100 rows x 5 columns]

sparen

Speichern Sie das Ergebnis als CSV.

sample_GA.py


logbook.to_csv("result.csv", sep=",", index=None, header=None)

Zusammenfassung

Ausgabe von Designvariablen und Anpassungsfähigkeit jedes Einzelnen. Nächstes Mal bis zur Ergebnisvisualisierung.

Recommended Posts

Finden Sie den optimalen Wert der Funktion mit einem genetischen Algorithmus (Teil 2)
Finden Sie den optimalen Wert der Funktion mit einem genetischen Algorithmus (Teil 1)
Ermitteln Sie den Mindestwert der Funktion mithilfe der Partikelgruppenoptimierungsmethode (PSO).
Suche nach einer Lösung für das N-Queen-Problem mit einem genetischen Algorithmus (2)
Suchen Sie den Index des Maximalwerts (Minimalwerts) eines mehrdimensionalen Arrays
Suche nach einer Lösung für das N-Queen-Problem mit einem genetischen Algorithmus (1)
Der Wert von meta beim Angeben einer Funktion ohne Rückgabewert mit Dask dataframe gilt
Finden Sie mit PythonControl die Übertragungsfunktion des Systems mit einem Freiheitsgrad.
Wenn Sie eine Liste mit dem Standardargument der Funktion angeben ...
So ermitteln Sie die Speicheradresse des Pandas-Datenrahmenwerts
Zählen Sie mit NetworkX den maximal verketteten Teil eines zufälligen Diagramms
[Python] Eine einfache Funktion zum Ermitteln der Mittelkoordinaten eines Kreises
Finden Sie den SHA256-Wert mit R (mit Bonus)
Durchsuche das Labyrinth mit dem Python A * -Algorithmus
Berechnen Sie die kürzeste Route eines Diagramms mit der Dyxtra-Methode und Python
Versuchen Sie, das Problem des Handlungsreisenden mit einem genetischen Algorithmus zu lösen (Theorie)
Wie man die anfängliche Population mit einem genetischen Algorithmus unter Verwendung von DEAP fixiert
Tweet die Wettervorhersage mit Bot Teil 2
Finden Sie den Stimmungswert mit Python (Rike Koi)
Finden Sie mit NumPy die Position über dem Schwellenwert
Holen Sie sich den Aufrufer einer Funktion in Python
Finden Sie die Anzahl der Tage in einem Monat
Finden Sie den Bruchteil des in Python eingegebenen Werts heraus
Finden Sie den Tag nach Datum / Uhrzeit heraus
Visualisieren Sie das Verhalten des Sortieralgorithmus mit matplotlib
Finden Sie den kürzesten Weg mit dem Python Dijkstra-Algorithmus
Sequentielle Berechnung des Durchschnittswertes mit Online-Algorithmus
Versuchen Sie, das Problem des Handlungsreisenden mit einem genetischen Algorithmus (Python-Code) zu lösen.
Versuchen Sie, das Problem des Handlungsreisenden mit einem genetischen Algorithmus zu lösen (Ausführungsergebnis)
[Circuit x Python] So ermitteln Sie die Übertragungsfunktion eines Schaltkreises mit Lcapy
So geben Sie mit Jupyter Notebook einen Wert in der Mitte einer Zelle aus
[Überprüfung] Versuchen Sie, die Punktgruppe an der Optimierungsfunktion von Pytorch Part 1 auszurichten
Zeichnen Sie mit PyQtGraph Teil 5 ein Diagramm. Erhöhen Sie die Y-Achse
Verschiedene Methoden zum numerischen Erstellen der Umkehrfunktion einer bestimmten Funktion Teil 1 Polynomregression
Berechnen Sie die Summe der eindeutigen Werte durch Pandas-Kreuztabellen
Schneiden Sie einen Teil der Zeichenfolge mit einem Python-Slice aus
Machen Sie LCD-Screenshots mit Python-LEGO Mindstorms
#Eine Funktion, die den Zeichencode einer Zeichenfolge zurückgibt
Nehmen Sie den Wert des SwitchBot-Thermo-Hygrometers mit Raspberry Pi
Umschalten der Bot-Thermo-Hygrometer-Werte mit Raspberry Pi
Finden Sie den Speicherort der mit pip installierten Pakete heraus
Visualisieren Sie das charakteristische Vokabular eines Dokuments mit D3.js.
Tweet die Niederschlagswahrscheinlichkeit als Teil der Funktion des Bots
[Python & SQLite] Ich habe den erwarteten Wert eines Rennens mit Pferden im 1x-Gewinnbereich ② analysiert
Kündigen Sie die Wettervorhersage (Regen usw.) von DM als Teil der Funktion des Bots an
Berechnen Sie das Produkt von Matrizen mit einem Zeichenausdruck?
[Linux] [C / C ++] So ermitteln Sie den Wert der Rücksprungadresse einer Funktion und den Funktionsnamen des Aufrufers
Ich habe versucht, die Entropie des Bildes mit Python zu finden
Finden Sie die scheinbare Breite einer Zeichenfolge in Python heraus
Mit den Daten von COVID-19 wurde ein Netzwerkdiagramm erstellt.
Ich habe versucht, mit TensorFlow den Durchschnitt mehrerer Spalten zu ermitteln
Messen Sie die Wichtigkeit von Features mit einem zufälligen Gesamtstrukturwerkzeug
Holen Sie sich die ID einer GPU mit geringer Speichernutzung
Holen Sie sich UNIXTIME zu Beginn des heutigen Tages mit einem Befehl
Erben Sie die Standardbibliothek, um den Durchschnittswert der Warteschlange zu ermitteln
[Python] Versuchen Sie, die FX-Systolenparameter mit einem genetischen Algorithmus zu optimieren
Ihre URL hat nicht mit dem Wert des Challenge-Parameters geantwortet.
Ich habe eine Funktion erstellt, um das Modell von DCGAN zu überprüfen