1+ # Merges log files + filters to pareto-optimal points wrt steps, wall-clock, and score. Comment that if you want the full dataset. Also does TSNE, which is why I haven't bothered porting to C.
12import numpy as np
23
34import json
45import glob
56import os
67
7- env_names = sorted ([
8- 'breakout' ,
9- #'impulse_wars',
10- 'pacman' ,
11- 'tetris' ,
12- #'g2048',
13- #'moba',
14- 'pong' ,
15- #'tower_climb',
16- #'grid',
17- 'freeway' ,
18- 'connect4' ,
19- 'nmmo3' ,
20- #'snake',
21- 'tripletriad'
22- ])
23-
248HYPERS = [
259 'train/learning_rate' ,
2610 'train/ent_coef' ,
@@ -147,14 +131,7 @@ def cached_load(path, env_name, cache):
147131
148132 for hyper in HYPERS :
149133 prefix , suffix = hyper .split ('/' )
150- #if prefix not in sweep_metadata:
151- # continue
152-
153134 group = sweep_metadata [prefix ]
154- #if suffix not in group:
155- # continue
156-
157-
158135 key = f'{ prefix } /{ suffix } _norm'
159136 if key not in data :
160137 data [key ] = []
@@ -184,15 +161,12 @@ def cached_load(path, env_name, cache):
184161 del data [k ]
185162
186163 # Format im millions to avoid overfloat in C
187- try :
188- data ['agent_steps' ] = [e / 1e6 for e in data ['agent_steps' ]]
189- except :
190- breakpoint ()
164+ data ['agent_steps' ] = [e / 1e6 for e in data ['agent_steps' ]]
191165 data ['train/total_timesteps' ] = [e / 1e6 for e in data ['train/total_timesteps' ]]
192- #data['metrics/agent_steps'] = [e/1e6 for e in data['metrics/agent_steps']]
193166 del data ['metrics/agent_steps' ]
194167
195168 # Filter to pareto
169+ '''
196170 steps = data['agent_steps']
197171 costs = data['uptime']
198172 scores = data['env/score']
@@ -201,7 +175,8 @@ def cached_load(path, env_name, cache):
201175 try:
202176 data[k] = [data[k][i] for i in idxs]
203177 except IndexError:
204- breakpoint ()
178+ continue
179+ '''
205180
206181 data ['sweep' ] = sweep_metadata
207182 return data
@@ -215,8 +190,10 @@ def compute_tsne():
215190 if os .path .exists (cache_file ):
216191 cache = json .load (open (cache_file , 'r' ))
217192
193+ env_names = sorted (os .listdir ('logs' ))
218194 for env in env_names :
219- all_data [env ] = cached_load (f'logs/puffer_{ env } /*.json' , env , cache )
195+ print ('Loading: ' , env )
196+ all_data [env ] = cached_load (f'logs/{ env } /*.json' , env , cache )
220197
221198 with open (cache_file , 'w' ) as f :
222199 json .dump (cache , f )
@@ -234,49 +211,31 @@ def compute_tsne():
234211
235212 from sklearn .manifold import TSNE
236213 proj = TSNE (n_components = 2 )
237- reduced = None
238- try :
239- reduced = proj .fit_transform (normed )
240- except ValueError :
241- print ('Warning: TSNE failed. Skipping TSNE' )
214+ reduced = proj .fit_transform (normed )
242215
243216 row = 0
244217 for env in env_names :
245218 sz = len (all_data [env ]['agent_steps' ])
246219 all_data [env ]['tsne1' ] = reduced [row :row + sz , 0 ].tolist ()
247220 all_data [env ]['tsne2' ] = reduced [row :row + sz , 1 ].tolist ()
248221
249- '''
250- if reduced is not None:
251- all_data[env]['tsne1'] = reduced[row:row+sz, 0].tolist()
252- all_data[env]['tsne2'] = reduced[row:row+sz, 1].tolist()
253- else:
254- all_data[env]['tsne1'] = np.random.rand(sz).tolist()
255- all_data[env]['tsne2'] = np.random.rand(sz).tolist()
256- '''
257-
258222 row += sz
259- print (f'Env { env } has { sz } points' )
260223
261224 for env in all_data :
262225 dat = all_data [env ]
263226 dat = {k : v for k , v in dat .items () if isinstance (v , list )
264227 and len (v ) > 0 and isinstance (v [0 ], (int , float ))
265228 and (k == 'train/max_grad_norm' or not k .endswith ('_norm' ))}
266229 all_data [env ] = dat
230+ print (f'Env { env } has { len (dat ['env/perf' ])} points' )
267231 for k , v in dat .items ():
268- try :
269- print (f'{ env } /{ k } : { len (v ), min (v ), max (v )} ' )
270- except :
271- print (f'{ env } /{ k } : { len (v )} ' )
232+ if 'env/perf' in k or 'score' in k :
233+ print (f'{ env } /{ k } : min={ min (v )} , max={ max (v )} ' )
272234
273235 for env in all_data :
274236 for k , v in all_data [env ].items ():
275237 if isinstance (v , list ):
276- try :
277- all_data [env ][k ] = ',' .join ([f'{ x :.6g} ' for x in v ])
278- except :
279- breakpoint ()
238+ all_data [env ][k ] = ',' .join ([f'{ x :.6g} ' for x in v ])
280239
281240 json .dump (all_data , open ('resources/constellation/experiments.json' , 'w' ))
282241
0 commit comments