EvoTorch 正在参加 2021 年度 OSC 中国开源项目评选,请投票支持!
EvoTorch 在 2021 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
2021 年度 OSC 中国开源项目评选 正在火热进行中,快来投票支持你喜欢的开源项目!
2021 年度 OSC 中国开源项目评选 >>> 中场回顾
EvoTorch 获得 2021 年度 OSC 中国开源项目评选「最佳人气项目」 !
授权协议 Apache-2.0
开发语言 Python
操作系统 跨平台
软件类型 开源软件
开源组织
地区 不详
投 递 者 白开水不加糖
适用人群 未知
收录时间 2022-08-10

软件简介

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)

更多示例可以在这里找到。

展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论

点击引领话题📣
发表了资讯
08/11 07:45

NNAISENSE 发布首个开源进化算法库 EvoTorch

LSTM 之父 Juergen Schmidhuber 创办的人工智能公司 NNAISENSE 宣布正式发布其 EvoTorch 开源进化算法库。根据介绍,这是同类中的首个开源平台,为工业界提供了一个进化算法包 (evolutionary algorithm,EA);当与机器学习专业知识相结合时,可以在一小部分时间内解决复杂的运营挑战,而且成本更低、规模更大。 公告称,随着机器学习在许多垂直行业中发挥着越来越重要的作用,进化算法是一种有吸引力的解决方案,可以应对伴随自...

0
5
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表了博客
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
发表了问答
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
暂无内容
0 评论
4 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部