|
|
|
""" |
|
Created on Mon Mar 6 16:30:32 2023 |
|
|
|
@author: leona |
|
""" |
|
|
|
import os |
|
import pandas as pd |
|
import matplotlib.pyplot as plt |
|
import seaborn as sns |
|
|
|
|
|
|
|
|
|
def save_graph(): |
|
print("============================================================================================") |
|
|
|
|
|
|
|
|
|
experiment_name = '25items_15machines_t100_i100' |
|
env_name = experiment_name |
|
|
|
rolling_window = 10 |
|
|
|
|
|
figures_dir = "results" |
|
|
|
if not os.path.exists(figures_dir): |
|
os.makedirs(figures_dir) |
|
|
|
|
|
figures_dir = figures_dir + '/' + env_name + '_PPO'+'/' |
|
if not os.path.exists(figures_dir): |
|
os.makedirs(figures_dir) |
|
|
|
|
|
|
|
|
|
BASE_DIR = os.path.dirname(os.path.abspath('__file__')) |
|
|
|
|
|
LOG_DIR = os.path.join(BASE_DIR,'logs') |
|
|
|
log_dir = LOG_DIR + '/' + env_name + '_PPO' + '/' |
|
|
|
|
|
if not os.path.exists(log_dir): |
|
print(f"Directory not found: {log_dir}") |
|
else: |
|
|
|
try: |
|
current_num_files = next(os.walk(log_dir))[2] |
|
print(f"Number of files in the directory: {len(current_num_files)}") |
|
except StopIteration: |
|
print("No files in the directory.") |
|
|
|
num_runs = len(current_num_files)-1 |
|
|
|
all_runs_ppo = [] |
|
|
|
print(num_runs) |
|
|
|
|
|
for run_num in range(num_runs): |
|
run_num = run_num + 1 |
|
log_f_name = log_dir + '/PPO_' + env_name + "_log_" + str(run_num) + ".csv" |
|
print("loading data from : " + log_f_name) |
|
data = pd.read_csv(log_f_name) |
|
data = pd.DataFrame(data) |
|
|
|
print("data shape : ", data.shape) |
|
|
|
all_runs_ppo.append(data) |
|
print("--------------------------------------------------------------------------------------------") |
|
|
|
|
|
df_concat = pd.concat(all_runs_ppo) |
|
|
|
|
|
|
|
df_concat['reward_mean'] = df_concat['reward'].rolling(window=rolling_window, win_type='triang', min_periods=1).mean() |
|
|
|
|
|
df_concat = df_concat.dropna().reset_index(drop=True) |
|
|
|
|
|
reward_mean = df_concat.groupby('timestep')['reward_mean'].mean().iloc[rolling_window:] |
|
reward_std = df_concat.groupby('timestep')['reward_mean'].std().iloc[rolling_window:] |
|
|
|
|
|
sns.set_style("whitegrid") |
|
fig, ax = plt.subplots(figsize=(10, 6)) |
|
|
|
sns.set_style("whitegrid") |
|
|
|
sns.lineplot(x=reward_mean.index, y=reward_mean, ax=ax,label='PPO') |
|
ax.fill_between(reward_mean.index, reward_mean - reward_std, reward_mean + reward_std, alpha=0.2) |
|
|
|
|
|
|
|
|
|
|
|
|
|
log_dir = LOG_DIR + '/' + env_name + '_PDPPO' + '/' |
|
|
|
current_num_files = next(os.walk(log_dir))[2] |
|
num_runs = len(current_num_files)-1 |
|
|
|
all_runs = [] |
|
|
|
for run_num in range(num_runs): |
|
run_num = run_num + 1 |
|
log_f_name = log_dir + 'PDPPO_' + env_name + "_log_" + str(run_num) + ".csv" |
|
print("loading data from : " + log_f_name) |
|
data = pd.read_csv(log_f_name) |
|
data = pd.DataFrame(data) |
|
|
|
print("data shape : ", data.shape) |
|
|
|
all_runs.append(data) |
|
print("--------------------------------------------------------------------------------------------") |
|
|
|
|
|
df_concat = pd.concat(all_runs) |
|
|
|
|
|
df_concat['reward_mean'] = df_concat['reward'].rolling(window=rolling_window, win_type='triang', min_periods=1).mean() |
|
|
|
|
|
df_concat = df_concat.dropna().reset_index(drop=True) |
|
|
|
|
|
reward_mean = df_concat.groupby('timestep')['reward_mean'].mean().iloc[rolling_window:] |
|
reward_std = df_concat.groupby('timestep')['reward_mean'].std().iloc[rolling_window:] |
|
|
|
|
|
sns.lineplot(x=reward_mean.index, y=reward_mean, ax=ax,label='PDPPO') |
|
ax.fill_between(reward_mean.index, reward_mean - reward_std, reward_mean + reward_std, alpha=0.2) |
|
|
|
ax.legend() |
|
|
|
|
|
|
|
|
|
|
|
ax.grid(color='gray', linestyle='-', linewidth=1, alpha=0.2) |
|
|
|
ax.set_xlabel("Timesteps", fontsize=12) |
|
ax.set_ylabel("Rewards", fontsize=12) |
|
|
|
fig = plt.gcf() |
|
|
|
|
|
print("============================================================================================") |
|
fig.savefig(os.path.join(figures_dir, f'{experiment_name}.pdf'), dpi=300, bbox_inches='tight') |
|
print("figure saved at : ", figures_dir) |
|
print("============================================================================================") |
|
|
|
|
|
if __name__ == '__main__': |
|
|
|
save_graph() |