mirror of
https://github.com/wassname/DeepRL.git
synced 2026-09-09 11:13:47 +08:00
Ram Atari
This commit is contained in:
@@ -108,6 +108,27 @@ class MaxAndSkipEnv(gym.Wrapper):
|
||||
self._obs_buffer.append(obs)
|
||||
return obs
|
||||
|
||||
class SkipEnv(gym.Wrapper):
|
||||
def __init__(self, env=None, skip=4):
|
||||
"""Return only every `skip`-th frame"""
|
||||
super(SkipEnv, self).__init__(env)
|
||||
self._skip = skip
|
||||
|
||||
def step(self, action):
|
||||
total_reward = 0.0
|
||||
done = None
|
||||
for _ in range(self._skip):
|
||||
obs, reward, done, info = self.env.step(action)
|
||||
total_reward += reward
|
||||
if done:
|
||||
break
|
||||
|
||||
return obs, total_reward, done, info
|
||||
|
||||
def reset(self):
|
||||
obs = self.env.reset()
|
||||
return obs
|
||||
|
||||
class DatasetEnv(gym.Wrapper):
|
||||
def __init__(self, env=None):
|
||||
super(DatasetEnv, self).__init__(env)
|
||||
@@ -174,10 +195,10 @@ class StackFrame(gym.Wrapper):
|
||||
def reset(self):
|
||||
state = self.env.reset()
|
||||
self.buffer = [state] * self.history_length
|
||||
return np.vstack(self.buffer)
|
||||
return np.asarray(np.vstack(self.buffer))
|
||||
|
||||
def step(self, action):
|
||||
state, reward, done, info = self.env.step(action)
|
||||
self.buffer.pop(0)
|
||||
self.buffer.append(state)
|
||||
return np.vstack(self.buffer), reward, done, info
|
||||
return np.asarray(np.vstack(self.buffer)), reward, done, info
|
||||
|
||||
@@ -73,6 +73,23 @@ class PixelAtari(BasicTask):
|
||||
def normalize_state(self, state):
|
||||
return np.asarray(state) / 255.0
|
||||
|
||||
class RamAtari(BasicTask):
|
||||
def __init__(self, name, no_op, frame_skip, max_steps=10000):
|
||||
BasicTask.__init__(self, max_steps)
|
||||
self.name = name
|
||||
env = gym.make(name)
|
||||
assert 'NoFrameskip' in env.spec.id
|
||||
env = EpisodicLifeEnv(env)
|
||||
env = NoopResetEnv(env, noop_max=no_op)
|
||||
env = SkipEnv(env, skip=frame_skip)
|
||||
if 'FIRE' in env.unwrapped.get_action_meanings():
|
||||
env = FireResetEnv(env)
|
||||
self.env = env
|
||||
self.action_dim = self.env.action_space.n
|
||||
|
||||
def normalize_state(self, state):
|
||||
return np.asarray(state) / 255.0
|
||||
|
||||
class ContinuousMountainCar(BasicTask):
|
||||
name = 'MountainCarContinuous-v0'
|
||||
success_threshold = 90
|
||||
|
||||
@@ -114,6 +114,27 @@ def dqn_pixel_atari(name):
|
||||
config.double_q = False
|
||||
run_episodes(DQNAgent(config))
|
||||
|
||||
def dqn_ram_atari(name):
|
||||
config = Config()
|
||||
config.history_length = 1
|
||||
config.task_fn = lambda: RamAtari(name, no_op=30, frame_skip=4)
|
||||
action_dim = config.task_fn().action_dim
|
||||
config.optimizer_fn = lambda params: torch.optim.RMSprop(params, lr=0.00025, alpha=0.95, eps=0.01)
|
||||
config.network_fn = lambda: FCNet([128, 64, 64, action_dim], gpu=2)
|
||||
config.policy_fn = lambda: GreedyPolicy(epsilon=0.1, final_step=1000000, min_epsilon=0.1)
|
||||
config.replay_fn = lambda: Replay(memory_size=100000, batch_size=32, dtype=np.uint8)
|
||||
config.reward_shift_fn = lambda r: np.sign(r)
|
||||
config.discount = 0.99
|
||||
config.target_network_update_freq = 10000
|
||||
config.max_episode_length = 0
|
||||
config.exploration_steps= 100
|
||||
config.logger = Logger('./log', logger)
|
||||
config.test_interval = 0
|
||||
config.test_repetitions = 10
|
||||
config.double_q = True
|
||||
# config.double_q = False
|
||||
run_episodes(DQNAgent(config))
|
||||
|
||||
def async_pixel_atari(name):
|
||||
config = Config()
|
||||
config.history_length = 1
|
||||
@@ -322,7 +343,7 @@ if __name__ == '__main__':
|
||||
# logger.setLevel(logging.DEBUG)
|
||||
logger.setLevel(logging.INFO)
|
||||
|
||||
# dqn_cart_pole()
|
||||
dqn_cart_pole()
|
||||
# async_cart_pole()
|
||||
# a3c_cart_pole()
|
||||
# a2c_cart_pole()
|
||||
@@ -334,11 +355,13 @@ if __name__ == '__main__':
|
||||
# dqn_pixel_atari('PongNoFrameskip-v4')
|
||||
# async_pixel_atari('PongNoFrameskip-v4')
|
||||
# a3c_pixel_atari('PongNoFrameskip-v4')
|
||||
a2c_pixel_atari('PongNoFrameskip-v4')
|
||||
# a2c_pixel_atari('PongNoFrameskip-v4')
|
||||
|
||||
# dqn_pixel_atari('BreakoutNoFrameskip-v4')
|
||||
# async_pixel_atari('BreakoutNoFrameskip-v4')
|
||||
# a3c_pixel_atari('BreakoutNoFrameskip-v4')
|
||||
|
||||
dqn_ram_atari('Pong-ramNoFrameskip-v4')
|
||||
|
||||
# acvp.train('PongNoFrameskip-v4')
|
||||
|
||||
|
||||
Reference in New Issue
Block a user