gpt4 book ai didi

python - 【强化学习】为什么我的reward变成0就结束了?我在健身房环境方面遇到了一些麻烦

转载 作者:行者123 更新时间:2023-12-02 22:45:14 24 4
gpt4 key购买 nike

各位!

我在使用 openAI 健身房的自定义环境方面几乎没有遇到任何问题。

我想创造一个环境,每次“抽”气球时都会积累奖励,

如果气球爆了,所有奖励都变成0

我制作了一个环境功能“step”和“reward”,如下所示

def step(self, action):
assert self.action_space.contains(action)
reward = self.reward
if action: # pump a balloon or stop ( 1 / 0 )
self.npumps += 1
if burst(self.max_pump, self.npumps):
self.balloon=1
terminated = True
reward = 0
else:
terminated = False
reward =self.npumps
else: # stop to pump balloon and withdraw rewards
terminated = True

if self.render_mode == "human":
self.render()

return self._get_obs(), reward, terminated, False, {}

def _get_obs(self):
return ({"kth pump": self.npumps, "balloon": self.balloon})

def reset(self, seed=None, options=None):
super().reset(seed=seed)
self.npumps = 0
self.balloon = 0 # pop = 1, else = 0
self.reward = 0
return self._get_obs(), {}

但是,当我使用这个函数来模拟代理的行为时,似乎出了点问题。

done = False
obs = env.reset()
while not done:
action = env.action_space.sample()
obs, reward, done, _, info = env.step(action)
env.render()
print(obs, action, reward)
env.close()

然后

{'第 k 个泵': 1, '气球': 0} 1 1

{'第 k 个泵':2,'气球':0}1 2

{'第 k 个泵':3,'气球':0} 1 3

{'第 k 个泵':3,'气球':0} 0 0

为什么会这样?这是正确的功能吗?或者我做错了什么?我是否误解了 gym.env.step 的机制?

请给这个领域的新手一些提示!

非常感谢。

最佳答案

在您的reset 方法中,您设置类变量self.reward = 0。然后在每个 step 调用的开始,您分配 reward = self.reward,同时从不更改右侧,它自实例化以来始终为 0,因此您的 reward 也是 0。那么如果你的 action 是 0,你只是将你的 terminated 标志更改为 True 并且永远不会分配任何其他内容给 reward,因此它当然保持为 0。

关于python - 【强化学习】为什么我的reward变成0就结束了?我在健身房环境方面遇到了一些麻烦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74725659/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com