# 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