EvoTorch 是一个直接构建在 PyTorch 之上的高级进化算法库,由 NNAISENSE 创建。EvoTorch 旨在加速进化算法的研究和应用,并专门支持 NeuroEvolution。
pip install evotorch
使用 EvoTorch,可以解决各种优化问题,而不必担心手头的这些问题是否可微。EvoTorch 可解决的问题类型包括:
EvoTorch 中提供了各种进化计算算法:
上面提到的所有这些算法都是在 PyTorch 中实现的,因此可以从 PyTorch 的矢量化和 GPU 功能中受益。此外,在 Ray 库的帮助下,EvoTorch 可以通过将工作负载分散到以下方面来进一步扩展这些算法:
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 from evotorch.neuroevolution import GymNE # Declare the problem to solve problem = GymNE( env_name="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) # 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)
更多示例可以在这里找到。
计算机进化是一款模拟计算机进化史的游戏,升级您的计算机,以安装更多应用程序和新的操作系统。
将浮点转成定点运算,就一个目的,减少算法运算的 cycles 数,提高算法的效率。
将浮点转成定点运算,就一个目的,减少算法运算的 cycles 数,提高算法的效率。
主要内容:Nelder–Mead单纯形算法, 最小二乘,求根包提供了几种常用的优化算法。 该模块包含以下几个方面 - 使用各种算法(例如BFGS,Nelder-Mead单纯形,牛顿共轭梯度,COBYLA或SLSQP)的无约束和约束最小化多元标量函数() 全局(蛮力)优化程序(例如,,) 最小二乘最小化()和曲线拟合()算法 标量单变量函数最小化()和根查找() 使用多种算法(例如,Powell,Levenberg-Marquardt混合或Newton-Kr
梯度下降(GD)是最小化风险函数、损失函数的一种常用方法,随机梯度下降和批量梯度下降是两种迭代求解思路。 1 批量梯度下降算法 假设h(theta)是要拟合的函数,J(theta)是损失函数,这里theta是要迭代求解的值。这两个函数的公式如下,其中m是训练集的记录条数,j是参数的个数: 梯度下降法目的就是求出使损失函数最小时的theta。批量梯度下降的求解思路如下: 对损失函数求th
有一种分类器叫“机械记忆分类器(Rote Classifer)”,它会将数据集完整地保存下来,并用来判断某条记录是否存在于数据集中。 所以,如果我们只对数据集中的数据进行分类,准确率将是100%。而在现实应用中,这种分类器并不可用,因为我们需要判定某条新的记录属于哪个分类。 你可以认为我们上一章中构建的分类器是机械记忆分类器的一种扩展,只是我们不要求新的记录完全对应到数据集中的某一条记录,只要距离