Skip to content

Commit

Permalink
Add test
Browse files Browse the repository at this point in the history
  • Loading branch information
YamLyubov committed Jul 31, 2023
1 parent e643517 commit c45488b
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 1 deletion.
2 changes: 1 addition & 1 deletion golem/core/optimisers/genetic/gp_params.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ class GPAlgorithmParameters(AlgorithmParameters):
In the `steady_state` scheme at each iteration only one individual is updated.
The `parameter_free` scheme is an adaptive variation of the `generational` scheme.
The `parameter_free` scheme is an adaptive variation of the `steady_state` scheme.
It specifies that the population size and the probability of mutation and crossover
change depending on the success of convergence. If there are no improvements in fitness,
then the size and the probabilities increase. When fitness improves, the size and the
Expand Down
42 changes: 42 additions & 0 deletions test/integration/test_genetic_schemes.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
from functools import partial

import numpy as np
import pytest

from examples.synthetic_graph_evolution.experiment_setup import run_trial
from examples.synthetic_graph_evolution.generators import generate_labeled_graph
from examples.synthetic_graph_evolution.tree_search import tree_search_setup
from golem.core.optimisers.genetic.gp_params import GPAlgorithmParameters
from golem.core.optimisers.genetic.operators.base_mutations import MutationTypesEnum
from golem.core.optimisers.genetic.operators.crossover import CrossoverTypesEnum
from golem.core.optimisers.genetic.operators.inheritance import GeneticSchemeTypesEnum


def set_up_params(genetic_scheme: GeneticSchemeTypesEnum):
gp_params = GPAlgorithmParameters(
multi_objective=False,
mutation_types=[
MutationTypesEnum.single_add,
MutationTypesEnum.single_drop,
],
crossover_types=[CrossoverTypesEnum.none],
genetic_scheme_type=genetic_scheme
)
return gp_params


@pytest.mark.parametrize('genetic_type', GeneticSchemeTypesEnum)
def test_genetic_scheme_types(genetic_type):
target_graph = generate_labeled_graph('tree', 4, node_labels=['x'])
num_iterations = 30

gp_params = set_up_params(genetic_type)
found_graph, history = run_trial(target_graph=target_graph,
optimizer_setup=partial(tree_search_setup, algorithm_parameters=gp_params),
num_iterations=num_iterations)
assert found_graph is not None
# at least 20% more generation than early_stopping_iterations were evaluated
assert history.generations_count >= num_iterations // 3 * 1.2
# metric improved
assert np.mean([ind.fitness.value for ind in history.generations[0].data]) > \
np.mean([ind.fitness.value for ind in history.generations[-1].data])

0 comments on commit c45488b

Please sign in to comment.