Selamat datang di Proyek Evotorch! Evotorch adalah perpustakaan komputasi evolusioner open source yang dikembangkan di Nnaisense, dibangun di atas Pytorch. Lihat dokumentasi untuk panduan mendalam tentang penggunaan Evotorch, dan bergabunglah dengan kami di Slack untuk diskusi.
Mulailah dengan menginstal Evotorch:
pip install evotorch
Dengan Evotorch, seseorang dapat memecahkan berbagai masalah optimasi, terlepas dari apakah mereka dapat dibedakan (yaitu mengizinkan keturunan gradien). Di antara jenis masalah yang dapat dipecahkan dengan evotorch adalah:
Berbagai algoritma perhitungan evolusioner tersedia di Evotorch:
Karena semua algoritma ini diimplementasikan dalam Pytorch, mereka mendapat manfaat dari penggunaan vektorisasi dan paralelisasi pada GPU, secara drastis mempercepat optimasi ketika GPU tersedia. Menggunakan Ray, Evotorch berskala algoritma ini lebih jauh dengan membagi beban kerja di:
Di bawah ini adalah beberapa contoh kode yang menunjukkan API Evotorch.
Setiap fungsi objektif yang didefinisikan untuk bekerja dengan pytorch dapat digunakan secara langsung dengan Evotorch. Fungsi objektif yang tidak diveksia hanya menerima solusi sebagai tensor obor 1 dimensi, dan mengembalikan kebugaran sebagai skalar. Fungsi objektif yang diveksia menerima sejumlah solusi sebagai tensor obor 2 dimensi, dan mengembalikan tensor kebugaran 1 dimensi. Contoh berikut menunjukkan cara mendefinisikan dan menyelesaikan masalah rastrigin klasik.
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 ()Contoh berikut menunjukkan cara menyelesaikan tugas pembelajaran penguatan yang tersedia melalui perpustakaan gym.
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 )Lebih banyak contoh dapat ditemukan di sini.
Jika Anda menggunakan Evotorch dalam riset Anda, harap pertimbangkan mengutip makalah kami.
@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 }
}Silakan lihat Pedoman Kontribusi kami.