forked from SilentSys/orhelper
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathplotdata.py
More file actions
144 lines (124 loc) · 7.07 KB
/
plotdata.py
File metadata and controls
144 lines (124 loc) · 7.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
import os
import json
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import sem, t
# Directory containing the JSON files
data_dir = "evolve_rockets_output"
# File patterns for both algorithms
cma_pattern = "cma_me_imp_stabilitynose_altitude_{}_metrics.json"
map_elites_pattern = "map_elites_stabilitynose_altitude_{}_metrics.json"
cma_mae_pattern = "cma_mae_stabilitynose_altitude_{}_metrics.json"
# Number of files to process for each algorithm
num_files = 30
# Lists to store data for each algorithm
cma_coverage_data = []
map_elites_coverage_data = []
cma_mae_coverage_data = []
cma_qd_score_data = []
map_elites_qd_score_data = []
cma_mae_qd_score_data = []
# Load data from CMA-ME files
for i in range(num_files):
cma_file_path = os.path.join(data_dir, cma_pattern.format(i))
with open(cma_file_path, 'r') as f:
cma_data = json.load(f)
cma_coverage_data.append(cma_data["Archive Coverage"]["y"])
cma_qd_score_data.append(cma_data["QD Score"]["y"])
# Load data from CMA-MAE files
for i in range(num_files):
cma_mae_file_path = os.path.join(data_dir, cma_mae_pattern.format(i))
with open(cma_mae_file_path, 'r') as f:
cma_mae_data = json.load(f)
cma_mae_coverage_data.append(cma_mae_data["Archive Coverage"]["y"])
cma_mae_qd_score_data.append(cma_mae_data["QD Score"]["y"])
# Load data from MAP-Elites files
for i in range(num_files):
map_elites_file_path = os.path.join(data_dir, map_elites_pattern.format(i))
with open(map_elites_file_path, 'r') as f:
map_elites_data = json.load(f)
map_elites_coverage_data.append(map_elites_data["Archive Coverage"]["y"])
map_elites_qd_score_data.append(map_elites_data["QD Score"]["y"])
# Convert lists to numpy arrays for easier manipulation
cma_coverage_data = np.array(cma_coverage_data)
map_elites_coverage_data = np.array(map_elites_coverage_data)
cma_mae_coverage_data = np.array(cma_mae_coverage_data)
cma_qd_score_data = np.array(cma_qd_score_data)
map_elites_qd_score_data = np.array(map_elites_qd_score_data)
cma_mae_qd_score_data = np.array(cma_mae_qd_score_data)
# Function to calculate means and 95% confidence intervals
def calculate_mean_and_ci(data):
mean_values = np.mean(data, axis=0)
ci_values = sem(data, axis=0) * t.ppf((1 + 0.95) / 2, data.shape[0] - 1)
return mean_values, ci_values
# Calculate means and confidence intervals for both algorithms
cma_coverage_mean, cma_coverage_ci = calculate_mean_and_ci(cma_coverage_data)
map_elites_coverage_mean, map_elites_coverage_ci = calculate_mean_and_ci(map_elites_coverage_data)
cma_mae_coverage_mean, cma_mae_coverage_ci = calculate_mean_and_ci(cma_mae_coverage_data)
cma_qd_score_mean, cma_qd_score_ci = calculate_mean_and_ci(cma_qd_score_data)
map_elites_qd_score_mean, map_elites_qd_score_ci = calculate_mean_and_ci(map_elites_qd_score_data)
cma_mae_qd_score_mean, cma_mae_qd_score_ci = calculate_mean_and_ci(cma_mae_qd_score_data)
# X values (assumed to be the same across all files)
x_values = cma_data["Archive Coverage"]["x"]
# Configure matplotlib to embed fonts in the PDF
plt.rcParams['pdf.fonttype'] = 42
# Increase font sizes
plt.rcParams.update({'font.size': 14})
# Fixed left margin to ensure consistent plot box width
left_margin = 0.15 # Adjust this value if necessary
# Plot Archive Coverage comparison
plt.figure(figsize=(10, 6))
plt.plot(x_values, cma_coverage_mean, label="CMA-ME", color="blue")
plt.fill_between(x_values, cma_coverage_mean - cma_coverage_ci, cma_coverage_mean + cma_coverage_ci, color="blue", alpha=0.2)
plt.plot(x_values, cma_mae_coverage_mean, label="CMA-MAE", color="red")
plt.fill_between(x_values, cma_mae_coverage_mean - cma_mae_coverage_ci, cma_mae_coverage_mean + cma_mae_coverage_ci, color="red", alpha=0.2)
plt.plot(x_values, map_elites_coverage_mean, label="MAP-Elites", color="green")
plt.fill_between(x_values, map_elites_coverage_mean - map_elites_coverage_ci, map_elites_coverage_mean + map_elites_coverage_ci, color="green", alpha=0.2)
plt.xlabel("Generations", fontsize=20)
plt.ylabel("Average Archive Coverage", fontsize=20)
plt.title("Average Archive Coverage", fontsize=20)
plt.legend(loc="lower right", fontsize=20)
plt.subplots_adjust(left=left_margin)
plt.savefig("Archive_Coverage_Comparison.pdf", bbox_inches='tight')
plt.close()
average_scaling_factor = 10000.0
# Plot QD Score comparison
plt.figure(figsize=(10, 6))
plt.plot(x_values, cma_qd_score_mean, label="CMA-ME", color="blue")
plt.fill_between(x_values, cma_qd_score_mean - cma_qd_score_ci, cma_qd_score_mean + cma_qd_score_ci, color="blue", alpha=0.2)
#plt.plot(x_values, cma_coverage_mean*40*average_scaling_factor, label="CMA-ME", color="blue", ls="--")
plt.plot(x_values, cma_mae_qd_score_mean, label="CMA-MAE", color="red")
plt.fill_between(x_values, cma_mae_qd_score_mean - cma_mae_qd_score_ci, cma_mae_qd_score_mean + cma_mae_qd_score_ci, color="red", alpha=0.2)
#plt.plot(x_values, cma_mae_coverage_mean*40*average_scaling_factor, label="CMA-MAE", color="red", ls="--")
plt.plot(x_values, map_elites_qd_score_mean, label="MAP-Elites", color="green")
plt.fill_between(x_values, map_elites_qd_score_mean - map_elites_qd_score_ci, map_elites_qd_score_mean + map_elites_qd_score_ci, color="green", alpha=0.2)
#plt.plot(x_values, map_elites_coverage_mean*40*average_scaling_factor, label="MAP-Elites", color="green", ls="--")
plt.xlabel("Generations", fontsize=20)
plt.ylabel("Average QD Score", fontsize=20)
plt.title("Average QD Score", fontsize=20)
plt.legend(loc="lower right", fontsize=20)
plt.subplots_adjust(left=left_margin)
plt.savefig("QD_Score_Comparison.pdf", bbox_inches='tight')
plt.close()
# Convert CMA-ME and MAP-Elites Archive Coverage to counts (Occupied Cells)
cma_occupied_cells = cma_coverage_mean * average_scaling_factor
cma_mae_occupied_cells = cma_mae_coverage_mean * average_scaling_factor
map_elites_occupied_cells = map_elites_coverage_mean * average_scaling_factor
# Plot Number of Individuals in Archive (Occupied Cells) comparison
plt.figure(figsize=(10, 6))
plt.plot(x_values, cma_occupied_cells, label="CMA-ME", color="blue")
plt.fill_between(x_values, (cma_occupied_cells - cma_coverage_ci * average_scaling_factor),
(cma_occupied_cells + cma_coverage_ci * average_scaling_factor), color="blue", alpha=0.2)
plt.plot(x_values, cma_mae_occupied_cells, label="CMA-MAE", color="red")
plt.fill_between(x_values, (cma_mae_occupied_cells - cma_mae_coverage_ci * average_scaling_factor),
(cma_mae_occupied_cells + cma_mae_coverage_ci * average_scaling_factor), color="red", alpha=0.2)
plt.plot(x_values, map_elites_occupied_cells, label="MAP-Elites", color="green")
plt.fill_between(x_values, (map_elites_occupied_cells - map_elites_coverage_ci * average_scaling_factor),
(map_elites_occupied_cells + map_elites_coverage_ci * average_scaling_factor), color="green", alpha=0.2)
plt.xlabel("Generations", fontsize=20)
plt.ylabel("Occupied Cells", fontsize=20)
plt.title("Number of Individuals in Archive", fontsize=20)
plt.legend(loc="lower right", fontsize=20)
plt.subplots_adjust(left=left_margin)
plt.savefig("Occupied_Cells_Comparison.pdf", bbox_inches='tight')
plt.close()