scripts/experiment.py (55 lines of code) (raw):

#!/usr/bin/env python import gym import safety_gym import safe_rl from safe_rl.utils.run_utils import setup_logger_kwargs from safe_rl.utils.mpi_tools import mpi_fork def main(robot, task, algo, seed, exp_name, cpu): # Verify experiment robot_list = ['point', 'car', 'doggo'] task_list = ['goal1', 'goal2', 'button1', 'button2', 'push1', 'push2'] algo_list = ['ppo', 'ppo_lagrangian', 'trpo', 'trpo_lagrangian', 'cpo'] algo = algo.lower() task = task.capitalize() robot = robot.capitalize() assert algo in algo_list, "Invalid algo" assert task.lower() in task_list, "Invalid task" assert robot.lower() in robot_list, "Invalid robot" # Hyperparameters exp_name = algo + '_' + robot + task if robot=='Doggo': num_steps = 1e8 steps_per_epoch = 60000 else: num_steps = 1e7 steps_per_epoch = 30000 epochs = int(num_steps / steps_per_epoch) save_freq = 50 target_kl = 0.01 cost_lim = 25 # Fork for parallelizing mpi_fork(cpu) # Prepare Logger exp_name = exp_name or (algo + '_' + robot.lower() + task.lower()) logger_kwargs = setup_logger_kwargs(exp_name, seed) # Algo and Env algo = eval('safe_rl.'+algo) env_name = 'Safexp-'+robot+task+'-v0' algo(env_fn=lambda: gym.make(env_name), ac_kwargs=dict( hidden_sizes=(256, 256), ), epochs=epochs, steps_per_epoch=steps_per_epoch, save_freq=save_freq, target_kl=target_kl, cost_lim=cost_lim, seed=seed, logger_kwargs=logger_kwargs ) if __name__ == '__main__': import argparse parser = argparse.ArgumentParser() parser.add_argument('--robot', type=str, default='Point') parser.add_argument('--task', type=str, default='Goal1') parser.add_argument('--algo', type=str, default='ppo') parser.add_argument('--seed', type=int, default=0) parser.add_argument('--exp_name', type=str, default='') parser.add_argument('--cpu', type=int, default=1) args = parser.parse_args() exp_name = args.exp_name if not(args.exp_name=='') else None main(args.robot, args.task, args.algo, args.seed, exp_name, args.cpu)