Es ist für KI-Anfänger gedacht, von Schülern der Mittelstufe bis zu Studenten der Universität.
Wenn ich versuche, OpenAIs ATARI zu verwenden, möchte ich einen Wrapper, der die Besonderheiten des Spiels abdeckt. Beispielsweise wird beim Blockbrechen der Lebenspunkt zunächst auf 5 gesetzt, aber das Spiel funktioniert nur, wenn Sie zu Beginn den Feuerknopf drücken und wenn der Lebenspunkt abnimmt (wenn er fehlschlägt). Wenn Sie dies nicht überschreiten, wird es wie ein Idiot sein, dass maschinelles Lernen überhaupt nicht voranschreitet. Persönlich ist es Zeitverschwendung. Zunächst wird ein Wrapper namens FireResetEnv vorbereitet. Wenn Sie jedoch den Block brechen, bewegt er sich nicht jedes Mal, wenn Ihr Leben abnimmt. Wenn Sie also einmal versagen, bleibt er unverändert. Also habe ich einen Wrapper wie den folgenden geschrieben.
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)
Die meisten sind chainerrl / wrapper / atari_wrapper.py Ich habe nur ein wenig hinzugefügt. Das ist Chokozainerrl.
Recommended Posts