Skip to content

Commit 4535bc5

Browse files
author
Ezequiel Torres
committed
Added the first individuals to the experiment
* If there are individuals to be inserted in the first population, a custom gen_creator is created and set as a parameter to the MLCLocal model class #48
1 parent cb20780 commit 4535bc5

File tree

6 files changed

+52
-14
lines changed

6 files changed

+52
-14
lines changed

MLC/GUI/Experiment/ExperimentInProgress.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,8 @@ class ExperimentInProgress(Thread):
210210

211211
def __init__(self, mlc_local, experiment_name,
212212
to_gen, from_gen, chart_params,
213-
parent_signal, parent=None):
213+
parent_signal, gen_creator=None,
214+
parent=None):
214215
Thread.__init__(self)
215216

216217
self._mlc_local = mlc_local
@@ -247,11 +248,15 @@ def __init__(self, mlc_local, experiment_name,
247248
self._dialog.add_experiment_data(self._amount_gens, self._indivs_per_gen)
248249
self._dialog.show()
249250

251+
# Individuals to be inserted in the first generation
252+
self._gen_creator = gen_creator
253+
250254
def run(self):
251255
logger.debug('{0} [RUN] - Executing Thread mainloop'.format(self._log_prefix))
252256
try:
253257
self._mlc_local.go(self._experiment_name, self._to_gen,
254-
self._from_gen, self._callbacks)
258+
self._from_gen, self._callbacks,
259+
self._gen_creator)
255260
except ThreadCancelException, err:
256261
logger.info('{0} [RUN] - Thread was cancelled by the user'
257262
.format(self._log_prefix))

MLC/GUI/Experiment/ExperimentWindow.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -117,10 +117,12 @@ def on_start_button_clicked(self):
117117
to_gen = int(self._autogenerated_object.to_gen_combo.currentText())
118118
number_of_gens = self._mlc_local.get_experiment_info(self._experiment_name)["generations"]
119119

120+
gen_creator = None
120121
if number_of_gens == 0:
121122
from_gen = 0
122123
# Hide the first individuals tab
123124
self._autogenerated_object.tabWidget.setTabEnabled(3, False)
125+
gen_creator = self._first_indivs_manager.get_gen_creator()
124126

125127
# Check if the experiment range is ok
126128
if to_gen <= from_gen:
@@ -157,7 +159,8 @@ def on_start_button_clicked(self):
157159
to_gen=to_gen,
158160
from_gen=from_gen,
159161
chart_params=self._chart_conf.chart_params(),
160-
parent_signal=self.experiment_finished)
162+
parent_signal=self.experiment_finished,
163+
gen_creator=gen_creator)
161164

162165
progress_dialog.start()
163166
self._progress_dialog = progress_dialog
@@ -469,7 +472,7 @@ def _db_view_edited(self, left, right):
469472
'Edition was canceled. Cell({1}, {2}) - Old value: {3}'
470473
.format(self._experiment_name, left.row(),
471474
left.column(), old_value))
472-
table_model.set_data(left.row(), left.column(), str(old_value))
475+
table_model.set_data(left.row(), left.column(), old_value)
473476
else:
474477
value = table_model.get_data(left.row(), left.column())
475478

@@ -484,7 +487,7 @@ def _db_view_edited(self, left, right):
484487
old_value = self._get_db_view_stored_value(model_index=left,
485488
table_model=table_model,
486489
indiv_id=indiv_id)
487-
table_model.set_data(left.row(), left.column(), str(old_value))
490+
table_model.set_data(left.row(), left.column(), old_value)
488491
return
489492

490493
logger.info('[EXPERIMENT {0}] [DB_VIEW_EDITED] - '
@@ -532,7 +535,7 @@ def _update_individuals_per_generation_list(self):
532535

533536
for pop_index in xrange(1, indivs_per_gen + 1):
534537
indiv_index = pop_individuals[pop_index - 1]
535-
indiv_cost = str(costs[pop_index - 1])
538+
indiv_cost = costs[pop_index - 1]
536539
indiv_value = individuals[indiv_index].get_value()
537540
indiv_appearences = individuals[indiv_index].get_appearances()
538541

@@ -552,7 +555,9 @@ def _load_experiment_config(self):
552555
config_table = self._autogenerated_object.config_table
553556
config_table.setModel(table_model)
554557
config_table.resizeColumnsToContents()
558+
# config_table.setVisible(False)
555559
config_table.setSortingEnabled(True)
560+
# config_table.setVisible(True)
556561
config_table.setEditTriggers(QAbstractItemView.DoubleClicked)
557562
table_model.set_editable_columns(editable_columns)
558563
table_model.set_data_changed_callback(self._config_table_edited)
@@ -605,6 +610,7 @@ def _update_experiment_info(self):
605610
db_view = self._autogenerated_object.db_view
606611
db_view.setModel(table_model)
607612
db_view.resizeColumnsToContents()
613+
db_view.resizeColumnsToContents()
608614
db_view.setSortingEnabled(True)
609615
table_model.set_editable_columns(editable_columns)
610616
table_model.set_data_changed_callback(self._db_view_edited)

MLC/GUI/Experiment/FirstIndividualsManager.py

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,15 @@
33
from MLC.individual.Individual import Individual
44
from MLC.mlc_parameters.mlc_parameters import Config
55
from MLC.Population.Evaluation.EvaluatorFactory import EvaluatorFactory
6+
7+
from MLC.Population.Creation.IndividualSelection import IndividualSelection
8+
from MLC.Population.Creation.CreationFactory import CreationFactory
69
from PyQt5.QtWidgets import QInputDialog
710
from PyQt5.QtWidgets import QMessageBox
811

912
logger = get_gui_logger()
1013

14+
1115
class FirstIndividualsManager(object):
1216

1317
def __init__(self, parent, experiment_name, autogenerated_object, mlc_local):
@@ -64,6 +68,27 @@ def modify_individual(self, indiv_index):
6468
def remove_individual(self, indiv_index):
6569
pass
6670

71+
def get_gen_creator(self):
72+
"""
73+
Return an IndividualSelection creator if the user added individuals
74+
manually.
75+
Return None if this was not the case
76+
"""
77+
if not self._individuals:
78+
logger.info("[FIRST_INDIV] No individual")
79+
return None
80+
81+
gen_method = Config.get_instance().get('GP', 'generation_method')
82+
fill_creator = CreationFactory.make(gen_method)
83+
84+
# Creat the dictionary of individuals
85+
indivs_dict = {}
86+
for index in xrange(len(self._individuals)):
87+
indiv = Individual(self._individuals[index])
88+
indivs_dict[indiv] = [index]
89+
90+
return IndividualSelection(indivs_dict, fill_creator)
91+
6792
def _load_table(self):
6893
header = ['Index', 'Value']
6994

@@ -78,9 +103,11 @@ def _load_table(self):
78103
parent=self._parent)
79104

80105
self._first_indivs_table.setModel(table_model)
106+
self._first_indivs_table.setDisabled(False)
107+
self._first_indivs_table.setVisible(False)
81108
self._first_indivs_table.resizeColumnsToContents()
109+
self._first_indivs_table.setVisible(True)
82110
self._first_indivs_table.setSortingEnabled(True)
83-
self._first_indivs_table.setDisabled(False)
84111

85112
def _test_individual_value(self, indiv_value):
86113
"""

MLC/GUI/Tables/ConfigTableModel.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,3 @@ def get_data(self, row, col):
110110

111111
def set_data_changed_callback(self, callback):
112112
self.dataChanged.connect(callback)
113-
114-
def update_layout(self):
115-
self.layoutAboutToBeChanged.emit()
116-
self.layoutChanged.emit()

MLC/api/MLCLocal.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,8 @@ def get_experiment_info(self, experiment_name):
219219
experiment_info["best_indiv_value"] = min_indiv_data.get_value()
220220
return experiment_info
221221

222-
def go(self, experiment_name, to_generation, from_generation=0, callbacks={}):
222+
def go(self, experiment_name, to_generation, from_generation=0,
223+
callbacks={}, gen_creator=None):
223224
if experiment_name not in self._experiments:
224225
raise ExperimentNotExistException(experiment_name)
225226

@@ -231,7 +232,7 @@ def go(self, experiment_name, to_generation, from_generation=0, callbacks={}):
231232
simulation = experiment.get_simulation()
232233

233234
# launch simulation
234-
app = Application(simulation, callbacks=callbacks)
235+
app = Application(simulation, callbacks=callbacks, gen_creator=gen_creator)
235236
app.go(from_generation=from_generation, to_generation=to_generation)
236237

237238
return True

MLC/api/mlc.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,12 +157,15 @@ def set_experiment_configuration(self, experiment_name, configuration):
157157
"""
158158
raise NotImplementedError("MLC::set_experiment_configuration not implemented")
159159

160-
def go(self, experiment_name, to_generation, from_generation=None):
160+
def go(self, experiment_name, to_generation,
161+
from_generation=0, callbacks={}, gen_creator=None):
161162
"""
162163
Execute experiments until to_generation generations are reached.
163164
:param experiment_name:
164165
:param to_generation: final generation.
165166
:param from_generation: initial generation.
167+
:param callbacks: Callbacks to be triggered in special moments of the experiment
168+
:param gen_creator: Modified gen_creator to add individuals manually
166169
:return:
167170
"""
168171
raise NotImplementedError("MLC::go not implemented")

0 commit comments

Comments
 (0)