当前位置: 首页 > 软件库 > 神经网络/人工智能 > >

EvoTorch

进化算法库
授权协议 Apache-2.0
开发语言 Python
所属分类 神经网络/人工智能
软件类型 开源软件
地区 不详
投 递 者 徐丰茂
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

EvoTorch 是一个直接构建在 PyTorch 之上的高级进化算法库,由 NNAISENSE 创建。EvoTorch 旨在加速进化算法的研究和应用,并专门支持 NeuroEvolution。

pip install evotorch

使用 EvoTorch,可以解决各种优化问题,而不必担心手头的这些问题是否可微。EvoTorch 可解决的问题类型包括:

  • Black-box 优化问题(连续或离散)
  • 强化学习任务
  • 监督学习任务
  • 等等

EvoTorch 中提供了各种进化计算算法:

  • 基于分布的搜索算法:
    • PGPE:基于参数探索的策略梯度。
    • XNES:指数自然进化策略。
    • SNES:可分离的自然进化策略。
    • CEM:交叉熵方法。
  • 基于群体的搜索算法:
    • SteadyStateGA:一个完全精英化的遗传算法实现。还支持多个目标,在这种情况下,其行为类似于 NSGA-II
    • CoSyNE:协同突触神经进化。

上面提到的所有这些算法都是在 PyTorch 中实现的,因此可以从 PyTorch 的矢量化和 GPU 功能中受益。此外,在 Ray 库的帮助下,EvoTorch 可以通过将工作负载分散到以下方面来进一步扩展这些算法:

  • 多个 CPU
  • 多个 GPU
  • Ray 集群上的多台计算机

black-box 优化示例

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%。而在现实应用中,这种分类器并不可用,因为我们需要判定某条新的记录属于哪个分类。 你可以认为我们上一章中构建的分类器是机械记忆分类器的一种扩展,只是我们不要求新的记录完全对应到数据集中的某一条记录,只要距离