【问题标题】:OpenAI-gym how to implement a timer for a certain action in step()OpenAI-gym 如何为 step() 中的某个动作实现计时器
【发布时间】:2018-09-19 02:58:43
【问题描述】:

我希望代理执行的其中一项操作需要在每个操作之间设置延迟。对于上下文,在 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 创建项目,所以我不确定该工具包的功能是什么,任何帮助将不胜感激。

【问题讨论】:

    标签: python pygame openai-gym


    【解决方案1】:

    您可以使用任何您喜欢的跟踪时间的方法(我想pygame.time.get_ticks() 除外),并使用与pygame 代码中类似的方法。您希望将 previous_time 存储为环境的成员,而不仅仅是一个局部变量,因为您希望它在函数调用中持续存在。

    要真正阻止强化学习代理(假设您使用gym 进行RL)完全选择开火动作并不容易,但您可以简单地实现step() 函数,使代理不这样做如果他们选择开火动作太快,什么都没有。

    至于测量时间,你可以测量挂钟时间,但是你的 CPU 的能力会影响你的代理被允许射击的频率(它可能能够在非常旧的硬件上每一步发射一个新子弹,但只允许在强大的硬件上每 100 步发射一颗子弹),这可能是个坏主意。相反,我建议通过计算step() 调用来衡量“时间”。例如,仅使用上述问题中的代码,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
    

    【讨论】:

    • 该死,再次感谢您的宝贵时间。考虑到你已经帮助了多少,我很难过再直接问你。看起来我的 render() 和 reset() 方法很好,只是在如何设置有效操作并返回 step() 部分中的操作方面存在问题。我可以把我的代码发给你看看我的格式是否正确吗?
    • @Rokas98765 当然。大多数使用健身房的 RL 代理只在训练开始之前询问环境一次动作空间是什么,并且它们总是从该空间中选择动作。因此,拥有依赖于州的法律行动集并不常见。这就是为什么我建议简单地接受step() 中的任何操作,但如果还不允许则忽略它。然后,代理必须在动作无用时自行学习(或者只是最终浪费一些时间执行不做任何事情的动作)。请注意,step() 通常不会返回操作。
    猜你喜欢
    • 1970-01-01
    • 2017-01-02
    • 1970-01-01
    • 1970-01-01
    • 2022-10-08
    • 1970-01-01
    • 2022-08-03
    • 2017-11-17
    • 1970-01-01
    相关资源
    最近更新 更多