OpenAI-gym 如何为 step() 中的某个动作实现计时器
OpenAI-gym how to implement a timer for a certain action in step()
我希望代理执行的其中一个操作需要在每个操作之间有一个延迟。对于上下文,在 pygame 中我有以下用于发射子弹的代码:
if keys[pygame.K_SPACE]:
current_time = pygame.time.get_ticks()
# ready to fire when 600 ms have passed.
if current_time - previous_time > 600:
previous_time = current_time
bullets.append([x + 25, y + 24])
我已经设置了一个计时器来防止子弹垃圾邮件,我将如何构造它以使用 step() 方法?我的其他动作是上下左右移动。
这是我第一次使用 OpenAI-gym 创建项目,所以我不确定该工具包的功能是什么,任何帮助将不胜感激。
您可以使用任何您喜欢的跟踪时间的方法(我想 pygame.time.get_ticks()
除外),并使用与 pygame
代码中类似的方法。您希望将 previous_time
存储为环境的成员而不仅仅是局部变量,因为您希望它在函数调用中持续存在。
要真正阻止您的强化学习代理(假设您正在使用健身房进行 RL)并不容易 select 一起开火,但您可以简单地实现 step()
中的函数如果他们 select 开火动作太快,代理人根本不会做任何事情。
至于测量时间,你可以测量挂钟时间,但是你的 CPU 的力量将影响你的特工被允许射击的频率(它可能能够发射新子弹在非常旧的硬件上每一步,但在功能强大的硬件上每 100 步只允许发射一颗子弹),这可能是个坏主意。相反,我建议仅通过计算 step()
调用来衡量 "time"。例如,仅使用上述问题中的代码,step()
函数可能如下所示:
def step(action):
self.step_counter += 1
# other step() code here
if action == FIRE:
if self.step_counter - self.previous_time > 10: # or any other number
self.previous_time = self.step_counter
bullets.append([x + 25, y + 24])
# other step() code here
别忘了您还需要重置 reset()
中新添加的成员变量:
def reset():
self.step_counter = 0
self.previous_time = -100 # some negative number such that your agent can fire at start
# other reset() code here
我希望代理执行的其中一个操作需要在每个操作之间有一个延迟。对于上下文,在 pygame 中我有以下用于发射子弹的代码:
if keys[pygame.K_SPACE]:
current_time = pygame.time.get_ticks()
# ready to fire when 600 ms have passed.
if current_time - previous_time > 600:
previous_time = current_time
bullets.append([x + 25, y + 24])
我已经设置了一个计时器来防止子弹垃圾邮件,我将如何构造它以使用 step() 方法?我的其他动作是上下左右移动。
这是我第一次使用 OpenAI-gym 创建项目,所以我不确定该工具包的功能是什么,任何帮助将不胜感激。
您可以使用任何您喜欢的跟踪时间的方法(我想 pygame.time.get_ticks()
除外),并使用与 pygame
代码中类似的方法。您希望将 previous_time
存储为环境的成员而不仅仅是局部变量,因为您希望它在函数调用中持续存在。
要真正阻止您的强化学习代理(假设您正在使用健身房进行 RL)并不容易 select 一起开火,但您可以简单地实现 step()
中的函数如果他们 select 开火动作太快,代理人根本不会做任何事情。
至于测量时间,你可以测量挂钟时间,但是你的 CPU 的力量将影响你的特工被允许射击的频率(它可能能够发射新子弹在非常旧的硬件上每一步,但在功能强大的硬件上每 100 步只允许发射一颗子弹),这可能是个坏主意。相反,我建议仅通过计算 step()
调用来衡量 "time"。例如,仅使用上述问题中的代码,step()
函数可能如下所示:
def step(action):
self.step_counter += 1
# other step() code here
if action == FIRE:
if self.step_counter - self.previous_time > 10: # or any other number
self.previous_time = self.step_counter
bullets.append([x + 25, y + 24])
# other step() code here
别忘了您还需要重置 reset()
中新添加的成员变量:
def reset():
self.step_counter = 0
self.previous_time = -100 # some negative number such that your agent can fire at start
# other reset() code here