Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
ITMO-NSS-team
GOLEM
Commits
614730bf
Commit
614730bf
authored
1 year ago
by
Elizaveta Lutsenko
Browse files
Options
Download
Email Patches
Plain Diff
copy restart feature branch
parent
9e26eb39
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
README_en.rst
+0
-6
README_en.rst
golem/core/optimisers/genetic/gp_optimizer.py
+12
-11
golem/core/optimisers/genetic/gp_optimizer.py
golem/core/optimisers/populational_optimizer.py
+30
-9
golem/core/optimisers/populational_optimizer.py
with
42 additions
and
26 deletions
+42
-26
README_en.rst
View file @
614730bf
|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
This diff is collapsed.
Click to expand it.
golem/core/optimisers/genetic/gp_optimizer.py
View file @
614730bf
...
...
@@ -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
):
...
...
This diff is collapsed.
Click to expand it.
golem/core/optimisers/populational_optimizer.py
View file @
614730bf
...
...
@@ -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)
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment