support/gym_remote/client.py (36 lines of code) (raw):

import gym import time from gym_remote import Bridge class RemoteEnv(gym.Env): def __init__(self, directory, tries=8): self.bridge = Bridge(directory) # Try a few times to connect backoff = 2 for x in range(tries): try: self.bridge.connect() break except FileNotFoundError: if x + 1 == tries: raise time.sleep(backoff) backoff *= 2 self.bridge.configure_client() self.ch_ac = self.bridge._channels['ac'] self.ch_ob = self.bridge._channels['ob'] self.ch_reward = self.bridge._channels['reward'] self.ch_done = self.bridge._channels['done'] self.ch_reset = self.bridge._channels['reset'] self.action_space = self.bridge.unwrap(self.ch_ac) self.observation_space = self.bridge.unwrap(self.ch_ob) def step(self, action): self.ch_ac.value = action self.bridge.send() self.bridge.recv() return self.ch_ob.value, self.ch_reward.value, self.ch_done.value, {} def reset(self): self.ch_reset.value = True self.bridge.send() self.bridge.recv() return self.ch_ob.value def close(self): self.bridge.close()