Source code for pyccea.coevolution.ccga

import numpy as np
from ..coevolution.ccea import CCEA
from ..fitness.penalty import SubsetSizePenalty
from ..evaluation.wrapper import WrapperEvaluation
from ..cooperation.best import SingleBestCollaboration
from ..cooperation.random import SingleRandomCollaboration
from ..initialization.binary import RandomBinaryInitialization
from ..optimizers.genetic_algorithm import BinaryGeneticAlgorithm


[docs] class CCGA(CCEA): """Cooperative Co-Evolutionary Genetic Algorithm. Attributes ---------- subcomp_sizes : list Number of features in each subcomponent. feature_idxs : np.ndarray Shuffled list of feature indexes. """ def _init_collaborator(self): """Instantiate collaboration method.""" self.best_collaborator = SingleBestCollaboration() self.random_collaborator = SingleRandomCollaboration(seed=self.seed) def _init_evaluator(self): """Instantiate evaluation method.""" evaluator = WrapperEvaluation( task=self.conf["wrapper"]["task"], model_type=self.conf["wrapper"]["model_type"], eval_function=self.conf["evaluation"]["eval_function"], eval_mode=self.eval_mode, n_classes=getattr(self.data, "n_classes", None) ) self.fitness_function = SubsetSizePenalty( evaluator=evaluator, weights=self.conf["evaluation"]["weights"] ) def _init_subpop_initializer(self): """Instantiate subpopulation initialization method.""" self.initializer = RandomBinaryInitialization( data=self.data, subcomp_sizes=self.subcomp_sizes, subpop_sizes=self.subpop_sizes, collaborator=self.random_collaborator, fitness_function=self.fitness_function ) def _init_optimizers(self): """Instantiate evolutionary algorithms to evolve each subpopulation.""" self.optimizers = list() # Instantiate an optimizer for each subcomponent for i in range(self.n_subcomps): optimizer = BinaryGeneticAlgorithm( subpop_size=self.subpop_sizes[i], n_features=self.subcomp_sizes[i], conf=self.conf ) self.optimizers.append(optimizer)