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
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) +