Skip to content

Commit ffb6249

Browse files
committed
#44 cutom gen_creator added to the Application constructor parameters
1 parent 96f7ddd commit ffb6249

File tree

4 files changed

+44
-6
lines changed

4 files changed

+44
-6
lines changed

MLC/Application.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ class MLC_CALLBACKS:
1919

2020
class Application(object):
2121

22-
def __init__(self, simulation, callbacks={}):
22+
def __init__(self, simulation, callbacks={}, gen_creator=None):
2323
self._config = Config.get_instance()
2424

2525
self._simulation = simulation
@@ -38,8 +38,11 @@ def __init__(self, simulation, callbacks={}):
3838
self.__badvalues_elim = self._config.get('EVALUATOR', 'badvalues_elim')
3939

4040
# Gen creator
41-
gen_method = self._config.get('GP', 'generation_method')
42-
self._gen_creator = CreationFactory.make(gen_method)
41+
if gen_creator is None:
42+
gen_method = self._config.get('GP', 'generation_method')
43+
self._gen_creator = CreationFactory.make(gen_method)
44+
else:
45+
self._gen_creator = gen_creator
4346

4447
# Gen evaluator
4548
ev_method = self._config.get('EVALUATOR', 'evaluation_method')

MLC/Population/Creation/IndividualSelection.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ class IndividualSelection(BaseCreation):
77
Fill a Population with fixed Individuals.
88
99
selected_individuals: dictionary containing {Individual: positions inside
10-
the population}
10+
the first population}
11+
12+
Empty positions inside the Population will be completed using the neighbor individual,
1113
"""
1214

1315
def __init__(self, selected_individuals):
@@ -18,13 +20,14 @@ def __init__(self, selected_individuals):
1820
def create(self, gen_size):
1921
self.__individuals = [-1]*gen_size
2022

23+
# Add Individuals
2124
for individual, positions in self.__selected_individuals.items():
2225
for position in positions:
2326
if position < gen_size:
2427
individual_id, _ = MLCRepository.get_instance().add_individual(individual)
25-
print ">>> ADDING %s to %s -> %s" % (individual.get_value(), individual_id, individual_id)
2628
self.__individuals[position] = individual_id
2729

30+
# Fill empty spaces
2831
for index, indiv_id in enumerate(self.__individuals):
2932
if indiv_id == -1:
3033
if index > 0:

tests/default_test_configuration.ini

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ cascade = 1,1
5151
# evaluation_method = standalone_function
5252
# evaluation_method = standalone_files
5353
evaluation_method = mfile_standalone
54-
evaluation_function = toy_problem
54+
evaluation_function = toy_problem_python_ev
5555
# evaluation_function = toy_problem_python_ev
5656
indfile = ind.dat
5757
Jfile = J.dat

tests/mlc/test_application.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import os
33
import unittest
44

5+
from MLC.Population.Creation import BaseCreation
56
from tests.test_helpers import TestHelper
67
from MLC.config import get_working_directory
78
from MLC.config import get_test_path
@@ -106,3 +107,34 @@ def test_on_start_callback_increment_2():
106107

107108
self.assertEqual(ApplicationTest.on_start, 1)
108109
self.assertEqual(ApplicationTest.on_start_counter_2, 1)
110+
111+
def test_set_custom_gen_creator(self):
112+
with saved(Config.get_instance()) as config:
113+
Config.get_instance().set("POPULATION", "size", "5")
114+
Config.get_instance().set("BEHAVIOUR", "save", "false")
115+
116+
from MLC.Population.Creation.BaseCreation import BaseCreation
117+
from MLC.individual.Individual import Individual
118+
119+
class TestCreator(BaseCreation):
120+
def __init__(self):
121+
BaseCreation.__init__(self)
122+
123+
def create(self, gen_size):
124+
MLCRepository.get_instance().add_individual(Individual("(root 1)"))
125+
MLCRepository.get_instance().add_individual(Individual("(root 2)"))
126+
MLCRepository.get_instance().add_individual(Individual("(root 3)"))
127+
MLCRepository.get_instance().add_individual(Individual("(root 4)"))
128+
MLCRepository.get_instance().add_individual(Individual("(root 5)"))
129+
130+
def individuals(self):
131+
return [(0, 1), (1, 2), (2, 3), (3, 4), (4, 5)]
132+
133+
simulation = Simulation("")
134+
mlc = Application(simulation, gen_creator=TestCreator())
135+
mlc.go(to_generation=1)
136+
137+
# Assert first Population was filled using the TestCreator
138+
population = MLCRepository.get_instance().get_population(1)
139+
self.assertEqual(population.get_individuals(), [1, 2, 3, 4, 5])
140+

0 commit comments

Comments
 (0)