-
Notifications
You must be signed in to change notification settings - Fork 0
/
write_job.py
79 lines (62 loc) · 2.51 KB
/
write_job.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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import dicthash
import json
import numpy as np
import os
import sys
import cgp
sys.path.insert(0, '../../includes/')
import write_job_utils as utils
from operators import Const05Node, Const2Node
if __name__ == '__main__':
params = {
# machine setup
'submit_command': 'sbatch',
'jobfile_template': 'jobfile_template.jdf',
'jobname': 'rrl',
'wall_clock_limit': '24:00:00',
'ntasks': 6,
'cpus-per-task': 4,
'n_nodes': 1,
'mail-user': 'henrik.mettler@unibe.ch',
'account': 'ich029m',
'constraint': 'mc',
'partition': 'normal',
'sim_script': 'main.py',
'dependencies': ['functions.py', 'operators.py', 'network.py'],
# experiment configuration
'seed' : int(sys.argv[1]),
'gamma' : 0.9,
'use_online_init' : True,
'n_episodes' : 1000,
'cum_reward_threshold' : 250000, # empirical value that policy gradient receives after
# ~ 3000 episodes
'n_episodes_reward_expectation': 100,
'population_params': {"n_parents": 1, "seed": 12345},
'ea_params' : {"n_offsprings": 4, "mutation_rate": 0.03, "reorder_genome": True, "n_processes": 1,
"hurdle_percentile": [0.5, 0.0], },
'evolve_params': {"max_time": 84600,}, # 84600s ≃ 23h 30 min
'genome_params' : {
"n_inputs": 4, # reward, el_traces, done (episode termination), expected_cum_reward_episode
"n_outputs": 1,
"n_columns": 300,
"n_rows": 1,
"levels_back": None,
"primitives": (cgp.Mul, cgp.Add, cgp.Sub, cgp.ConstantFloat, Const05Node, Const2Node)
}
}
params['md5_hash_sim_script'] = utils.md5_file(params['sim_script']) # consistency check
params['md5_hash_dependencies'] = [utils.md5_file(fn) for fn in params['dependencies']] # consistency check
key = dicthash.generate_hash_from_dict(params)
params['outputdir'] = os.path.join(os.getcwd(), key)
params['workingdir'] = os.getcwd()
submit_job = True
print('preparing job')
print(' ', params['outputdir'])
utils.mkdirp(params['outputdir'])
utils.write_pickle(params, os.path.join(params['outputdir'], 'params.pickle'))
utils.create_jobfile(params)
utils.copy_file(params['sim_script'], params['outputdir'])
utils.copy_files(params['dependencies'], params['outputdir'])
if submit_job:
print('submitting job')
utils.submit_job(params)