forked from openai/random-network-distillation
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathaggregate_runs.py
64 lines (50 loc) · 1.74 KB
/
aggregate_runs.py
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
import sys
import argparse
import pandas as pd
from tqdm import tqdm
parser = argparse.ArgumentParser(description="Aggregate multiple runs of a model")
parser.add_argument("path_list", type=str, nargs="+", default=[],
help="Paths to the progress.csv files")
args = parser.parse_args()
if len(args.path_list) < 2:
print("You need to give at least two paths to progress.csv files,
so that we have something to aggregate")
sys.exit(1)
data_csv = []
for csv_path in args.path_list:
data_csv.append(pd.read_csv(csv_path))
res = data_csv[0].copy()
visited_rooms = set()
def format_rooms(rooms):
# Input rooms are strings: '[1;2;3]'
rooms = rooms.strip("][")
if rooms:
rooms = rooms.split(";")
return rooms
return []
rooms = format_rooms(data_csv[0].rooms.values[-1])
for r in rooms:
visited_rooms.add(r)
for data_cv in tqdm(data_csv[1:], desc="files"):
base_reward = res.rewtotal.values[-1]
base_tcount = res.tcount.values[-1]
highest_reward = res.best_ret.values[-1]
for row in tqdm(data_cv.values, desc="rows", leave=False):
reward = row[43]
if pd.isna(reward):
continue
tcount = row[32]
rooms = format_rooms(row[31])
for r in rooms:
visited_rooms.add(r)
highest_reward = max(row[2], highest_reward)
total_reward = base_reward + reward
total_tcount = base_tcount + tcount
frame = list(row)
frame[2] = highest_reward
frame[8] = len(visited_rooms)
frame[43] = total_reward
frame[32] = total_tcount
df = pd.DataFrame([frame], columns=list(data_csv[0].columns))
res = res.append(df, ignore_index=True)
res.to_csv("aggregated_progress.csv")