Python-Evolutionsberechnungsbibliothek Deap

DEAP-Übersicht

Ich möchte die genetische Algorithmusbibliothek Deap vorstellen, die mit Python verwendet werden kann. Es gibt eine andere genetische Algorithmusbibliothek für Python namens Pyevolve, aber Deap scheint in der Entwicklung aktiver zu sein, daher würde ich diese gerne verwenden. Ich werde. Nachfolgend sind die wichtigsten in Deap verfügbaren Algorithmen und Funktionen aufgeführt.

Example Dieses Mal werde ich das Beispiel von GA erklären. Importieren Sie zunächst das Modul.

import random

from deap import base
from deap import creator
from deap import tools

creator erbt die Basisklasse und erstellt eine neue Klasse.

creator.create("FitnessMax", base.Fitness, weights=(1.0,))
creator.create("Individual", list, fitness=creator.FitnessMax)

In der ersten Zeile wird eine Anpassungsklasse erstellt, die durch Maximieren der Anpassung optimiert wird. Gewichte sind ein Array, aber für die Einzweckoptimierung ist Größe 1 in Ordnung (obwohl "," notwendig zu sein scheint), und für die Mehrzweckoptimierung sind die Gewichte für jeden Zweck angeordnet. Stellen Sie (-1.0,) ein, um durch Minimieren zu optimieren.

toolbox = base.Toolbox()
# Attribute generator
toolbox.register("attr_bool", random.randint, 0, 1)
# Structure initializers
toolbox.register("individual", tools.initRepeat, creator.Individual, 
    toolbox.attr_bool, 100)
toolbox.register("population", tools.initRepeat, list, toolbox.individual)

toolbox erstellt eine Funktion. Im Register in der 3. Zeile wird eine Funktion namens attr_bool erstellt, indem random.randint 0,1 Argumente gegeben wird. attr_bool ist eine Funktion, die zufällig 0 oder 1 generiert. initRepeat ist eine Funktion, die im Voraus in der Toolbox vorbereitet wird. Das erste Argument ist der Typ des Containers, in dem die Daten gespeichert sind, das zweite ist die Funktion, die einzelne Daten generiert, und das dritte ist die Größe des Containers. Hier werden aus initRepeat eine Funktion namens Individuum (Individuum) und eine Funktion namens Population (Gruppe) erstellt. Erstellen Sie als Nächstes Bewertungsfunktionen, Schnittpunkte, Mutationen und Auswahlfunktionen. (Beachten Sie, dass der Rückgabewert der Auswertungsfunktion ein "," enthält.)

def evalOneMax(individual):
    return sum(individual),

toolbox.register("evaluate", evalOneMax)
toolbox.register("mate", tools.cxTwoPoints)
toolbox.register("mutate", tools.mutFlipBit, indpb=0.05)
toolbox.register("select", tools.selTournament, tournsize=3)

Nachdem die GA-Einstellungen abgeschlossen sind, erstellen wir die eigentliche Evolutionsberechnungsroutine.

def main():
    random.seed(64)
    #Generieren Sie eine frühe Bevölkerung
    pop = toolbox.population(n=300)
    CXPB, MUTPB, NGEN = 0.5, 0.2, 40 #Kreuzungswahrscheinlichkeit, Mutationswahrscheinlichkeit, Anzahl der Schleifen in der Evolutionsberechnung
    
    print("Start of evolution")
    
    #Bewertung der frühen Bevölkerung
    fitnesses = list(map(toolbox.evaluate, pop))
    for ind, fit in zip(pop, fitnesses):
        ind.fitness.values = fit
    
    print("  Evaluated %i individuals" % len(pop))
    
    #Die Evolutionsberechnung wurde gestartet
    for g in range(NGEN):
        print("-- Generation %i --" % g)
        
        #Wählen Sie die Bevölkerung der nächsten Generation aus
        offspring = toolbox.select(pop, len(pop))
        #Klonen Sie die Bevölkerung
        offspring = list(map(toolbox.clone, offspring))
    
        #Wenden Sie Kreuzung und Mutation auf ausgewählte Populationen an
        #Nehmen Sie gerade und ungerade Individuen heraus und kreuzen Sie sie
        for child1, child2 in zip(offspring[::2], offspring[1::2]):
            if random.random() < CXPB:
                toolbox.mate(child1, child2)
                del child1.fitness.values
                del child2.fitness.values

        for mutant in offspring:
            if random.random() < MUTPB:
                toolbox.mutate(mutant)
                del mutant.fitness.values
    
        #Berechnen Sie die Eignung, indem Sie Personen sammeln, für die die Eignung nicht berechnet 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
        
        print("  Evaluated %i individuals" % len(invalid_ind))
        
        #Machen Sie den Nachwuchs der nächsten Generation
        pop[:] = offspring
        
        #Ordnen Sie die Eignung aller Personen
        fits = [ind.fitness.values[0] for ind in pop]
        
        length = len(pop)
        mean = sum(fits) / length
        sum2 = sum(x*x for x in fits)
        std = abs(sum2 / length - mean**2)**0.5
        
        print("  Min %s" % min(fits))
        print("  Max %s" % max(fits))
        print("  Avg %s" % mean)
        print("  Std %s" % std)
    
    print("-- End of (successful) evolution --")
    
    best_ind = tools.selBest(pop, 1)[0]
    print("Best individual is %s, %s" % (best_ind, best_ind.fitness.values))

Danach können Sie diese Hauptfunktion wie `if __name__ ==" __main__ ": main ()` aufrufen.

Ausgabeergebnis

Start of evolution
  Evaluated 300 individuals
-- Generation 0 --
  Evaluated 189 individuals
  Min 40.0
  Max 65.0
  Avg 54.7433333333
  Std 4.46289766358
-- Generation 1 --
  Evaluated 171 individuals
  Min 44.0
  Max 70.0
  Avg 58.48
  Std 3.98533980149

...(Unterwegs weggelassen)...

-- Generation 38 --
  Evaluated 180 individuals
  Min 89.0
  Max 100.0
  Avg 97.7466666667
  Std 2.32719191779
-- Generation 39 --
  Evaluated 196 individuals
  Min 88.0
  Max 100.0
  Avg 98.1833333333
  Std 2.33589145486
-- End of (successful) evolution --
Best individual is [True, 1, 1, 1, 1, 1, True, 1, 1, 1, 1, True, 1, 1, 1, 1, True, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, True, True, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, True, 1, 1, 1, 1, True, True, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], (100.0,)

Obwohl 1 und True im Array gemischt sind, ist ersichtlich, dass die optimale Lösung erforderlich ist, wahrscheinlich weil es sich um ein Problem der Schnitt- oder Mutationsfunktion handelt.

Referenz

Deap Beispiel: http://deap.gel.ulaval.ca/doc/default/examples/ga_onemax.html

Recommended Posts

Python-Evolutionsberechnungsbibliothek Deap
Python-Evolutionsberechnungsbibliothek Deap (3)
Python-Evolutionsberechnungsbibliothek Deap (2)
Python 3.6 E-Mail-Bibliothek
Python ast Bibliothek
Python Library Hinweis
Berechnungsbohrpython
Python-Algorithmus Handelsbibliothek
Installieren einer externen Bibliothek für Python
Python-Optimierungsbibliothek Pulp
Berechnungsbohrpython (Erweiterung)
Ziel Python Library Master (48) Autopep8
Ziel Python Library Master (36) json2html
Ziel Python-Master (49) psidialogs
Deep Python hat von DEAP gelernt
Ziel Python Library Master (26) easyxml
Ziel Python Library Master (29) table_printer
Zielen Sie auf die Namespaces des Python Library Master (55)
Ziel Python Library Master (46) Browserplus
Ziel Python Library Master (30) Chronyk
Ziel Python Library Master (3) Arbeitskalender
Ziel Python Speed Master (42) Speedrecorder
Ziel Python Library Master (37) Slimurl
Empfehlung der binpacking Bibliothek von Python
Ziel Python Library Master (44) Pynetviz
Ziel Python Library Master (8) Rolex
Ziel Python Library Master (52) Marktime
Ziel Python Library Master (7) Numparser
Ziel Python Library Master (21) hy
Richten Sie die Anforderungen des Python Library Master (18) aus
Windows 10: Installieren der DLIB-Bibliothek für Python
Ziel Python Library Master (13) easydev
Ziel Python Library Master (20) Pyyaml
Zielen Sie gleichzeitig auf den Python-Bibliotheksmaster (34)
Ziel ist die Wortsegmentierung des Python Library Master (40)
Ziel Python Library Master (43) cpmoptimize
Ziel Python Library Master (68) Pazudorasolver
Ziel Python Library Master (58) Fälscher
Ziel Python Library Master (11) nlist
Ziel Python Library Master (38) beautiful_print
Ziel Python Library Master (65) Geopy
Ziel Python Library Master (2) Vincent
Zielen Sie auf das Logbuch des Python Library Master (59)
Ziel Python Library Master (51) Pyautogui
Ziel Python Library Master (10) Timeit
Ziel Python Python Master (0) Links
Ziel Python Library Master (66) youtube-dl
Überschreiben Sie Bibliotheksfunktionen in Python
Ziel Python Library Master (53) Psutil
Ziel Python Library Master (22) htmltag
Ziel Python Library Master (67) httpie
Ziel Python Library Master (45) xlsxwriter
Ziel Python Library Master (9) WebHelpers
Ziel Python Library Master (32) SQL
Ziel Python Library Master (60) Colourettu
Ziel Python Library Master (64) Pretty_cron
Ziel Python Library Master (56) Colorthief
Ziel Python Library Master (61) verschachtelte Suche
Ziel Python Range Master (17) RangeParser