Ejemplo n.º 1
0
def draw_reject_ratio(settings, save_path):
    project_root = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir))
    log_name = "log"
    parser_func = parse_reject_ratio
    path_formatters = []

    config_files, runs, num_datapoints, labels = [], [], [], []
    for cfg, param_setting, num_runs, num_steps, label in settings:
        config_files.append((cfg, param_setting))
        runs.append(num_runs)
        num_datapoints.append(num_steps)
        labels.append(label)

    for cf, best_setting in config_files:
        swp = Sweeper(os.path.join(project_root, '/'.join(cf.split("/")[:-1])))
        cfg = swp.parse(best_setting)      # Creating a cfg with an arbitrary run id
        cfg.data_root = os.path.join(project_root, 'data', 'output')
        logdir_format = cfg.get_logdir_format()
        path_format = os.path.join(logdir_format, log_name
                                   )
        path_formatters.append(path_format + '/' + cf.split("/")[-1])

    v = RunLines(path_formatters, runs, num_datapoints,
                 labels, parser_func=parser_func,
                 save_path=save_path, xlabel="Number of steps in 10000s", ylabel="Reject Ratio",
                 interval=10000, ylim=(0, 1.2))
    v.draw()
Ejemplo n.º 2
0
def draw_lunar_lander_dqn(settings, save_path, max_steps=2000000):
    project_root = os.path.abspath(
        os.path.join(os.path.dirname(__file__), os.pardir))
    log_name = "log"
    parser_func = parse_steps_log
    path_formatters = []

    config_files, runs, num_datapoints, labels = [], [], [], []
    for cfg, param_setting, num_runs, num_steps, label in settings:
        config_files.append((cfg, param_setting))
        runs.append(num_runs)
        num_datapoints.append(num_steps)
        labels.append(label)

    for cf, best_setting in config_files:
        swp = Sweeper(os.path.join(project_root, cf))
        cfg = swp.parse(
            best_setting)  # Creating a cfg with an arbitrary run id
        cfg.data_root = os.path.join(project_root, 'data', 'output')
        logdir_format = cfg.get_logdir_format()
        path_format = os.path.join(logdir_format, log_name)
        path_formatters.append(path_format)

    v = RunLines(path_formatters,
                 runs,
                 num_datapoints,
                 labels,
                 parser_func=parser_func,
                 save_path=save_path,
                 xlabel="Number of steps",
                 ylabel="Reward",
                 interval=10000)
    v.draw()
Ejemplo n.º 3
0
def _eval_lines(config_file, start_idx, end_idx, max_steps, interval=10000):
    print('config_file: {}'.format(config_file))
    project_root = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir))
    sweeper = Sweeper(os.path.join(project_root, config_file))
    eval = []
    eval_lines = []
    for k in range(sweeper.total_combinations):
        eval.append([])
        eval_lines.append([])

    for idx in range(start_idx, end_idx):
        cfg = sweeper.parse(idx)
        cfg.data_root = os.path.join(project_root, 'data', 'output')
        log_dir = cfg.get_logdir()
        log_path = os.path.join(log_dir, 'log')
        try:
            with open(log_path, "r") as f:
                lines = f.readlines()
        except FileNotFoundError:
            continue
        if len(lines) == 0:
            continue
        # ugly parse based on the log_file format
        try:
            num_steps = get_max_steps(lines)
            if num_steps >= max_steps:
                assert idx % sweeper.total_combinations == cfg.param_setting
                avg_eval_steps = extract_line(lines, max_steps, interval=interval)
                eval[idx % sweeper.total_combinations].append(np.mean(avg_eval_steps[-int(len(avg_eval_steps)/2):]))

        except IndexError:
            print(idx)
            raise
    summary = list(map(lambda x: (x[0], np.mean(x[1]), np.std(x[1]), len(x[1])), enumerate(eval)))
    summary = [x for x in summary if np.isnan(x[1]) == False]
    # new_summary = []
    # for s in summary:
    #     if np.isnan(s[1]) == False:
    #         new_summary.append(s)
    # print(summary[0])
    # print(new_summary[0])
    # quit()

    summary = sorted(summary, key=lambda s: s[1], reverse=True)

    for idx, mean, std, num_runs in summary:
        print("Param Setting # {:>3d} | Rewards: {:>10.10f} +/- {:>5.2f} ({:>2d} runs) {} | ".format(
            idx, mean, std, num_runs, sweeper.param_setting_from_id(idx)))
Ejemplo n.º 4
0
def draw_lunar_lander_traces_h512(save_path, max_steps=2000000):
    project_root = os.path.abspath(
        os.path.join(os.path.dirname(__file__), os.pardir))
    log_name = "log"
    parser_func = parse_steps_log
    path_formatters = []

    settings = [
        ("experiment/config_files/lunar_lander/sarsa_lmbda/sweep_h512.json", 1,
         5, max_steps, "Sarsa(0)"),
        ("experiment/config_files/lunar_lander/sarsa_lmbda/sweep_h512.json", 4,
         5, max_steps, "Sarsa(0.5)"),
        ("experiment/config_files/lunar_lander/sarsa_lmbda/sweep_h512.json", 7,
         5, max_steps, "Sarsa(0.7)"),
        ("experiment/config_files/lunar_lander/sarsa_lmbda/sweep_h512.json",
         11, 5, max_steps, "Sarsa(0.85)"),
        ("experiment/config_files/lunar_lander/sarsa_lmbda/sweep_h512.json",
         14, 5, max_steps, "Sarsa(0.9)")
    ]
    config_files, runs, num_datapoints, labels = [], [], [], []
    for cfg, param_setting, num_runs, num_steps, label in settings:
        config_files.append((cfg, param_setting))
        runs.append(num_runs)
        num_datapoints.append(num_steps)
        labels.append(label)

    for cf, best_setting in config_files:
        swp = Sweeper(os.path.join(project_root, cf))
        cfg = swp.parse(
            best_setting)  # Creating a cfg with an arbitrary run id
        cfg.data_root = os.path.join(project_root, 'data', 'output')
        logdir_format = cfg.get_logdir_format()
        path_format = os.path.join(logdir_format, log_name)
        path_formatters.append(path_format)

    v = RunLines(path_formatters,
                 runs,
                 num_datapoints,
                 labels,
                 parser_func=parser_func,
                 save_path=save_path,
                 xlabel="Number of steps",
                 ylabel="Episodes Completed",
                 interval=10000)
    v.draw()
Ejemplo n.º 5
0
def run():
    start = time.time()

    parser = argparse.ArgumentParser(description="run_file")
    parser.add_argument('--idx',
                        default=0,
                        type=int,
                        help='identifies run number and configuration')
    parser.add_argument('--config-file',
                        default='config_files/actor_critic.json')

    args = parser.parse_args()
    project_root = os.path.abspath(os.path.join(os.path.dirname(__file__)))
    sweeper = Sweeper(os.path.join(project_root, args.config_file))
    cfg = sweeper.parse(args.idx)

    cfg.env_instance = MountainCar(cfg)
    agent_class = getattr(agents.agent, cfg.agent_class)
    agent = agent_class(cfg)

    log_dir = cfg.get_logdir()
    ensure_dirs([log_dir])
    steps_log = os.path.join(log_dir, 'steps_log')
    steps_logger = setup_logger(steps_log, stdout=True)
    cfg.log_config(steps_logger)
    ep_log = os.path.join(log_dir, 'ep_log')
    ep_logger = setup_logger(ep_log, stdout=False)
    cfg.log_config(ep_logger)

    exp = Experiment(agent,
                     cfg.env_instance,
                     max_steps=cfg.max_steps,
                     seed=args.idx,
                     steps_log=steps_log,
                     ep_log=ep_log)
    exp.run_step_mode()

    print("Memory used: {:5} MB".format(memory_usage_psutil()))
    print("Time elapsed: {:5.2} minutes".format((time.time() - start) / 60))
Ejemplo n.º 6
0
def draw_mountain_car(save_path):
    project_root = os.path.abspath(
        os.path.join(os.path.dirname(__file__), os.pardir))
    log_name = "log"
    parser_func = parse_steps_log
    path_formatters = []

    settings = [
        ("experiment/config_files/mountain_car/sarsa/sweep.json", 12, 3,
         300000, "Sarsa(0)"),
    ]

    config_files, runs, num_datapoints, labels = [], [], [], []
    for cfg, param_setting, num_runs, num_steps, label in settings:
        config_files.append((cfg, param_setting))
        runs.append(num_runs)
        num_datapoints.append(num_steps)
        labels.append(label)

    for cf, best_setting in config_files:
        swp = Sweeper(os.path.join(project_root, cf))
        cfg = swp.parse(
            best_setting)  # Creating a cfg with an arbitrary run id
        cfg.data_root = os.path.join(project_root, 'data', 'output')
        logdir_format = cfg.get_logdir_format()
        path_format = os.path.join(logdir_format, log_name)
        path_formatters.append(path_format)

    v = RunLines(path_formatters,
                 runs,
                 num_datapoints,
                 labels,
                 parser_func=parser_func,
                 save_path=save_path,
                 xlabel="Number of steps",
                 ylabel="Reward",
                 interval=10000)
    v.draw()
Ejemplo n.º 7
0
if __name__ == '__main__':

    start_idx = 0
    end_idx = 640
    config_file = 'config_files/sw_actor_critic.json'
    max_steps = 40000

    project_root = os.path.abspath(os.path.join(os.path.dirname(__file__)))
    sweeper = Sweeper(os.path.join(project_root, config_file))
    eval = []
    for k in range(sweeper.total_combinations):
        eval.append([])

    for idx in range(start_idx, end_idx):
        cfg = sweeper.parse(idx)
        log_dir = cfg.get_logdir()
        log_path = os.path.join(log_dir, 'steps_log')
        with open(log_path, "r") as f:
            lines = f.readlines()

        if len(lines) == 0:
            continue
        # ugly parse based on the log_file format
        num_steps = int(lines[-1].split("|")[1].split(":")[1])
        episodes = int(lines[-1].split("|")[2].split(":")[1])
        if cfg.max_steps == num_steps:
            assert idx % sweeper.total_combinations == cfg.param_setting
            eval[idx % sweeper.total_combinations].append(episodes)

    summary = list(
Ejemplo n.º 8
0
    return eps_over_time


if __name__ == '__main__':

    project_root = os.path.abspath(
        os.path.join(os.path.dirname(__file__), os.pardir))
    log_name = "ep_log"
    parser_func = parse_ep_log if log_name == "ep_log" else parse_steps_log
    path_formatters = []

    config_files = [("config_files/sw_actor_critic.json", 13)]

    for cf, best_setting in config_files:
        swp = Sweeper(os.path.join(project_root, cf))
        cfg = swp.parse(
            best_setting)  # Creating a cfg with an arbitrary run id
        logdir_format = cfg.get_logdir_format()
        path_format = os.path.join(logdir_format, log_name)
        path_formatters.append(path_format)

    runs = [10]
    num_datapoints = [40000]
    labels = ['Actor-Critic']
    v = RunLines(path_formatters,
                 runs,
                 num_datapoints,
                 labels,
                 parser_func=parser_func,
                 save_path="mountain_car.png",
                 xlabel="Number of steps",
                 ylabel="Episodes Completed")