コード例 #1
0
def run_experiment(configpath: str, random_seed: int, noconfig: bool):
    """
    Runs one experiment and saves results and plots

    :param configpath: path to configfile
    :param noconfig: whether to override config
    :return: (train_csv_path, eval_csv_path)
    """
    if configpath is not None and not noconfig:
        if not os.path.exists(configpath):
            write_default_config()
        config = util.read_config(configpath)
    else:
        config = default_config()
    time_str = str(time.time())
    util.create_artefact_dirs(config.output_dir, random_seed)
    logger = util.setup_logger("dqn_vs_random_defense-v4",
                               config.output_dir + "/results/logs/" +
                               str(random_seed) + "/",
                               time_str=time_str)
    config.q_agent_config.save_dir = default_output_dir(
    ) + "/results/data/" + str(random_seed) + "/"
    config.q_agent_config.video_dir = default_output_dir(
    ) + "/results/videos/" + str(random_seed) + "/"
    config.q_agent_config.gif_dir = default_output_dir(
    ) + "/results/gifs/" + str(random_seed) + "/"
    config.q_agent_config.dqn_config.tensorboard_dir = default_output_dir() + "/results/tensorboard/" \
                                                       + str(random_seed) + "/"
    config.logger = logger
    config.q_agent_config.logger = logger
    config.q_agent_config.random_seed = random_seed
    config.random_seed = random_seed
    config.q_agent_config.to_csv(config.output_dir +
                                 "/results/hyperparameters/" +
                                 str(random_seed) + "/" + time_str + ".csv")
    train_result, eval_result = Runner.run(config)
    train_csv_path = ""
    eval_csv_path = ""
    if len(train_result.avg_episode_steps) > 0 and len(
            eval_result.avg_episode_steps) > 0:
        train_csv_path = config.output_dir + "/results/data/" + str(
            random_seed) + "/" + time_str + "_train" + ".csv"
        train_result.to_csv(train_csv_path)
        eval_csv_path = config.output_dir + "/results/data/" + str(
            random_seed) + "/" + time_str + "_eval" + ".csv"
        eval_result.to_csv(eval_csv_path)
        plot_csv(config, eval_csv_path, train_csv_path, random_seed)

    return train_csv_path, eval_csv_path
コード例 #2
0
        eval_csv_path = config.output_dir + "/results/data/" + str(
            random_seed) + "/" + time_str + "_eval" + ".csv"
        eval_result.to_csv(eval_csv_path)
        plot_csv(config, eval_csv_path, train_csv_path, random_seed)

    return train_csv_path, eval_csv_path


# Program entrypoint
if __name__ == '__main__':
    args = util.parse_args(default_config_path())
    experiment_title = "Q-learning vs Q-learning"
    if args.configpath is not None and not args.noconfig:
        if not os.path.exists(args.configpath):
            write_default_config()
        config = util.read_config(args.configpath)
    else:
        config = default_config()
    if args.plotonly:
        base_dir = default_output_dir() + "/results/data/"
        train_csv_paths = []
        eval_csv_paths = []
        if config.run_many:
            for seed in config.random_seeds:
                train_csv_path = glob.glob(base_dir + str(seed) +
                                           "/*_train.csv")[0]
                eval_csv_path = glob.glob(base_dir + str(seed) +
                                          "/*_eval.csv")[0]
                attack_stats_csv_path = None
                try:
                    attack_stats_csv_paths = glob.glob(base_dir + str(seed) +