-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathevolve_robot.py
94 lines (84 loc) · 3.2 KB
/
evolve_robot.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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
import json
from datetime import datetime
from numpyencoder import NumpyEncoder
from robot_embryology import RobotEmbryology
from microbial_ga import MicrobialGA
def evolve_robot(controller_1_file=None,
generations_n=10,
individuals_n=6,
gene_transfer_rate=0.5,
mutation_rate=0.05,
save_to_file=True,
store_only_best=False,
interval=100,
dt=0.1,
hidden_nodes=8,
min_stability=None,
run_parallel=False,
replace_rate=0,
ranking_level=0,
use_genotype_file=None,
trials=12,
ignore_inputs=False,
world_params={}):
embryology = RobotEmbryology(controller_1_file=controller_1_file,
dt=dt,
hidden_nodes=hidden_nodes,
interval=interval,
min_stability=min_stability,
use_genotype_file=use_genotype_file,
world_params=world_params,
trials=trials,
ignore_inputs=ignore_inputs)
ga = MicrobialGA(embryology,
generations_n=generations_n,
individuals_n=individuals_n,
gene_transfer_rate=gene_transfer_rate,
mutation_rate=mutation_rate,
run_parallel=run_parallel,
replace_rate=replace_rate,
ranking_level=ranking_level)
ga.run()
data = ga.generations_data
best_solution_fitness = data[-1]['best_individual_fitness']
best_solution_genotype = data[-1]['best_individual_genotype']
print('Best solution was:')
print(best_solution_fitness)
print('Genotype:')
print(best_solution_genotype)
data = {
'best_solution': {
'fitness': best_solution_fitness,
'genotype': best_solution_genotype
},
'run': data,
'settings': {
'ga': {
'generations': generations_n,
'population': individuals_n,
'gene_transfer_rate': gene_transfer_rate,
'mutation_rate': mutation_rate,
'run_parallel': run_parallel,
'replace_rate': replace_rate,
'ranking_level': ranking_level,
},
'embryology': {
'controller_1_file': controller_1_file,
'hidden_nodes': hidden_nodes,
'min_stability': min_stability,
'interval': interval,
'hunger': 'yes',
'both': 'yes',
'trials': trials,
'noise_variation': False,
'ignore_inputs': ignore_inputs,
}
},
}
if save_to_file:
timestamp = datetime.strftime(datetime.now(), '%y_%m_%d__%H_%M_%S')
with open(f'results/run__{timestamp}.json', 'w') as file:
json.dump(data, file, cls=NumpyEncoder)
with open(f'results/best__{timestamp}.json', 'w') as file:
json.dump(data['best_solution'], file, cls=NumpyEncoder)
return data, best_solution_genotype, embryology