|
- import os
- import csv
- import matplotlib.pyplot as plt
- import seaborn as sns
- import numpy as np
-
- sns.set()
- DIRS = []
- sns.set(style='ticks')
- sns.set_palette("Set2")
- sns.set_context("notebook", font_scale=1.5, rc={"lines.linewidth": 2.5, 'lines.markersize': 5.5})
-
-
- def smooth(ys, coff=0.98):
- result = []
- last = ys[0]
- for y in ys:
- last = coff * last + (1 - coff) * y
- result.append(last)
- return result
-
-
- def divide_group(data, coef=0.95):
- env_min = min([episode_data['env'] for episode_data in data])
- env_max = max([episode_data['env'] for episode_data in data])
- x_time = [[] for _ in range(env_min, env_max + 1)]
- x_frame = [[] for _ in range(env_min, env_max + 1)]
- y_score = [[] for _ in range(env_min, env_max + 1)]
- for episode_data in data:
- x_time[episode_data['env']].append(int(episode_data['clocktime'] // 100 * 100.0))
- x_frame[episode_data['env']].append(episode_data['frame'] * (env_max + 1 - env_min))
- y_score[episode_data['env']].append(episode_data['score'])
- # print(y_score)
- # print(x_frame)
- result_time = []
- result_frame = []
- result_score = []
- for i in range(env_min, env_max + 1):
- y_score[i] = smooth(y_score[i], coef)
- result_time.extend(x_time[i])
- result_frame.extend(x_frame[i])
- result_score.extend(y_score[i])
- return result_time, result_frame, result_score
-
-
- ALGOS = ['vpg']
- TASK = 'HalfCheetah-v3'
- PREFIX = "./experiments/"
- fig = plt.figure(figsize=(20, 8.0))
-
- for dirname in os.listdir(PREFIX):
- for algo in ALGOS:
- x_times = []
- x_frames = []
- y_scores = []
- if algo in dirname:
- for subdir_name in os.listdir(PREFIX + dirname + "/"):
- if TASK in subdir_name:
- for data_filename in os.listdir(PREFIX + dirname + "/" + subdir_name):
- if ".npy" in data_filename:
- print(PREFIX + dirname + "/" + subdir_name + "/" + data_filename)
- data = np.load(PREFIX + dirname + "/" + subdir_name + "/" + data_filename,
- allow_pickle=True)
- x_time, x_frame, y_score = divide_group(data)
- x_times.extend(x_time)
- x_frames.extend(x_frame)
- y_scores.extend(y_score)
- ax = plt.subplot(1, 2, 1)
- sns.lineplot(x=x_times, y=y_scores, legend='brief', label=algo)
- ax.set_title("%s-score-time" % TASK)
- ax.set_xlabel("seconds")
- plt.grid(linestyle='-.')
- ax = plt.subplot(1, 2, 2)
- sns.lineplot(x=x_frames, y=y_scores, legend='brief', label=algo)
- ax.set_title("%s-score-frame" % TASK)
- ax.set_xlabel("frames")
- plt.grid(linestyle='-.')
- plt.ticklabel_format(style='sci', scilimits=(0, 1), axis='x')
- plt.savefig("./experiments/" + "%s.pdf" % TASK, dpi=300)
- plt.show()
|