Il est destiné aux débutants en IA, des lycéens aux étudiants universitaires.
Lorsque j'essaye d'utiliser ATARI d'OpenAI, je veux un wrapper pour couvrir les particularités du jeu. Par exemple, en cas de rupture de bloc, le point de vie est initialement défini sur 5, mais le jeu ne fonctionnera que si vous appuyez sur le bouton de tir au début et lorsque le point de vie diminue (en cas d'échec). Si vous ne dépassez pas cela, ce sera comme un imbécile que l'apprentissage automatique ne progressera pas du tout. Personnellement, c'est une perte de temps. En premier lieu, un wrapper appelé FireResetEnv est préparé, mais si vous cassez le bloc, il ne bougera pas à chaque fois que votre vie diminuera, donc si vous échouez une fois, il restera tel quel. J'ai donc écrit un wrapper comme celui ci-dessous.
class FireResetEnvAuto(gym.Wrapper):
def __init__(self, env):
"""Take action on reset for envs that are fixed until firing."""
gym.Wrapper.__init__(self, env)
assert env.unwrapped.get_action_meanings()[1] == 'FIRE'
assert len(env.unwrapped.get_action_meanings()) >= 3
self.lives = 0
def reset(self, **kwargs):
self.env.reset(**kwargs)
self.lives = self.env.unwrapped.ale.lives()
obs, _, done, info = self.env.step(1)
if done or info.get('needs_reset', False):
self.env.reset(**kwargs)
obs, _, done, info = self.env.step(2)
if done or info.get('needs_reset', False):
self.env.reset(**kwargs)
return obs
def step(self, ac):
lives = self.env.unwrapped.ale.lives()
if lives<self.lives:
self.lives=lives
return self.env.step(1)
return self.env.step(ac)
La plupart sont chainerrl / wrapper / atari_wrapper.py J'ai juste ajouté un peu. C'est chokozainerrl.
Recommended Posts