# rlTrainOptions
智能体训练选项
函数库: TyReinforcementLearning
# 语法
train_options = rlTrainOptions(
max_episodes=max_episodes,
batch_size=batch_size,
target_update_interval=target_update_interval,
soft_update=soft_update,
soft_update_factor=soft_update_factor,
learning_interval=learning_interval,
path=path,
save_condition=save_condition,
stop_condition=stop_condition,
averageing_window_length=averageing_window_length,
test=test,
evaluator=evaluator
)
# 说明
创建一个智能体训练选项对象,用于指定在环境中训练智能体的选项。训练选项包括最大模拟回合数、经验回放批处理大小、固定目标网络更新控制、智能体学习间隔、模型保存与读取、平均窗口长度、是否测试智能体等选项。在设置了选项后,将该对象作为train!函数的输入参数。
# 示例
依据默认值创建智能体训练选项对象
using TyReinforcementLearning
train_options = rlTrainOptions()
rlTrainOptions(1000, 256, 100, false, 0.05, 300, "result", Dict("best" => 0), Dict{Any, Any}(), 20, true, rlEvaluator("MeanEpisodeReward", 1, 0, false, 1))
创建特定的智能体训练选项对象
创建特定的智能体训练选项对象,根据 name=value 来指定参数。
using TyReinforcementLearning
train_options = rlTrainOptions(
max_episodes=200,
save_condition=Dict(["best" => 1, "interval" => 100]),
learning_interval=1,
test=true,
batch_size=256,
)
rlTrainOptions(200, 256, 100, false, 0.05, 1, "result", Dict("interval" => 100, "best" => 1), Dict{Any, Any}(), 20, true, rlEvaluator("MeanEpisodeReward", 1, 0, false, 1))
# 输入参数
max_episodes-最大训练回合数
标量
最大训练回合数。指定为正整数,训练会在达到最大回合数后终止。
默认值:1000
数据类型:Int64
batch_size-批处理大小
标量
批处理大小。用于具有经验回放功能的智能体中,用于控制单次迭代时所学习的数据量。
默认值:256
数据类型:Int64
target_update_interval-目标网络更新间隔
标量
目标网络更新间隔。用于具有目标网络且使用硬更新方法的智能体中,用于控制目标网络两次更新的间隔。
默认值:100
数据类型:Int64
soft_update-否使用软更新
布尔值
是否使用软更新。用于具有目标网络的智能体中,用于控制其目标网络的更新方法是否为软更新。
默认值:false
数据类型:bool
soft_update_factor-软更新系数
标量
软更新系数。用于具有目标网络且使用软更新方法的智能体中,用于控制目标网络单次更新的幅度。
默认值:0.05
数据类型:Float64
learning_interval-学习间隔
标量
学习间隔。用于控制智能体两次学习之间的步数间隔。如果使用了经验回放功能或是表格型的智能体,推荐学习间隔使用较小的值(如 1),这样可以更充分地利用数据。
默认值:300
数据类型:Int64
path-保存路径
字符串
保存路径。用于保存智能体、训练结构等文件的目录,建议使用绝对路径。
默认值:"result"
数据类型:string
save_condition-保存条件
字典
保存条件。用于在训练过程中判断是否保存智能体以及相应的值,所保存的智能体文件序号从 1 依次向后延续。数据以字典的方式传入,可以指定为以下值:
- "best" => 0 :保存 score 最高的智能体,所保存的智能体文件名为 agent0;
- "interval" => n: 每运行 n 个 episode 时保存;
- "episodeReward" => score:当前回合测试分数大于等于 score 时保存;
- "averageReward" => score:当前回合平均窗口测试分数大于等于 score 时保存;
- "episodeCount" => score:当前已训练回合数大于等于 score 时保存;
- "averageSteps" => score:当前回合平均步数大于等于 score 时保存;
- "globalStepCount" => score:当前总训练步数大于等于 score 时保存;
- "custom" => func:当自定义保存函数返回为 true 时保存。
自定义的保存函数,其形式如下:
func(result)
输入参数 result 为当前状态下的训练结果,一个rlTrainResult结构体对象,包含以下内容,可以使用其获取训练次数,最高分数,平均分数等当前训练的状态。
| 名称 | 说明 |
|---|---|
| TrainOptions | 训练选项。 |
| BestScore | 最高分。 |
| rewards_per_episode | 每个回合的奖励,以向量形式返回。每个条目包含对应回合的奖励。 |
| steps_per_episode | 每个回合的步数,以向量形式返回。每个条目包含对应回合的步数。 |
| test_scores_per_episode | 每个回合的分数,以向量形式返回。每个条目包含对应回合的分数(如果在 trainOptions 中指定 test=false,则该项等于 rewards_per_episode )。 |
| average_rewards_per_episode | 窗口期内的平均奖励,以向量形式返回。 |
| average_steps_per_episode | 窗口期内的平均步数,以向量形式返回。 |
| average_test_scores_per_episode | 窗口期内的平均分数,以向量形式返回。 |
| total_agent_steps | 训练中智能体的总步数,以向量形式返回。每个条目包含到达该回合之前的 steps_per_episode 条目的累积和。 |
默认值:Dict(["best" => 0])
stop_condition-中止条件
字典
中止条件。用于在训练过程中判断是否提前中止训练。数据以字典的方式传入,可以指定为以下值:
- "episodeReward" => score:当前回合测试分数大于等于 score 时中止;
- "averageReward" => score:当前回合平均窗口测试分数大于等于 score 时中止;
- "globalStepCount" => score:当前总训练步数大于等于 score 时中止;
- "averageSteps" => score:当前回合平均步数大于等于 score 时中止;
- "episodeCount" => score:当前已训练回合数大于等于 score 时中止;
- "custom" => func:当自定义中止函数返回为 true 时中止。
自定义的中止函数,其形式如下:
func(result)
输入参数 result 为当前状态下的训练结果,一个rlTrainResult结构体对象,可以使用其获取训练次数,最高分数,平均分数等当前训练的状态。
默认值:Dict()
averageing_window_length-平均窗口长度
标量
平均窗口长度。用于平滑化奖励或其他指标的变化趋势。这个参数定义了一个滑动窗口的长度,通过计算窗口内的平均值来平滑数据。
默认值:20
数据类型:Int64
test-是否测试
布尔值
是否启用 evaluator 函数。其奖励值之和作为智能体当前得分。如果设置为 false,则以训练过程中的奖励值之和为当前得分。
默认值:true
数据类型:Bool
evaluator-评估器
结构体
训练过程中测试使用的评估器。指定为rlEvaluator或rlCustomEvaluator对象。
默认值:rlEvaluator()
数据类型:Bool
# 输出参数
train_options-智能体训练选项
结构体
智能体训练选项,用于训练智能体。