# rlACAgent


强化学习 AC 智能体

函数库: TyReinforcementLearning

# 语法

agent = rlACAgent(models, agentOptions)
agent = rlACAgent(actor, critic, agentOptions)

# 说明

agent = rlACAgent(models, agentOptions) 使用指定智能体模型来创建一个 AC 智能体,并通过 agentOptions 设置智能体属性。


agent = rlACAgent(actor, critic, agentOptions) 使用指定执行者和评价者来创建一个 AC 智能体,并通过 agentOptions 设置智能体属性。

AC(Actor-Critic)是一种基于 Actor-Critic 的强化学习的算法,结合了策略梯度方法和值函数估计的优势。

在 AC 算法中,Actor 网络负责生成动作。它接受环境的状态作为输入,并输出一个概率分布,表示在给定状态下采取每个可能动作的概率。Actor 网络的目标是最大化长期累积奖励,通过梯度上升更新网络参数。Critic 网络则用于评估策生成动作的价值。它接受环境状态作为输入,并输出一个状态值或状态-动作值的价值评估值。Critic 网络的目标是准确地估计策略的价值,并用于评估 Actor 网络生成的动作。Critic 网络的参数可以通过回溯更新的方式进行优化。AC 算法通过交互与环境获得样本数据,然后利用这些数据对 Actor 和 Critic 网络进行训练。

# 示例

使用指定智能体模型创建 AC 智能体

创建环境接口。对于此示例,使用“CartPole-v1”环境,包含 4 个状态和 2 个可选动作。

using TyReinforcementLearning
using Flux
env = BuildEnv("CartPole-v1");

根据环境的状态个数与动作个数创建 AC 的策略函数和值函数。

actor_net = BuildNetFromLayers([
    Flux.Dense(StateSize(env)[1], 32, relu),
    Flux.Dense(32, 64, sigmoid),
    Flux.Dense(64, ActionDims(env)),
    softmax]
)

critic_net = BuildNetFromLayers([
    Flux.Dense(StateSize(env)[1], 32, relu),
    Flux.Dense(32, 64, sigmoid),
    Flux.Dense(64, 1)]
);

基于策略函数和值函数创建 AC 智能体模型。

models = rlACModels(
    actorNet=actor_net,
    criticNet=critic_net
);

创建智能体选项。

option = rlACAgentOptions(
    stateSize=StateSize(env),
    actionNum=ActionDims(env)
);

使用智能体模型与智能体选项创建智能体。

agent = rlACAgent(models,option)
rlACAgent(Chain(Dense(4 => 32, relu), Dense(32 => 64, σ), Dense(64 => 2), softmax), Chain(Dense(4 => 32, relu), Dense(32 => 64, σ), Dense(64 => 1)), Adam(0.001, (0.9, 0.999), 1.0e-8, IdDict{Any, Any}()), Adam(0.001, (0.9, 0.999), 1.0e-8, IdDict{Any, Any}()), 0.0001, 0.0001, 0.9, 0.1, 0.001, 0.01, (4,), 2, 1000, TyReinforcementLearning.original_rewards, rlReplayMemory(Matrix{Float64}(undef, 4, 0), Matrix{Int64}(undef, 1, 0), Float64[], Matrix{Float64}(undef, 4, 0), Bool[], 0), rlTrainResult(Float64[], Float64[], Float64[], Float64[], Float64[], Float64[], Float64[], -Inf, nothing), 0, 0)
使用指定执行者和评价者创建 AC 智能体

创建环境接口。对于此示例,使用“CartPole-v1”环境,包含 4 个状态和 2 个可选动作。

using TyReinforcementLearning
using Flux
env = BuildEnv("CartPole-v1");

创建执行者和评价者。

actor_net = BuildNetFromLayers([
    Flux.Dense(StateSize(env)[1], 32, relu),
    Flux.Dense(32, 64, sigmoid),
    Flux.Dense(64, ActionDims(env)),
    softmax]
)
actor = rlDiscreteCategoricalActor(net=actor_net)

critic_net = BuildNetFromLayers([
    Flux.Dense(StateSize(env)[1], 32, relu),
    Flux.Dense(32, 64, sigmoid),
    Flux.Dense(64, 1)]
)
critic = rlValueFunction(net=critic_net);

创建智能体选项。

option = rlACAgentOptions(
    stateSize=StateSize(env),
    actionNum=ActionDims(env)
);

使用执行者和评价者与智能体选项创建智能体。

agent = rlACAgent(actor,critic,option)
rlACAgent(Chain(Dense(4 => 32, relu), Dense(32 => 64, σ), Dense(64 => 2), softmax), Chain(Dense(4 => 32, relu), Dense(32 => 64, σ), Dense(64 => 1)), Adam(0.001, (0.9, 0.999), 1.0e-8, IdDict{Any, Any}()), Adam(0.001, (0.9, 0.999), 1.0e-8, IdDict{Any, Any}()), 0.0001, 0.0001, 0.9, 0.1, 0.001, 0.01, (4,), 2, 1000, TyReinforcementLearning.original_rewards, rlReplayMemory(Matrix{Float64}(undef, 4, 0), Matrix{Int64}(undef, 1, 0), Float64[], Matrix{Float64}(undef, 4, 0), Bool[], 0), rlTrainResult(Float64[], Float64[], Float64[], Float64[], Float64[], Float64[], Float64[], -Inf, nothing), 0, 0)

# 输入参数

models-智能体模型
结构体

智能体模型,指定为rlACModels对象,用作 AC 智能体的策略。本函数包括策略函数、值函数,策略函数和值函数的优化器,策略函数和值函数的 L2 正则化因子,用于指导智能体生成动作,并对环境状态-动作对进行价值评估。

actor-执行者
结构体

强化学习执行者 actor,指定为rlDiscreteCategoricalActor对象。

critic-评价者
结构体

强化学习评价者 critic,指定为rlValueFunction对象

agentOptions-智能体选项
结构体

智能体选项,指定为rlACAgentOptions对象。

# 输出参数

agent-智能体
结构体

输出一个可以训练的强化学习 AC 智能体。

# 另请参阅

BuildEnv | BuildNetFromLayers | rlACModels | rlDiscreteCategoricalActor | rlValueFunction | rlACAgentOptions | StateSize | ActionDims | epsilonGreedy