- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 ray RLlib 库在 5 排游戏中训练多智能体训练器。这是零和环境,所以我有代理人行为退化的问题(总是赢得第一个代理人,5 步获胜)。我有一个想法以这种方式改变代理人的学习率:首先训练第一个代理人,第二个作为随机学习率等于零。在第一个代理学习如何赢得超过 90% 的游戏转换之后。然后重复但是在构造函数中初始化后我无法更改学习率。这可能吗?
def gen_policy(GENV, lr=0.001):
config = {
"model": {
"custom_model": 'GomokuModel',
"custom_options": {"use_symmetry": True, "reg_loss": 0},
},
"custom_action_dist": Categorical,
"lr": lr
}
return (None, GENV.observation_space, GENV.action_space, config)
def map_fn(agent_id):
if agent_id=='agent_0':
return "policy_0"
else:
return "policy_1"
trainer = ray.rllib.agents.a3c.A3CTrainer(env="GomokuEnv", config={
"multiagent": {
"policies": {"policy_0": gen_policy(GENV, lr = 0.001), "policy_1": gen_policy(GENV,lr=0)},
"policy_mapping_fn": map_fn,
},
"callbacks":
{"on_episode_end": clb_episode_end},
while True:
rest = trainer.train()
#here I want to change learning rate of my policies based on environment statistics
我尝试在 True 循环中添加这些行
new_config = trainer.get_config()
new_config["multiagent"]["policies"]["policy_0"]=gm.gen_policy(GENV, lr = 0.00321)
new_config["multiagent"]["policies"]["policy_1"]=gm.gen_policy(GENV, lr = 0.00175)
trainer["raw_user_config"]=new_config
trainer.config = new_config
没用
最佳答案
我偶然发现了同样的问题,并对 RLlib 的实现做了一些研究。
从测试脚本来看,lr_schedule 是由类似这样的间隔给出的
lr_schedule: [
[0, 0.0005],
[20000000, 0.000000000001],
]
之后我检查了实现细节。
在 ray/rllib/policy/torch_policy.py LearningRateSchedule 函数实现入口点。
定义 lr_schedule 时,将使用 PiecewiseSchedule。
来自 ray/rllib/utils/schedules/piecewise_schedule.py 中 PiecewiseSchedule 的实现如下:
endpoints (List[Tuple[int,float]]): A list of tuples
`(t, value)` such that the output
is an interpolation (given by the `interpolation` callable)
between two values.
E.g.
t=400 and endpoints=[(0, 20.0),(500, 30.0)]
output=20.0 + 0.8 * (30.0 - 20.0) = 28.0
NOTE: All the values for time must be sorted in an increasing
order.
这意味着学习率计划由两个参数组成:
时间步长 t (int) 和支持学习率 (float)
对于这些值之间的每个时间步,使用插值。
可以通过参数 interpolation 在函数 PiecewiseSchedule 内指定插值,默认为 _linear_interpolation
interpolation (callable): A function that takes the left-value,
the right-value and an alpha interpolation parameter
(0.0=only left value, 1.0=only right value), which is the
fraction of distance from left endpoint to right endpoint.
TL;DR;
因此lr_schedule描述了线性插值的支持点(使用默认插值)。
此外,在训练期间更改参数 Github Issue最好的选择似乎是重新初始化训练器:
state = trainer.save()
trainer.stop()
#re_initialise trainer
trainer.restore(state)
关于lr - 如何动态更改 RLlib 训练代理的学习率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57745954/
我对以下内容感到困惑quote来自维基百科: In other words, if a language was reasonable enough to allow an efficient one
我正在努力研究解析器理论,但我一直在不同的来源中找到相同的示例。语法大致如下(简化): E = T E = E + T T = 0..9 所以假设字符串 2 + 2 将被这样解析(“|”将堆栈与提醒分
PUSH{lr}的等效指令是什么?和 POP{lr}在 ARM Arch64 指令集中。 是 STR X30, [SP, #8]正确的 ?你能解释一下保持堆栈对齐的概念吗?我对 ARMv8 比较陌生,
是否有一个很好的在线资源,其中包含一些主要解析算法(LL(1)、LR(1)、LR(0)、LALR(1))的语法集合?我发现了许多属于这些家族的单独语法,但据我所知,没有什么好的资源可以让人编写大量示例
我使用IAR编译例程,但在ARM A7上运行错误;然后当我打开 IAR 生成的 .lst 文件时,我得到了以下问题。 它是一个ISR,首先push {r3, r4, r5, lr},但是POP {r0
我想知道 LR 属性解析器可以做什么以及它是如何实现的。 yacc 生成的解析器允许在属性源是使用 $0、$-1 等规范语法位于左侧的兄弟时继承属性。使用 S -> A B B 将能够从 A 继承一个
我想使用“merc_timer_handle_t”来记录loadrunner中的时间,但是当我创建场景时,LR给出错误消息:“第15行靠近“MasterT”的语法错误” . 我想知道如何使用“merc
我正在使用 ray RLlib 库在 5 排游戏中训练多智能体训练器。这是零和环境,所以我有代理人行为退化的问题(总是赢得第一个代理人,5 步获胜)。我有一个想法以这种方式改变代理人的学习率:首先训练
我是 Graphviz 的新手,尝试使用如下所示从左到右布局一些节点: digraph g { graph [ rankdir = "LR" ]; node [ fontsize = "16", f
LR(1) 解析器可以解析这种类型的语法吗? S -> SA | A A -> aSb | ab 我正在尝试编写一个实现此类解析器的 Java 程序,但我只能在没有左递归的语法上获得正确的结果。 最
从历史上看,LALR(1) 解析器比 LR(1) 解析器更受青睐,因为 LR(1) 解析器生成的大量状态需要资源。很难相信这仍然是当今计算环境中的一个问题。情况仍然如此,还是现代编译器现在使用规范的
我是编译主题的新手,刚刚开始自下而上解析的练习。 我一直坚持以下问题。 为以下文法建立一个LR(0)解析表: 1) E –> E + T 2) E –> T 3) T –> (E) 4) T –> i
我有一个我无法解决的 LR(1) 冲突语法;然而,语法应该是明确的。我将首先使用五个标记在简化语法上演示问题:(, ), {}, , 和 id。 EBNF 看起来像这样: args = (
假设 G(增强语法): E' - > E E - > E+T|T T - > T*F|F F - > (E)|id 因此,在 dfa 的创建级别之一中,我已经达到了这一点:(龙书中的 I6)
我经常看到以 lr 指针终止的 ARM 堆栈跟踪(阅读:Android NDK 堆栈跟踪),如下所示: #00 pc 001c6c20 /data/data/com.audia.dev
我使用的是 ARM Cortex-M4 处理器。据我了解,LR(链接寄存器)存储当前执行函数的返回地址。但是,内联和/或裸函数会影响它吗? 我正在努力实现简单的多任务处理。我想写一些代码来保存执行上下
我正在尝试为一种将用于生成其他文件的模板(配置)文件构建一个简单的 LR 解析器。我已经阅读和阅读了有关 LR 解析器的信息,但我似乎无法理解它!我知道有一个解析栈,一个状态栈和一个解析表。 toke
我在理解LR(1)-项目中的超前原理方面遇到困难。如何计算超前集? 例如,我有以下语法: S -> AB A -> aAb | b B -> d 然后,第一个状态将如下所示: S -> .AB , {
我正在学习“Engineering a Compiler, 2nd Edition”。我知道什么是LR(1)文法,但我在这本书中找不到运算符优先文法。 然后我从图书馆借了《编译器——原理、技术和工具》
我至少读过十几遍维基百科的解释,但我仍然对 LR(0) 解析器如何离开状态 0 感到困惑。 Wikipedia's example, with its explanation, says : The
我是一名优秀的程序员,十分优秀!