Willkommen im Evotorch -Projekt! Evotorch ist eine Open -Source -Evolutionsberechnungsbibliothek, die bei Nnaise entwickelt wurde und auf Pytorch basiert. In der Dokumentation finden Sie eingehende Anleitungen zur Verwendung von Evotorch und besuchen Sie uns zu Slack für Diskussionen.
Beginnen Sie mit der Installation von Evotorch:
pip install evotorch
Mit Evotorch kann man verschiedene Optimierungsprobleme lösen, unabhängig davon, ob sie differenzierbar sind (dh zulässigen Abstiegsabstieg). Zu den Problemtypen, die mit Evotorch lösbar sind, gehören:
Verschiedene evolutionäre Berechnungsalgorithmen sind in Evotorch erhältlich:
Da alle diese Algorithmen in Pytorch implementiert sind, profitieren sie von der Verwendung von Vektorisierung und Parallelisierung bei GPUs, wodurch die Optimierung drastisch beschleunigt wird, wenn GPUs verfügbar sind. Mit Ray skaliert Evotorch diese Algorithmen noch weiter, indem Sie die Arbeitsbelastung überteilen:
Im Folgenden finden Sie einige Code -Beispiele, die die API von Evotorch demonstrieren.
Jede Zielfunktion, die für die Arbeit mit Pytorch definiert ist, kann direkt mit Evotorch verwendet werden. Eine nicht bestätigte Objektivfunktion erhält lediglich eine Lösung als 1-dimensionaler Tensor mit Fackel und gibt eine Fitness als Skalar zurück. Eine vektorisierte Zielfunktion empfängt eine Charge von Lösungen als 2-dimensionaler Tensor mit Fackel und gibt einen 1-dimensionalen Tensor von Fitness zurück. Das folgende Beispiel zeigt, wie das klassische Rastrigin -Problem definiert und gelöst werden kann.
from evotorch import Problem
from evotorch . algorithms import SNES
from evotorch . logging import StdOutLogger , PandasLogger
import math
import matplotlib . pyplot as plt
import torch
# Declare the objective function
def rastrigin ( x : torch . Tensor ) -> torch . Tensor :
A = 10
( _ , n ) = x . shape
return A * n + torch . sum (( x ** 2 ) - A * torch . cos ( 2 * math . pi * x ), 1 )
# Declare the problem
problem = Problem (
"min" ,
rastrigin ,
initial_bounds = ( - 5.12 , 5.12 ),
solution_length = 100 ,
vectorized = True ,
# device="cuda:0" # enable this line if you wish to use GPU
)
# Initialize the SNES algorithm to solve the problem
searcher = SNES ( problem , popsize = 1000 , stdev_init = 10.0 )
# Initialize a standard output logger, and a pandas logger
_ = StdOutLogger ( searcher , interval = 10 )
pandas_logger = PandasLogger ( searcher )
# Run SNES for the specified amount of generations
searcher . run ( 2000 )
# Get the progress of the evolution into a DataFrame with the
# help of the PandasLogger, and then plot the progress.
pandas_frame = pandas_logger . to_dataframe ()
pandas_frame [ "best_eval" ]. plot ()
plt . show ()Das folgende Beispiel zeigt, wie Sie Verstärkungslernaufgaben lösen, die über die Fitnessbibliothek verfügbar sind.
from evotorch . algorithms import PGPE
from evotorch . logging import StdOutLogger , PicklingLogger
from evotorch . neuroevolution import GymNE
# Declare the problem to solve
problem = GymNE (
env = "Humanoid-v4" , # Solve the Humanoid-v4 task
network = "Linear(obs_length, act_length)" , # Linear policy
observation_normalization = True , # Normalize the policy inputs
decrease_rewards_by = 5.0 , # Decrease each reward by 5.0
num_actors = "max" , # Use all available CPUs
# num_actors=4, # Explicit setting. Use 4 actors.
)
# Instantiate a PGPE algorithm to solve the problem
searcher = PGPE (
problem ,
# Base population size
popsize = 200 ,
# For each generation, sample more solutions until the
# number of simulator interactions reaches this threshold
num_interactions = int ( 200 * 1000 * 0.75 ),
# Stop re-sampling solutions if the current population size
# reaches or exceeds this number.
popsize_max = 3200 ,
# Learning rates
center_learning_rate = 0.0075 ,
stdev_learning_rate = 0.1 ,
# Radius of the initial search distribution
radius_init = 0.27 ,
# Use the ClipUp optimizer with the specified maximum speed
optimizer = "clipup" ,
optimizer_config = { "max_speed" : 0.15 },
)
# Instantiate a standard output logger
_ = StdOutLogger ( searcher )
# Optional: Instantiate a logger to pickle and save the results periodically.
# In this example, among the saved results will be the center of the search
# distribution, since we are using PGPE which is distribution-based.
_ = PicklingLogger ( searcher , interval = 10 )
# Run the algorithm for the specified amount of generations
searcher . run ( 500 )
# Get the center point of the search distribution,
# obtain a policy out of that point, and visualize the
# agent using that policy.
center_solution = searcher . status [ "center" ]
trained_policy = problem . make_net ( center_solution )
problem . visualize ( trained_policy )Weitere Beispiele finden Sie hier.
Wenn Sie Evotorch in Ihrer Recherche verwenden, sollten Sie in unserer Zeitung in Betracht ziehen.
@article { evotorch2023arxiv ,
title = { {EvoTorch}: Scalable Evolutionary Computation in {Python} } ,
author = { Toklu, Nihat Engin and Atkinson, Timothy and Micka, Vojtv{e}ch and Liskowski, Pawel{} and Srivastava, Rupesh Kumar } ,
journal = { arXiv preprint } ,
year = { 2023 } ,
note = { https://arxiv.org/abs/2302.12600 }
}Bitte beachten Sie unsere Beitragsrichtlinien.