예제 #1
0
def main():
    print ("note: 'ulimit -Sn 1024' if Errno 24")
    parser = argparse.ArgumentParser()
    parser.add_argument('--env', default='CartPole-v1')
    parser.add_argument('--seed', type=int, default=417)
    parser.add_argument('--n-timesteps', type=int, default=1e5)
    parser.add_argument('--gamma', type=float, default=0.99)
    parser.add_argument('--max-kl', type=float, default=1e-2)
    parser.add_argument('--log-interval', type=int, default=1e4)
    parser.add_argument('--save-path', default=None)
    parser.add_argument('--batch-size', type=int, default=1)
    parser.add_argument('--cuda', type=bool, default=False)
    parser.add_argument('--update-rule', default='A2C')
    args = parser.parse_args()

    if args.cuda:
        assert torch.cuda.is_available(), 'No available cuda devices'

    envs = [gym.make(args.env) for _ in range(args.batch_size)]
    set_seeds(envs, args.seed, args.cuda)

    agent = Agent(envs[0].observation_space, envs[0].action_space)
    if args.cuda:
        agent.cuda()

    rets = learn(agent, envs, args.update_rule, cuda=args.cuda, n_timesteps=args.n_timesteps, gamma=args.gamma,
          log_interval=args.log_interval, max_kl=args.max_kl)

    torch.save(rets, "./out/{}_{}".format(args.env, args.update_rule))

    if not (args.save_path is None):
        torch.save(agent.state_dict(), args.save_path)