@@ -10,45 +10,49 @@ class ExperimentManagement:
10
10
11
11
def __init__ (self , settings ):
12
12
self .settings = settings
13
- self .dirpath = os .path .join ('experiments' , self .settings .experiment_name )
13
+ manager_folder = os .path .dirname (self .settings .manager )
14
+ self ._experiment_folder = os .path .join (manager_folder , 'data' , self .settings .experiment_name , self .settings .run )
15
+ self ._data_folder = os .path .join (self ._experiment_folder , 'data_fullevolution' )
14
16
15
17
def create_exp_folders (self ):
16
- if os .path .exists (self .dirpath ):
17
- shutil .rmtree (self .dirpath )
18
- os .mkdir (self .dirpath )
19
- os .mkdir (self .dirpath + '/data_fullevolution' )
20
- os .mkdir (self .dirpath + '/data_fullevolution/genotypes' )
21
- os .mkdir (self .dirpath + '/data_fullevolution/phenotypes' )
22
- os .mkdir (self .dirpath + '/data_fullevolution/descriptors' )
23
- os .mkdir (self .dirpath + '/data_fullevolution/fitness' )
24
- os .mkdir (self .dirpath + '/data_fullevolution/phenotype_images' )
25
- os .mkdir (self .dirpath + '/data_fullevolution/failed_eval_robots' )
26
-
27
- def _experiment_folder (self ):
28
- return self .dirpath
29
-
30
- def _data_folder (self ):
31
- return os .path .join (self .dirpath , 'data_fullevolution' )
18
+ if os .path .exists (self .experiment_folder ):
19
+ shutil .rmtree (self .experiment_folder )
20
+ os .makedirs (self .experiment_folder )
21
+ os .mkdir (self .data_folder )
22
+ os .mkdir (os .path .join (self .data_folder , 'genotypes' ))
23
+ os .mkdir (os .path .join (self .data_folder , 'phenotypes' ))
24
+ os .mkdir (os .path .join (self .data_folder , 'descriptors' ))
25
+ os .mkdir (os .path .join (self .data_folder , 'fitness' ))
26
+ os .mkdir (os .path .join (self .data_folder , 'phenotype_images' ))
27
+ os .mkdir (os .path .join (self .data_folder , 'failed_eval_robots' ))
28
+
29
+ @property
30
+ def experiment_folder (self ):
31
+ return self ._experiment_folder
32
+
33
+ @property
34
+ def data_folder (self ):
35
+ return self ._data_folder
32
36
33
37
def export_genotype (self , individual ):
34
38
if self .settings .recovery_enabled :
35
- individual .export_genotype (self ._data_folder () )
39
+ individual .export_genotype (self .data_folder )
36
40
37
41
def export_phenotype (self , individual ):
38
42
if self .settings .export_phenotype :
39
- individual .export_phenotype (self ._data_folder () )
43
+ individual .export_phenotype (self .data_folder )
40
44
41
45
def export_fitnesses (self , individuals ):
42
- folder = self ._data_folder ()
46
+ folder = self .data_folder
43
47
for individual in individuals :
44
48
individual .export_fitness (folder )
45
49
46
50
def export_fitness (self , individual ):
47
- folder = os .path .join (self ._data_folder (), 'fitness' )
51
+ folder = os .path .join (self .data_folder , 'fitness' )
48
52
individual .export_fitness (folder )
49
53
50
54
def export_behavior_measures (self , _id , measures ):
51
- filename = os .path .join (self ._data_folder () , 'descriptors' , f'behavior_desc_{ _id } .txt' )
55
+ filename = os .path .join (self .data_folder , 'descriptors' , f'behavior_desc_{ _id } .txt' )
52
56
with open (filename , "w" ) as f :
53
57
if measures is None :
54
58
f .write (str (None ))
@@ -57,17 +61,17 @@ def export_behavior_measures(self, _id, measures):
57
61
f .write (f"{ key } { val } \n " )
58
62
59
63
def export_phenotype_images (self , dirpath , individual ):
60
- individual .phenotype .render_body (self . _experiment_folder () + '/' + dirpath + f'/ body_{ individual .phenotype .id } .png' )
61
- individual .phenotype .render_brain (self . _experiment_folder () + '/' + dirpath + f'/ brain_{ individual .phenotype .id } ' )
64
+ individual .phenotype .render_body (os . path . join ( self . experiment_folder , dirpath , f' body_{ individual .phenotype .id } .png') )
65
+ individual .phenotype .render_brain (os . path . join ( self . experiment_folder , dirpath , f' brain_{ individual .phenotype .id } .png' ) )
62
66
63
67
def export_failed_eval_robot (self , individual ):
64
- individual .genotype .export_genotype (f' { self . _data_folder () } / failed_eval_robots/ genotype_{ str ( individual .phenotype .id ) } .txt' )
65
- individual .phenotype .save_file (f' { self . _data_folder () } / failed_eval_robots/ phenotype_{ str ( individual .phenotype .id ) } .yaml' )
66
- individual .phenotype .save_file (f' { self . _data_folder () } / failed_eval_robots/ phenotype_{ str ( individual .phenotype .id ) } .sdf' , conf_type = 'sdf' )
68
+ individual .genotype .export_genotype (os . path . join ( self . data_folder , ' failed_eval_robots' , f' genotype_{ individual .phenotype .id } .txt') )
69
+ individual .phenotype .save_file (os . path . join ( self . data_folder , ' failed_eval_robots' , f' phenotype_{ individual .phenotype .id } .yaml') )
70
+ individual .phenotype .save_file (os . path . join ( self . data_folder , ' failed_eval_robots' , f' phenotype_{ individual .phenotype .id } .sdf') , conf_type = 'sdf' )
67
71
68
72
def export_snapshots (self , individuals , gen_num ):
69
73
if self .settings .recovery_enabled :
70
- path = os .path .join (self ._experiment_folder () , f'selectedpop_{ gen_num } ' )
74
+ path = os .path .join (self .experiment_folder , f'selectedpop_{ gen_num } ' )
71
75
if os .path .exists (path ):
72
76
shutil .rmtree (path )
73
77
os .mkdir (path )
@@ -76,9 +80,9 @@ def export_snapshots(self, individuals, gen_num):
76
80
logger .info (f'Exported snapshot { str (gen_num )} with { str (len (individuals ))} individuals' )
77
81
78
82
def experiment_is_new (self ):
79
- if not os .path .exists (self ._experiment_folder () ):
83
+ if not os .path .exists (self .experiment_folder ):
80
84
return True
81
- path , dirs , files = next (os .walk (os .path .join (self ._data_folder () , 'fitness' )))
85
+ path , dirs , files = next (os .walk (os .path .join (self .data_folder , 'fitness' )))
82
86
if len (files ) == 0 :
83
87
return True
84
88
else :
@@ -87,10 +91,10 @@ def experiment_is_new(self):
87
91
def read_recovery_state (self , population_size , offspring_size ):
88
92
snapshots = []
89
93
90
- for r , d , f in os .walk (self ._experiment_folder () ):
94
+ for r , d , f in os .walk (self .experiment_folder ):
91
95
for dir in d :
92
96
if 'selectedpop' in dir :
93
- exported_files = len ([name for name in os .listdir (os .path .join (self ._experiment_folder () , dir )) if os .path .isfile (os .path .join (self ._experiment_folder () , dir , name ))])
97
+ exported_files = len ([name for name in os .listdir (os .path .join (self .experiment_folder , dir )) if os .path .isfile (os .path .join (self .experiment_folder , dir , name ))])
94
98
if exported_files == (population_size * 2 ): # body and brain files
95
99
snapshots .append (int (dir .split ('_' )[1 ]))
96
100
@@ -104,7 +108,7 @@ def read_recovery_state(self, population_size, offspring_size):
104
108
n_robots = 0
105
109
106
110
robot_ids = []
107
- for r , d , f in os .walk (os .path .join (self ._data_folder () , 'fitness' )):
111
+ for r , d , f in os .walk (os .path .join (self .data_folder , 'fitness' )):
108
112
for file in f :
109
113
robot_ids .append (int (file .split ('.' )[0 ].split ('_' )[- 1 ]))
110
114
last_id = np .sort (robot_ids )[- 1 ]
0 commit comments