Commit 614730bf authored by Elizaveta Lutsenko's avatar Elizaveta Lutsenko
Browse files

copy restart feature branch

parent 9e26eb39
Showing with 42 additions and 26 deletions
+42 -26
|ITMO4|
.. image:: /docs/source/img/golem_logo-02.png
:alt: Logo of GOLEM framework
:align: center
......@@ -238,7 +236,3 @@ There are various cases solved with GOLEM's algorithms:
.. |mirror| image:: https://camo.githubusercontent.com/9bd7b8c5b418f1364e72110a83629772729b29e8f3393b6c86bff237a6b784f6/68747470733a2f2f62616467656e2e6e65742f62616467652f6769746c61622f6d6972726f722f6f72616e67653f69636f6e3d6769746c6162
:alt: GitLab mirror for this repository
:target: https://gitlab.actcognitive.org/itmo-nss-team/GOLEM
.. |ITMO4| image:: https://raw.githubusercontent.com/aimclub/open-source-ops/43bb283758b43d75ec1df0a6bb4ae3eb20066323/badges/ITMO_badge_rus.svg
:alt: Acknowledgement to ITMO
:target: https://itmo.ru
\ No newline at end of file
......@@ -67,17 +67,18 @@ class EvoGraphOptimizer(PopulationalOptimizer):
self.initial_individuals = [Individual(graph, metadata=requirements.static_individual_metadata)
for graph in self.initial_graphs]
else:
self.regularization.requirements = self.requirements
self.selection.requirements = self.requirements
self.crossover.requirements = self.requirements
self.mutation.requirements = self.requirements
self.inheritance.requirements = self.requirements
self.elitism.requirements = self.requirements
for op in self.operators:
op.requirements = self.requirements
self.reproducer.crossover.requirements = self.requirements
self.reproducer.mutation.requirements = self.requirements
self.reproducer.selection.requirements = self.requirements
print('done')
# self.regularization.requirements = self.requirements
# self.selection.requirements = self.requirements
# self.crossover.requirements = self.requirements
# self.mutation.requirements = self.requirements
# self.inheritance.requirements = self.requirements
# self.elitism.requirements = self.requirements
# for op in self.operators:
# op.requirements = self.requirements
# self.reproducer.crossover.requirements = self.requirements
# self.reproducer.mutation.requirements = self.requirements
# self.reproducer.selection.requirements = self.requirements
def _initial_population(self, evaluator: EvaluationOperator):
......
......@@ -96,7 +96,7 @@ class PopulationalOptimizer(GraphOptimizer):
elapsed_time.total_seconds() / 60
self.requirements.timeout = self.requirements.timeout - timedelta(seconds=elapsed_time.total_seconds())
self._edit_time_vars(self.__dict__, saved_state_timestamp)
self._edit_time_vars(self.__dict__, saved_state_timestamp, downtime, elapsed_time)
# stag_time_delta = saved_state_timestamp - self.generations._stagnation_start_time
# self.generations._stagnation_start_time = datetime.now() - stag_time_delta
else:
......@@ -244,17 +244,28 @@ class PopulationalOptimizer(GraphOptimizer):
bar = EmptyProgressBar()
return bar
def _edit_time_vars(self, var, saved_state_timestamp, varname=None):
def _edit_time_vars(self, var, saved_state_timestamp, downtime, prev_run_len, varname=None, parent=None):
'''
@param var: initial object can be any type
@param saved_state_timestamp: the timecode of the saved state file datetime.datetime
@param downtime: the amount of time between runs downtime datetime.timedelta
@param prev_run_len: the amount of time the previous run took downtime datetime.timedelta
@param varname: name of the dict or object element that is passed as var str
@param parent: the dict or object that contains var
@return: nothing, modifies the var object in place
'''
if isinstance(var, dict):
for key, item in var.items():
if isinstance(item, GraphRequirements):
var[key] = self.requirements
elif isinstance(item, OptimisationTimer):
var[key] = self.timer
else:
self._edit_time_vars(item, saved_state_timestamp, key)
self._edit_time_vars(item, saved_state_timestamp, downtime, prev_run_len, key, var)
elif isinstance(var, list) or isinstance(var, tuple): # set
elif isinstance(var, list) or isinstance(var, tuple) or isinstance(var, set):
for el in var:
self._edit_time_vars(el, saved_state_timestamp)
self._edit_time_vars(el, saved_state_timestamp, downtime, prev_run_len)
else:
try:
......@@ -262,12 +273,22 @@ class PopulationalOptimizer(GraphOptimizer):
except Exception:
var_dict = None
if var_dict:
self._edit_time_vars(var_dict, saved_state_timestamp)
self._edit_time_vars(var_dict, saved_state_timestamp, downtime, prev_run_len)
elif varname:
print(varname, type(var))
if isinstance(var, str) and 'stagnation_start_time' in varname:
# try:
# if ('time' in varname) and (varname != 'computation_time_in_seconds') and (varname != 'evaluation_time_iso'):
# print(varname, type(varname), var, type(var))
# except Exception:
# pass
if isinstance(varname, str) and 'stagnation_start_time' in varname:
stag_time_delta = saved_state_timestamp - var
var = datetime.now() - stag_time_delta # probably won't work
parent[varname] = datetime.now() - stag_time_delta
elif isinstance(varname, str) and 'evaluation_time_iso' in varname:
parent[varname] = datetime.isoformat(datetime.fromisoformat(var) + downtime)
# elif isinstance(varname, str) and 'init_time' in varname:
# parent[varname] = var + downtime
# elif isinstance(varname, str) and 'timeout' in varname:
# parent[varname] = var - prev_run_len
# TODO: remove this hack (e.g. provide smth like FitGraph with fit/unfit interface)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment