Skip to content

Commit

Permalink
feat: add AdaptiveParameters
Browse files Browse the repository at this point in the history
  • Loading branch information
Lopa10ko committed Dec 8, 2023
1 parent 0f7ef9d commit a449e1a
Showing 1 changed file with 24 additions and 4 deletions.
28 changes: 24 additions & 4 deletions golem/core/optimisers/genetic/temp/adaptive.py
Original file line number Diff line number Diff line change
@@ -1,21 +1,24 @@
from typing import Any, Dict, List

from golem.core.optimisers.common_optimizer.common_optimizer import CommonOptimizerParameters
from golem.core.optimisers.common_optimizer.node import Node
from golem.core.optimisers.common_optimizer.task import Task
from golem.core.optimisers.optimizer import OptimizationParameters, GraphGenerationParams, AlgorithmParameters


class AdaptiveParametersTask(Task):
"""
This class is a Memento for storing a state of OptimizationParameters,
This class is for storing a state of OptimizationParameters,
GraphGenerationParams and AlgorithmParameters in CommonOptimizerParameters.
:param parameters: instance of CommonOptimizerParameters containing the initial parameters
"""

def __init__(self, parameters: CommonOptimizerParameters):
super().__init__()
self.parameters = {}
for attribute, params_values in parameters.__dict__.items():
if isinstance(params_values, (OptimizationParameters, GraphGenerationParams, AlgorithmParameters)):
parameters[attribute] = dict(params_values.__dict__.items())
for attribute, values in parameters.__dict__.items():
if isinstance(values, (OptimizationParameters, GraphGenerationParams, AlgorithmParameters)):
parameters[attribute] = dict(values.__dict__.items())

def update_parameters(self, parameters: CommonOptimizerParameters) -> CommonOptimizerParameters:
"""
Expand All @@ -30,3 +33,20 @@ def update_parameters(self, parameters: CommonOptimizerParameters) -> CommonOpti
for subattribute, subvalues in values.items():
setattr(parameters_obj, subattribute, subvalues)
return parameters


class AdaptiveParameters(Node):
def __init__(self, name: str, parameters: Dict[str, Dict[str, Any]]):
self.name = name
self.parameters = parameters

def update_parameters(self, task: AdaptiveParametersTask) -> List[AdaptiveParametersTask]:
if not isinstance(task, AdaptiveParametersTask):
raise TypeError(f"task should be `AdaptiveParametersTask`, got {type(task)} instead")
for attribute, values in self.parameters:
parameters_dict = task.parameters.get(attribute, None)
if parameters_dict:
for subattribute, subvalues in values.items():
if subattribute in parameters_dict:
parameters_dict[subattribute] = subvalues
return [task]

0 comments on commit a449e1a

Please sign in to comment.