مرحبًا بك في مشروع Evotorch! Evotorch هي مكتبة حساب تطورية مفتوحة المصدر تم تطويرها في Nnaisense ، مبنية على رأس Pytorch. راجع الوثائق للحصول على إرشادات متعمقة حول استخدام Evotorch ، وانضم إلينا في Slack للمناقشات.
ابدأ عن طريق تثبيت evotorch:
pip install evotorch
مع evotorch ، يمكن للمرء حل مشاكل التحسين المختلفة ، بغض النظر عما إذا كانت قابلة للتمييز (أي السماح بالإنجاز التدرج). من بين أنواع المشكلات التي يمكن حلها مع evotorch هي:
تتوفر خوارزميات حساب تطورية مختلفة في Evotorch:
نظرًا لأن كل هذه الخوارزميات يتم تنفيذها في Pytorch ، فإنها تستفيد من استخدام التقييم والموازاة على وحدات معالجة الرسومات ، مما يؤدي بشكل كبير إلى التحسين عند توفر وحدات معالجة الرسومات. باستخدام Ray ، يقوم Evotorch بتقييم هذه الخوارزميات بشكل أكبر عن طريق تقسيم عبء العمل عبر:
فيما يلي بعض أمثلة التعليمات البرمجية التي توضح واجهة برمجة تطبيقات Evotorch.
يمكن استخدام أي وظيفة موضوعية محددة للعمل مع Pytorch مباشرة مع evotorch. تتلقى وظيفة الموضوعية غير المستقرة ببساطة حلًا كموتر شعلة أحادي الأبعاد ، وإرجاع اللياقة كقياس. تتلقى وظيفة الموضوعية المتجهة مجموعة من الحلول كموتر شعلة ثنائية الأبعاد ، ويعيد موتر واحد من اللياقة البدنية. يوضح المثال التالي كيفية تحديد وحل مشكلة rastrigin الكلاسيكية.
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 ()يوضح المثال التالي كيفية حل مهام التعلم التعزيز المتوفرة من خلال مكتبة الصالة الرياضية.
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 )يمكن العثور على المزيد من الأمثلة هنا.
إذا كنت تستخدم Evotorch في بحثك ، فيرجى التفكير في ذكر ورقتنا.
@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 }
}يرجى الاطلاع على إرشادات المساهمة لدينا.