source: framspy/evolalg_steps/utils/stable_generation.py @ 1302

Last change on this file since 1302 was 1185, checked in by Maciej Komosinski, 2 years ago

Renamed a module; new name is "evolalg_steps"

File size: 1.1 KB
RevLine 
[1113]1from collections import Iterable
2
[1185]3from evolalg_steps.base.step import Step
[1113]4import copy
5
[1185]6from evolalg_steps.base.union_step import UnionStep
[1113]7
8
9class StableGeneration(Step):
10
11    def __init__(self, selection, steps, population_size=None):
12        self.selection = selection
13        self.steps = UnionStep(steps)
14        self.population_size = population_size
15
16    def generate_new(self, population, missing_count):
17        selected = self.selection(population, missing_count)
18        selected = copy.deepcopy(selected)
19        selected = self.steps(selected)
20        return selected
21
22    def init(self):
23        self.selection.init()
24        self.steps.init()
25
26    def call(self, population):
27        population_size = self.population_size
28        if population_size is None:
29            population_size = len(population)
30        generated = []
31        while len(generated) < population_size:
32            gen = self.generate_new(population, population_size - len(generated))
33            if isinstance(gen, Iterable):
34                generated.extend(gen)
35            else:
36                generated.append(gen)
37        return generated[:len(population)]
Note: See TracBrowser for help on using the repository browser.