support/retro_contest/agent.py (48 lines of code) (raw):
import argparse
import gym_remote.exceptions as gre
import gym_remote.client as grc
import os
import sys
import traceback
from pkg_resources import EntryPoint
def make(socketdir='tmp/sock'):
env = grc.RemoteEnv(socketdir)
return env
def run(agent=None, socketdir='tmp/sock', daemonize=False, args=[]):
if daemonize:
pid = os.fork()
if pid > 0:
return
if agent is None:
print('Running agent: random_agent')
agent = random_agent
elif not callable(agent):
print('Running agent: %s' % agent)
entrypoint = EntryPoint.parse('entry=' + agent)
agent = entrypoint.load(False)
else:
print('Running agent: %r' % agent)
env = make(socketdir)
try:
agent(env, *args)
except gre.GymRemoteError:
pass
def random_agent(env, *args):
env.reset()
while True:
action = env.action_space.sample()
try:
ob, reward, done, _ = env.step(action)
except gre.ResetError:
done = True
if done:
env.reset()
def main(argv=sys.argv[1:]):
parser = argparse.ArgumentParser(description='Run support code for OpenAI Retro Contest remote environment')
parser.add_argument('--daemonize', '-d', action='store_true', default=False, help='Daemonize (background) the process')
parser.add_argument('entry', type=str, nargs='?', help='Entry point to create an agent')
parser.add_argument('args', nargs='*', help='Optional arguments to the agent')
args = parser.parse_args(argv)
run(agent=args.entry, daemonize=args.daemonize, args=args.args)
if __name__ == '__main__':
main()