Source code for rog_rl.benchmark
#! ~/anaconda3/envs/epirl/bin/python
import time
from rog_rl import RogSimEnv
import cProfile
import pstats
'''
Benchmark env time
Code adapted from
https://github.com/maximecb/gym-miniworld/blob/master/benchmark.py
'''
render_profile_file = 'profile_stats_render'
[docs]def performance_metrics(render_on=False):
st = time.time()
env_config = dict(use_renderer=True)
'''
To compare against standard envs like cartpole
'''
# import gym
# env = gym.make('CartPole-v0')
env = RogSimEnv(env_config)
env.reset()
load_time = 1000 * (time.time() - st)
# Benchmark the reset time
st = time.time()
for i in range(3):
env.reset()
reset_time = 1000 * (time.time() - st) / 3
# Benchmark the rendering/update speed
st = time.time()
for i in range(1):
# Profile the code
if render_on:
cProfile.runctx('env.render()', globals(), locals(),
filename=render_profile_file)
else:
env.render()
render_time = 1000_000 * (time.time() - st) / 1
num_frames = 0
st = time.time()
while True:
dt = time.time() - st
if dt > 1:
break
# Slow movement speed to minimize resets
obs, reward, done, info = env.step(env.action_space.sample())
if done:
env.reset()
num_frames += 1
fps = num_frames / dt
frame_time = 1000 * dt / num_frames
print()
print('load time: {:,.1f} ms'.format(int(load_time)))
print('reset time: {:,.1f} ms'.format(reset_time))
print('render time: {:,.1f} ms'.format(render_time)) # \u03BCs'
print('frame time: {:,.1f} ms'.format(frame_time))
print('frame rate: {:,.1f} FPS'.format(fps))
env.close()
if render_on:
profile(render_profile_file)
'''
View profile stats by Cumulative Time
'''
[docs]def profile(filename):
p = pstats.Stats(filename)
# p.strip_dirs().sort_stats(-1).print_stats()
# p.print_stats()
p.sort_stats('cumulative').print_stats(10)
if __name__ == "__main__":
performance_metrics()