import argparse from numpy import load, ndarray import os parser = argparse.ArgumentParser() parser.add_argument("-f", "--filepath", required=True, help="Specify the file path to the agent.", type=str) args = parser.parse_args() filepath = args.filepath npdata = load(filepath) evaluations = ndarray.tolist(npdata['results']) # print(evaluations) sorted_evals = [] for eval in evaluations: sorted_evals.append(sorted(eval)) # Now I have a sorted list. # Now just pop the first and last elements of each eval for eval in sorted_evals: eval.pop(0) eval.pop() print() # print(sorted_evals) # Now that I have my sorted evaluations, I can calculate the mean episode reward for each eval mean_eval_rewards = [] for eval in sorted_evals: mean_eval_rewards.append(sum(eval) / len(eval)) # Now I should have a list with the mean evaluation reward with the highest and lowest score tossed out print(mean_eval_rewards) print("num evals: " + str(len(mean_eval_rewards))) # I'm dealing with a 2D array. Each element contains an array of ten data points # The number of elements is going to vary for each training run # The number of evaluation episodes will be constant, 10. # I need to convert to a regular list first # I could iterate over each element agent_dirs = [] for d in os.listdir("agents/"): if "dqn_v2" in d: agent_dirs.append(d) # Now I have a list of dirs with the evals. # Iterate over the dirs, append the file path, load the evals, calculate the average score of the eval, then return a list with averages eval_list = [] for d in agent_dirs: path = "agents/" + d + "/evaluations.npz" evals = ndarray.tolist(load(path)["results"]) eval_list.append(evals) # for i in eval_list: # print(i) # print() def remove_outliers(evals: list) -> list: trimmed = [] for eval in evals: eval.sort() eval.pop(0) eval.pop() trimmed.append(eval) return trimmed avgs = [[]] index = 0 for i in eval_list: avgs.append(i) for j in i: j.sort() j.pop() j.pop(0) avgs[index].append(sum(j) / len(j)) index += 1 print(avgs)