[PYTHON] Wie man die anfängliche Population mit einem genetischen Algorithmus unter Verwendung von DEAP fixiert

Mit der Python-Bibliothek DEAP können Sie problemlos Simulationen mit dem genetischen Algorithmus (GA) durchführen. Zu diesem Zeitpunkt kann es wünschenswert sein, die anfängliche Gruppe zu fixieren, beispielsweise aufgrund von Vorkenntnissen über die optimale Lösung und dem Wunsch, die Berechnungszeit zu verkürzen.

Wenn ich mich beispielsweise für die Auswahl von Funktionen für maschinelles Lernen wie dieses Beispiel bewerbe, möchte ich mit dem besten Modell beginnen, das ich bisher ausprobiert habe. Es kann in Betracht genommen werden. Wenn es 100 bis mehrere Hundert sind, ist es nicht notwendig, den Anfangswert festzulegen, aber es besteht eine Nachfrage nach Menschen, die ungefähr 100.000 Merkmale mechanisch erstellt haben, ohne vorher nachzudenken.

Im offiziellen Dokument finden Sie eine Anleitung zum Umgang mit solchen Fällen. Es gibt nicht viele Informationen im Web, die ich tatsächlich getestet habe, daher werde ich sie hier auflisten.

Experimentieren Sie mit dem One-Max-Modell des offiziellen Dokuments

GA-Implementierung, die den Gesamtwert des Arrays maximiert, das aus 0 oder 1 als Bewertungsfunktion besteht Die optimale Lösung ist ein Array von 1, und der Maximalwert der Bewertungsfunktion ist die Länge des Arrays. http://deap.gel.ulaval.ca/doc/default/examples/ga_onemax.html http://deap.gel.ulaval.ca/doc/default/examples/ga_onemax_short.html

1. GA aus einer zufälligen Grundgesamtheit gemäß der offiziellen Dokumentation

#Bibliotheksimport
import numpy as np
import random

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

1-1. Erstellung einer Bewertungsfunktion

Gesamtwert eines Arrays aus 100 Elementen, bestehend aus 0 oder 1

def evalOneMax(individual):
    return sum(individual), #Fügen Sie ein Komma hinzu, auch wenn es nur einen Rückgabewert gibt

1-2. Erstellen eines Erstellers

Fügen Sie dem Ersteller mit create FitnessMax- und Individual-Methoden hinzu. Bewerten Sie die Maximierung der Bewertungsfunktion durch Setzen von Gewichten = (1.0,).

creator.create("FitnessMax", base.Fitness, weights=(1.0,)) #Fügen Sie ein Komma hinzu, auch wenn es nur ein Argument gibt
creator.create("Individual", list, fitness=creator.FitnessMax)

1-3 Erstellen einer Toolbox

Fügen Sie der Toolbox mit resister eine Methode mit dem Namen der ersten Variablen hinzu. toolbox.attr_bool: random.randint(0,1) toolbox.individual: 01 Zufallszahl mit toolbox.attr_bool> 100 Mal mit tools.initRepeat wiederholen Eine Liste mit 100 Elementen erstellen (= einzelne Generation) toolbox.polulation: Wiederholen Sie die individuelle Generierung durch toolbox.individual, um eine Population zu erstellen

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

Dann die Methode, die für die GA-Ausführung durch algorithm.eaMuPlusLambda erforderlich ist Definieren Sie toolbox.evaluate (Auswertung), toolbox.mate (Crossover), toolbox.mutate (Mutation), toolbox.select (Auswahl). Sie können wie folgt mit deap.tools schreiben.

toolbox.register("evaluate", evalOneMax)
toolbox.register("mate", tools.cxTwoPoint)
toolbox.register("mutate", tools.mutFlipBit, indpb=0.05)
toolbox.register("select", tools.selNSGA2)

1-4. Statistiken und anfängliche Bevölkerungsbildung

Pop: Anfangsgruppe hof: Erhaltung der besten Individuen Statistiken: Speichern von Statistiken für Funktionen zur Bevölkerungsbewertung

"""Einstellung des genetischen Algorithmus
Bis zur NGEN-Generation
Bevölkerung der 1. Generation LAMBDA
Anzahl der Personen, die an die MU der nächsten Generation weitergegeben werden sollen
Übergangswahrscheinlichkeit CXPB
Mutationswahrscheinlichkeit MUTPB
"""
random.seed(4)
NGEN = 10
MU = 50
LAMBDA = 100
CXPB = 0.7
MUTPB = 0.3

#Bevölkerungsschaffung

pop = toolbox.population(n=MU)
hof = tools.HallOfFame(1)
stats = tools.Statistics(lambda ind: ind.fitness.values)
stats.register("avg", np.mean, axis=0)
stats.register("std", np.std, axis=0)
stats.register("min", np.min, axis=0)
stats.register("max", np.max, axis=0)

1-5. GA-Ausführung durch algorithm.eaMuPlusLambda

pop, log = algorithms.eaMuPlusLambda(pop,
                                     toolbox,
                                     mu=MU,
                                     lambda_=LAMBDA,
                                     cxpb=CXPB,
                                     mutpb=MUTPB,
                                     ngen=NGEN,
                                     stats=stats,
                                     halloffame=hof)
gen	nevals	avg    	std         	min  	max  
0  	50    	[50.32]	[4.71355492]	[41.]	[63.]
1  	100   	[56.]  	[2.02977831]	[53.]	[63.]
2  	100   	[59.3] 	[2.3]       	[57.]	[68.]
3  	100   	[62.56]	[2.03135423]	[60.]	[69.]
4  	100   	[65.58]	[1.96051014]	[63.]	[72.]
5  	100   	[68.46]	[1.52590956]	[66.]	[73.]
6  	100   	[70.4] 	[1.34164079]	[69.]	[74.]
7  	100   	[72.36]	[1.10923397]	[71.]	[76.]
8  	100   	[74.06]	[1.06602064]	[73.]	[77.]
9  	100   	[75.38]	[0.79724526]	[74.]	[77.]
10 	100   	[76.36]	[0.62481997]	[76.]	[78.]

Da es mit einer Zufallszahl begann, liegt der Bewertungswert der ursprünglichen Person zwischen 41 und 63. Es ist in der 10. Generation nicht konvergiert, aber es ist in Ordnung, weil der Zweck nicht darin besteht, zu konvergieren.

2. Wie Sie Ihre eigene Grundgesamtheit definieren

Wenn Sie die ursprüngliche Gruppe auf einen bestimmten Wert festlegen und starten möchten, schreiben Sie den entsprechenden Teil des offiziellen Dokuments wie folgt neu.

2-1. Vorbereitung der selbst erstellten Anfangsgruppe

Erstellen Sie eine Liste der selbst erstellten Grundgesamtheit = Einzelpersonen. Wenn Sie beispielsweise den genetischen Algorithmus aus der Klonpopulation L00 eines Individuums starten möchten, das aus allen Nullen besteht, ist dies wie folgt.

MU = 50
# individual
L0 = [0] * 100
# list of individuals
L00 = [L0] * MU

2-2. Erstellung des Schöpfers

Gleich wie 1-2.

2-3. Erstellen einer Toolbox

Definieren Sie eine Methode toolbox.population_guess, die toolbox.population ersetzt.

toolbox = base.Toolbox()

# population_Funktionen, die beim Erraten verwendet werden
def initPopulation(pcls, ind_init, file):    
    return pcls(ind_init(c) for c in file)

# population_Erstellen einer Schätzmethode
# creator.Fügen Sie jedem Individuum Fitness für Individuum hinzu
toolbox.register("population_guess", initPopulation, list, creator.Individual, L00)
#Hier zusammen
toolbox.register("evaluate", evalOneMax)
toolbox.register("mate", tools.cxTwoPoint)
toolbox.register("mutate", tools.mutFlipBit, indpb=0.05)
toolbox.register("select", tools.selNSGA2)

2-4. Erstmalige Gruppenerstellung

hof und stat sind gleich, also weggelassen

#Bevölkerung der ersten individuellen Generation_Ändern Sie zu raten
#pop = toolbox.population(n=MU)
pop = toolbox.population_guess()

2-5. GA-Ausführung durch algorithm.eaMuPlusLambda

pop, log = algorithms.eaMuPlusLambda(pop,
                                     toolbox,
                                     mu=MU,
                                     lambda_=LAMBDA,
                                     cxpb=CXPB,
                                     mutpb=MUTPB,
                                     ngen=NGEN,
                                     stats=stats,
                                     halloffame=hof)
gen	nevals	avg 	std 	min 	max 
0  	50    	[0.]	[0.]	[0.]	[0.]
1  	100   	[3.54]	[3.04111822]	[0.]	[9.]
2  	100   	[8.3] 	[2.0808652] 	[6.]	[15.]
3  	100   	[12.4]	[2.45764115]	[10.]	[21.]
4  	100   	[16.38]	[1.92758917]	[14.]	[22.]
5  	100   	[20.36]	[2.10485154]	[18.]	[29.]
6  	100   	[24.52]	[1.5651198] 	[22.]	[29.]
7  	100   	[28.02]	[1.74917123]	[26.]	[33.]
8  	100   	[31.3] 	[2.21133444]	[29.]	[39.]
9  	100   	[35.]  	[1.69705627]	[33.]	[40.]
10 	100   	[38.16]	[1.71300905]	[36.]	[43.]

Eine Gruppe mit einem minimalen Bewertungswert von 0 und einem maximalen Wert von 0 = Ich konnte GA von meiner eigenen Anfangsgruppe aus starten.

Recommended Posts

Wie man die anfängliche Population mit einem genetischen Algorithmus unter Verwendung von DEAP fixiert
Suche nach einer Lösung für das N-Queen-Problem mit einem genetischen Algorithmus (2)
Suche nach einer Lösung für das N-Queen-Problem mit einem genetischen Algorithmus (1)
So testen Sie den Friends-of-Friends-Algorithmus mit pyfof
Versuchen Sie, das Problem des Handlungsreisenden mit einem genetischen Algorithmus (Python-Code) zu lösen.
So schreiben Sie eine GUI mit dem Befehl maya
So erstellen Sie ein Untermenü mit dem Plug-In [Blender]
So generieren Sie eine Abfrage mit dem IN-Operator in Django
Eine Geschichte über den Umgang mit dem CORS-Problem
Versuchen Sie, eine multimodale Verteilung mithilfe des EM-Algorithmus zu modellieren
Lösung des Planungsproblems der Krankenschwester (Schichtoptimierung) mit einem genetischen Algorithmus
Finden Sie den optimalen Wert der Funktion mit einem genetischen Algorithmus (Teil 2)
So erstellen Sie einen Befehl zum Lesen der Einstellungsdatei mit Pyramide
Finden Sie den optimalen Wert der Funktion mit einem genetischen Algorithmus (Teil 1)
So senden Sie eine Anfrage mit Python an die DMM (FANZA) -API
So fügen Sie ein Paket mit PyCharm hinzu
So zeichnen Sie ein Diagramm mit Matplotlib
Durchsuche das Labyrinth mit dem Python A * -Algorithmus
So installieren Sie ein Paket mithilfe eines Repositorys
Teilen und Verarbeiten eines Datenrahmens mithilfe der Groupby-Funktion
[Python] Was ist ein formales Argument? So stellen Sie den Anfangswert ein
Überlegen Sie, wie Sie einen Filter mit den Shotgun API-Contact-Versionen schreiben
[Einführung in Python] So sortieren Sie den Inhalt einer Liste effizient mit Listensortierung
[Einführung in Python] So schreiben Sie eine Zeichenfolge mit der Formatierungsfunktion
[19.11.2015] So registrieren Sie einen Dienst lokal mit dem Python SDK bei naoqi os
So berechnen Sie die Volatilität einer Marke
Lesen einer CSV-Datei mit Python 2/3
So codieren Sie eine Drohne mithilfe der Bilderkennung
So veröffentlichen Sie ein Blog auf Amazon S3 mit der statischen Blog-Engine "Pelican" für Pythonista
[Circuit x Python] So ermitteln Sie die Übertragungsfunktion eines Schaltkreises mit Lcapy
So entwickeln Sie eine Cart-App mit Django
So erstellen Sie ein Wörterbuch mit einer hierarchischen Struktur.
[Algorithmus x Python] Verwendung der Liste
Speichern Sie das Objekt in einer Datei mit pickle
Verfahren zur Erstellung plattformübergreifender Apps mit kivy
[AWS] Umgang mit Wordpress "Die Antwort ist nicht die richtige JSON-Antwort."
Hochladen auf ein freigegebenes Laufwerk mit pydrive
Wie man Kaldi mit JUST Corpus trainiert
So deinstallieren Sie ein mit setup.py installiertes Modul
So erhalten Sie mit Python eine Liste der Dateien im selben Verzeichnis
[Einführung in Python] So erhalten Sie den Datenindex mit der for-Anweisung
So legen Sie einen freigegebenen Ordner mit dem Host-Betriebssystem in CentOS7 auf Virtual BOX fest
Wie identifiziere ich das Element mit der geringsten Anzahl von Zeichen in einer Python-Liste?
So erstellen Sie schnell eine maschinelle Lernumgebung mit Jupyter Notebook mit UbuntuServer 16.04 LTS
Ein Memo darüber, wie man das schwierige Problem der Erfassung von FX mit AI überwinden kann
Lesen Sie die Python-Markdown-Quelle: So erstellen Sie einen Parser
So konvertieren / wiederherstellen Sie einen String mit [] in Python
So löschen Sie die angegebene Zeichenfolge mit dem Befehl sed! !! !!
[Python] Wie zeichnet man mit Matplotlib ein Liniendiagramm?
So richten Sie eine Python-Umgebung mit pyenv ein
[Einführung in Python] Wie iteriere ich mit der Bereichsfunktion?
So erhalten Sie einen angemeldeten Benutzer mit Djangos forms.py
So konvertieren Sie ein Klassenobjekt mit SQLAlchemy in ein Wörterbuch
[Python] So legen Sie den Download-Speicherort mit youtube-dl fest
Wie man ein Schießspiel mit toio macht (Teil 1)
Wie man ein praktisches Seminar mit Jupyter mit Docker abhält
So erstellen Sie ein Python-Paket mit VS Code
Analysieren mit Google Colaboratory mithilfe der Kaggle-API