Skip to content

Commit d8a503e

Browse files
committed
Fixes in Experiment range selection
1 parent 722075e commit d8a503e

File tree

3 files changed

+39
-11
lines changed

3 files changed

+39
-11
lines changed

MLC/GUI/Experiment/ExperimentInProgress.py

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ class ExperimentInProgressWindow(QMainWindow):
7777
new_generation = pyqtSignal()
7878
simulation_finished = pyqtSignal()
7979

80-
def __init__(self, parent, parent_signal, chart_params):
80+
def __init__(self, parent, parent_signal, chart_params, from_gen, to_gen):
8181
QMainWindow.__init__(self, parent)
8282
self._autogenerated_object = Ui_ExperimentInProgressWindow()
8383
self._autogenerated_object.setupUi(self)
@@ -96,9 +96,13 @@ def __init__(self, parent, parent_signal, chart_params):
9696
# Signal to be emited when the experiment finished
9797
self._parent_signal = parent_signal
9898

99+
# Original from and to generation
100+
self._from_gen = from_gen + 1
101+
self._to_gen = to_gen
102+
99103
# Individuals Graph data
100104
self._chart_params = chart_params
101-
self._current_generation = 1
105+
self._current_generation = from_gen
102106

103107
# Condition variable used to check when the experiment has been stopped or cancelled
104108
self._experiment_condition = ExperimentCondition()
@@ -138,8 +142,8 @@ def _update_dialog(self, indivs_per_gen_counter, total_indivs_counter, gen_count
138142
gen_progress_bar.setValue(int(float(total_indivs_counter) / self._total_indivs * 100))
139143
gen_progress_bar.valueChanged.emit(int(float(total_indivs_counter) / self._total_indivs * 100))
140144

141-
self._current_generation = gen_counter + 1
142-
gen_label.setText("<b>Generation {0}/{1}</b>".format(gen_counter + 1, self._amount_gens))
145+
self._current_generation = self._from_gen + gen_counter
146+
gen_label.setText("<b>Generation {0}/{1}</b>".format(self._current_generation, self._to_gen))
143147
indiv_label.setText("<b>Individual {0}/{1}</b>".format(indivs_per_gen_counter, self._indivs_per_gen))
144148
self._update_current_gen_experiment(indivs_per_gen_counter, cost)
145149

@@ -162,7 +166,7 @@ def _create_new_chart(self):
162166
# Insert the widget into the widget
163167
picture_layout = self._autogenerated_object.picture_layout
164168

165-
chart_title = 'Generation {0} - Cost Per Individual'.format(self._current_generation)
169+
chart_title = 'Generation {0} - Cost Per Individual'.format(self._current_generation + 1)
166170
chart_font = QFont()
167171
chart_font.setWeight(QFont.ExtraBold)
168172
indiv_chart = QtChartWrapper(show_legend=True)
@@ -212,7 +216,12 @@ def __init__(self, mlc_local, experiment_name,
212216
self._experiment_name = experiment_name
213217
self._experiment_info = self._mlc_local.get_experiment_info(experiment_name)
214218
self._to_gen = to_gen
215-
self._from_gen = from_gen - 1
219+
220+
# If the experiment was not evaluated yet, use from_gen as 0
221+
self._from_gen = 0
222+
if self._experiment_info["generations"] != 0:
223+
self._from_gen = from_gen
224+
216225
self._log_prefix = '[EXPERIMENT_IN_PROGRESS]'
217226
self._callbacks = {MLC_CALLBACKS.ON_START: self.simulation_started,
218227
MLC_CALLBACKS.ON_NEW_GENERATION: self.new_generation_created,
@@ -223,13 +232,16 @@ def __init__(self, mlc_local, experiment_name,
223232
self._indiv_per_gen_counter = 0
224233
self._total_indivs_counter = 0
225234
self._gen_counter = 0
226-
self._amount_gens = to_gen - from_gen + 1
235+
self._amount_gens = to_gen - from_gen
227236
self._indivs_per_gen = int(self._experiment_info["individuals_per_generation"])
228237
self._experiment_signal = None
229238

230239
self._dialog = ExperimentInProgressWindow(parent=parent,
231240
parent_signal=parent_signal,
232-
chart_params=chart_params)
241+
chart_params=chart_params,
242+
from_gen=from_gen,
243+
to_gen=to_gen)
244+
233245
self._experiment_condition = self._dialog.get_experiment_condition_variable()
234246
self._dialog.add_experiment_data(self._amount_gens, self._indivs_per_gen)
235247
self._dialog.show()

MLC/GUI/Experiment/ExperimentWindow.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,22 @@ def on_start_button_clicked(self):
8888
from_gen = int(self._autogenerated_object.from_gen_combo.currentText())
8989
to_gen = int(self._autogenerated_object.to_gen_combo.currentText())
9090

91+
if self._mlc_local.get_experiment_info(self._experiment_name)["generations"] == 0:
92+
from_gen = 0
93+
94+
# Check if the experiment range is ok
95+
if to_gen <= from_gen:
96+
logger.info("[EXPERIMENT {0}] [START_BUTTON] - Experiment can not be executed. "
97+
"'From Generation' index must be greater than 'To Generation' index "
98+
"From Gen: {1} - To Gen:{2}"
99+
.format(self._experiment_name, from_gen, to_gen))
100+
101+
QMessageBox.critical(self,
102+
"Invalid Generation Range",
103+
"Experiment can not be executed. 'From Generation' index "
104+
"must be greater than 'To Generation' index")
105+
return
106+
91107
logger.info('[EXPERIMENT {0}] [START_BUTTON] - Proceed to execute experiment from Generation '
92108
'N°{1} to Generation N°{2}'.format(self._experiment_name, from_gen, to_gen))
93109

@@ -429,7 +445,7 @@ def _update_experiment_info(self):
429445
else:
430446
# FIXME: Think what to do in the border case of number_of_gens == MAX_GENERATIONS
431447
from_gen_combo.addItems([str(x) for x in xrange(1, number_of_gens + 1)])
432-
to_gen_combo.addItems([str(x) for x in xrange(number_of_gens + 1, ExperimentWindow.MAX_GENERATIONS)])
448+
to_gen_combo.addItems([str(x) for x in xrange(2, ExperimentWindow.MAX_GENERATIONS)])
433449

434450
# Fill the db_view
435451
gen_count_group = self._autogenerated_object.gen_count_group

MLC/Population/Creation/IndividualSelection.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ def __init__(self, selected_individuals):
1818
self.__individuals = []
1919

2020
def create(self, gen_size):
21-
self.__individuals = [-1]*gen_size
21+
self.__individuals = [-1] * gen_size
2222

2323
# Add Individuals
2424
for individual, positions in self.__selected_individuals.items():
@@ -31,7 +31,7 @@ def create(self, gen_size):
3131
for index, indiv_id in enumerate(self.__individuals):
3232
if indiv_id == -1:
3333
if index > 0:
34-
self.__individuals[index] = self.__individuals[index-1]
34+
self.__individuals[index] = self.__individuals[index - 1]
3535
else:
3636
self.__individuals[index] = self.__individuals[index + 1]
3737

0 commit comments

Comments
 (0)