Skip to content

Commit 30cf92b

Browse files
authored
Merge pull request #35 from Axelrod-Python/add-abilit-to-pass-initial-population
Add ability to pass initial population.
2 parents 46b1a14 + fc85d90 commit 30cf92b

File tree

2 files changed

+21
-3
lines changed

2 files changed

+21
-3
lines changed

src/axelrod_dojo/utils.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ class Population(object):
171171
"""Population class that implements the evolutionary algorithm."""
172172
def __init__(self, params_class, params_args, size, objective, output_filename,
173173
bottleneck=None, opponents=None, processes=1, weights=None,
174-
sample_count=None):
174+
sample_count=None, population=None):
175175
self.params_class = params_class
176176
self.bottleneck = bottleneck
177177
if processes == 0:
@@ -192,7 +192,12 @@ def __init__(self, params_class, params_args, size, objective, output_filename,
192192
PlayerInfo(p.__class__, p.init_kwargs) for p in opponents]
193193
self.generation = 0
194194
self.params_args = params_args
195-
self.population = [params_class(*params_args) for _ in range(self.size)]
195+
196+
if population is not None:
197+
self.population = population
198+
else:
199+
self.population = [params_class(*params_args) for _ in range(self.size)]
200+
196201
self.weights = weights
197202
self.sample_count = sample_count
198203

tests/integration/test_fsm.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,20 @@ def test_score(self):
5959
for parameters in best:
6060
self.assertIsInstance(parameters, dojo.FSMParams)
6161

62-
self.assertEqual(best[0].__repr__(), best_params)
62+
# Test that can use these loaded params in a new algorithm instance
63+
population = dojo.Population(params_class=dojo.FSMParams,
64+
params_args=(num_states, mutation_rate),
65+
size=size,
66+
objective=objective,
67+
output_filename=self.temporary_file.name,
68+
opponents=opponents,
69+
population=best,
70+
bottleneck=2,
71+
processes=1)
72+
generations = 4
73+
axl.seed(0)
74+
population.run(generations)
75+
self.assertEqual(population.generation, 4)
6376

6477
def test_score_with_weights(self):
6578
name = "score"

0 commit comments

Comments
 (0)