From 45664faea56fa17e588d570165a18f535cf8dd8c Mon Sep 17 00:00:00 2001 From: Grigorii Kirgizov Date: Mon, 12 Sep 2022 15:03:56 +0300 Subject: [PATCH] fix GraphOptimizerParameters import --- fedot/core/optimisers/gp_comp/gp_params.py | 2 +- fedot/core/optimisers/gp_comp/operators/crossover.py | 5 ++++- fedot/core/optimisers/gp_comp/operators/elitism.py | 4 ++++ fedot/core/optimisers/gp_comp/operators/inheritance.py | 5 ++++- fedot/core/optimisers/gp_comp/operators/mutation.py | 8 ++++++-- fedot/core/optimisers/gp_comp/operators/operator.py | 8 +++++--- .../optimisers/gp_comp/operators/regularization.py | 4 ++++ fedot/core/optimisers/gp_comp/operators/selection.py | 10 ++++++---- test/unit/optimizer/test_elitism_operator.py | 6 +++++- 9 files changed, 39 insertions(+), 13 deletions(-) diff --git a/fedot/core/optimisers/gp_comp/gp_params.py b/fedot/core/optimisers/gp_comp/gp_params.py index 1fed3e7046..6b6ce6f62c 100644 --- a/fedot/core/optimisers/gp_comp/gp_params.py +++ b/fedot/core/optimisers/gp_comp/gp_params.py @@ -1,13 +1,13 @@ from dataclasses import dataclass from typing import Sequence, Union, Any +from fedot.core.optimisers.optimizer import GraphOptimizerParameters from fedot.core.optimisers.gp_comp.operators.crossover import CrossoverTypesEnum from fedot.core.optimisers.gp_comp.operators.elitism import ElitismTypesEnum from fedot.core.optimisers.gp_comp.operators.inheritance import GeneticSchemeTypesEnum from fedot.core.optimisers.gp_comp.operators.mutation import MutationTypesEnum, MutationStrengthEnum from fedot.core.optimisers.gp_comp.operators.regularization import RegularizationTypesEnum from fedot.core.optimisers.gp_comp.operators.selection import SelectionTypesEnum -from fedot.core.optimisers.optimizer import GraphOptimizerParameters @dataclass diff --git a/fedot/core/optimisers/gp_comp/operators/crossover.py b/fedot/core/optimisers/gp_comp/operators/crossover.py index ea84d312dd..ea25b8b21e 100644 --- a/fedot/core/optimisers/gp_comp/operators/crossover.py +++ b/fedot/core/optimisers/gp_comp/operators/crossover.py @@ -1,6 +1,6 @@ from copy import deepcopy from random import choice, random -from typing import Callable, List, Union, Iterable, Tuple +from typing import Callable, Union, Iterable, Tuple, TYPE_CHECKING from fedot.core.optimisers.gp_comp.pipeline_composer_requirements import PipelineComposerRequirements from fedot.core.optimisers.gp_comp.gp_operators import equivalent_subtree, replace_subtrees @@ -10,6 +10,9 @@ from fedot.core.optimisers.optimizer import GraphGenerationParams from fedot.core.utilities.data_structures import ComparableEnum as Enum +if TYPE_CHECKING: + from fedot.core.optimisers.gp_comp.gp_params import GPGraphOptimizerParameters + class CrossoverTypesEnum(Enum): subtree = 'subtree' diff --git a/fedot/core/optimisers/gp_comp/operators/elitism.py b/fedot/core/optimisers/gp_comp/operators/elitism.py index a9ec87685c..5ff9a4efd9 100644 --- a/fedot/core/optimisers/gp_comp/operators/elitism.py +++ b/fedot/core/optimisers/gp_comp/operators/elitism.py @@ -1,8 +1,12 @@ from random import shuffle +from typing import TYPE_CHECKING from fedot.core.optimisers.gp_comp.operators.operator import PopulationT, Operator from fedot.core.utilities.data_structures import ComparableEnum as Enum +if TYPE_CHECKING: + from fedot.core.optimisers.gp_comp.gp_params import GPGraphOptimizerParameters + class ElitismTypesEnum(Enum): keep_n_best = 'keep_n_best' diff --git a/fedot/core/optimisers/gp_comp/operators/inheritance.py b/fedot/core/optimisers/gp_comp/operators/inheritance.py index 1a6c623930..c3b268e778 100644 --- a/fedot/core/optimisers/gp_comp/operators/inheritance.py +++ b/fedot/core/optimisers/gp_comp/operators/inheritance.py @@ -1,10 +1,13 @@ from functools import partial -from typing import (Callable) +from typing import (Callable, TYPE_CHECKING) from fedot.core.optimisers.gp_comp.operators.operator import PopulationT, Operator from fedot.core.optimisers.gp_comp.operators.selection import Selection from fedot.core.utilities.data_structures import ComparableEnum as Enum +if TYPE_CHECKING: + from fedot.core.optimisers.gp_comp.gp_params import GPGraphOptimizerParameters + class GeneticSchemeTypesEnum(Enum): steady_state = 'steady_state' diff --git a/fedot/core/optimisers/gp_comp/operators/mutation.py b/fedot/core/optimisers/gp_comp/operators/mutation.py index 4996fb0bb8..e765758a66 100644 --- a/fedot/core/optimisers/gp_comp/operators/mutation.py +++ b/fedot/core/optimisers/gp_comp/operators/mutation.py @@ -1,7 +1,7 @@ from copy import deepcopy from functools import partial from random import choice, randint, random, sample -from typing import Callable, List, Union, Tuple +from typing import Callable, List, Union, Tuple, TYPE_CHECKING import numpy as np @@ -17,6 +17,10 @@ from fedot.core.optimisers.gp_comp.pipeline_composer_requirements import PipelineComposerRequirements +if TYPE_CHECKING: + from fedot.core.optimisers.gp_comp.gp_params import GPGraphOptimizerParameters + + class MutationStrengthEnum(Enum): weak = 0.2 mean = 1.0 @@ -38,7 +42,7 @@ class MutationTypesEnum(Enum): class Mutation(Operator): def __init__(self, - parameters: 'GPGraphGenerationParameters', + parameters: 'GPGraphOptimizerParameters', requirements: PipelineComposerRequirements, graph_generation_params: GraphGenerationParams, # TODO: move these 2 to gp_parameters diff --git a/fedot/core/optimisers/gp_comp/operators/operator.py b/fedot/core/optimisers/gp_comp/operators/operator.py index 194db1466c..e5547e4c54 100644 --- a/fedot/core/optimisers/gp_comp/operators/operator.py +++ b/fedot/core/optimisers/gp_comp/operators/operator.py @@ -1,12 +1,14 @@ from abc import ABC, abstractmethod -from typing import Sequence, Callable, Optional +from typing import Sequence, Optional, TYPE_CHECKING, Callable from fedot.core.log import default_log from fedot.core.optimisers.gp_comp.individual import Individual from fedot.core.optimisers.gp_comp.pipeline_composer_requirements import PipelineComposerRequirements -# from fedot.core.optimisers.optimizer import GraphOptimizerParameters # TODO: fix import loop -PopulationT = Sequence[Individual] # TODO: provisional +if TYPE_CHECKING: + from fedot.core.optimisers.optimizer import GraphOptimizerParameters + +PopulationT = Sequence[Individual] # TODO: provisional EvaluationOperator = Callable[[PopulationT], PopulationT] EvaluationOperator = Callable[[PopulationT], PopulationT] diff --git a/fedot/core/optimisers/gp_comp/operators/regularization.py b/fedot/core/optimisers/gp_comp/operators/regularization.py index 13c02cab51..acd3a1b890 100644 --- a/fedot/core/optimisers/gp_comp/operators/regularization.py +++ b/fedot/core/optimisers/gp_comp/operators/regularization.py @@ -1,4 +1,5 @@ from copy import deepcopy +from typing import TYPE_CHECKING from fedot.core.optimisers.gp_comp.individual import Individual, ParentOperator from fedot.core.optimisers.gp_comp.operators.operator import PopulationT, EvaluationOperator, Operator @@ -7,6 +8,9 @@ from fedot.core.pipelines.node import Node from fedot.core.utilities.data_structures import ComparableEnum as Enum +if TYPE_CHECKING: + from fedot.core.optimisers.gp_comp.gp_params import GPGraphOptimizerParameters + class RegularizationTypesEnum(Enum): none = 'none' diff --git a/fedot/core/optimisers/gp_comp/operators/selection.py b/fedot/core/optimisers/gp_comp/operators/selection.py index 59f9bf6e9e..d6443125ea 100644 --- a/fedot/core/optimisers/gp_comp/operators/selection.py +++ b/fedot/core/optimisers/gp_comp/operators/selection.py @@ -129,8 +129,9 @@ def spea2_selection(individuals: PopulationT, pop_size: int) -> PopulationT: for j in range(i + 1, inds_len): dist = 0.0 for idx in range(fitness_len): - val = individuals[i].fitness.values[idx] - \ - individuals[j].fitness.values[idx] + val = \ + individuals[i].fitness.values[idx] - \ + individuals[j].fitness.values[idx] dist += val * val distances[j] = dist kth_dist = _randomized_select(distances, 0, inds_len - 1, inds_len_sqrt) @@ -151,8 +152,9 @@ def spea2_selection(individuals: PopulationT, pop_size: int) -> PopulationT: for j in range(i + 1, inds_len): dist = 0.0 for idx in range(fitness_len): - val = individuals[chosen_indices[i]].fitness.values[idx] - \ - individuals[chosen_indices[j]].fitness.values[idx] + val = \ + individuals[chosen_indices[i]].fitness.values[idx] - \ + individuals[chosen_indices[j]].fitness.values[idx] dist += val * val distances[i][j] = dist distances[j][i] = dist diff --git a/test/unit/optimizer/test_elitism_operator.py b/test/unit/optimizer/test_elitism_operator.py index 8adb1c3e59..c17f9eaa0c 100644 --- a/test/unit/optimizer/test_elitism_operator.py +++ b/test/unit/optimizer/test_elitism_operator.py @@ -1,14 +1,18 @@ +from typing import TYPE_CHECKING + import pytest from fedot.core.optimisers.adapters import PipelineAdapter from fedot.core.optimisers.gp_comp.evaluation import SimpleDispatcher -from fedot.core.optimisers.gp_comp.gp_params import GPGraphOptimizerParameters from fedot.core.optimisers.gp_comp.individual import Individual from fedot.core.optimisers.gp_comp.operators.elitism import Elitism, ElitismTypesEnum from test.unit.optimizer.test_evaluation import prepared_objective from test.unit.pipelines.test_node_cache import pipeline_first, pipeline_second, pipeline_third, pipeline_fourth, \ pipeline_fifth +if TYPE_CHECKING: + from fedot.core.optimisers.gp_comp.gp_params import GPGraphOptimizerParameters + @pytest.fixture() def set_up():