Skip to content

Clonalg

João Paulo edited this page Oct 25, 2025 · 1 revision

English

Clonal Selection Algorithm (CLONALG).

Clonalg

The Clonalg class is an optimization algorithm inspired by the biological process of clonal selection in the immune system. This implementation is designed for minimizing or maximizing cost functions in various problem types, including binary, continuous, ranged-value, and permutation problems.

The CLONALG implementation was inspired by the description presented in 1.

This CLONALG implementation contains some changes based on the AISP context, for general application to various problems, which may produce results different from the standard or specific implementation. This adaptation aims to generalize CLONALG to minimization and maximization tasks, in addition to supporting continuous, discrete, and permutation problems.


Constructor

The constructor initializes the CLONALG instance with key parameters that define the optimization process.

Attributes:

  • problem_size: int - The dimension of the problem to be optimized.
  • N: int, default=50 - The number of memory cells (antibodies) in the population.
  • rate_clonal: float, default=10 - The maximum number of possible clones of a cell. This value is multiplied by the cell's affinity to determine the number of clones.
  • rate_hypermutation: float, default=0.75 - The rate of mutated clones, used as a scalar factor.
  • n_diversity_injection: int, default=5 - The number of new random memory cells injected to maintain diversity.
  • selection_size: int, default=5 - The number of best antibodies selected for cloning.
  • affinity_function: Optional[Callable[..., npt.NDArray]], default=None - The objective function used to evaluate candidate solutions.
  • feature_type: FeatureTypeAll, default='ranged-features' - The type of problem samples, which can be 'continuous-features', 'binary-features', 'ranged-features', or 'permutation-features'.
  • bounds: Optional[Dict], default=None - A dictionary defining the search limits for 'ranged-features' problems. Can be a single fixed range or a list of ranges for each dimension.
  • mode: Literal["min", "max"], default="min" - Specifies whether the algorithm minimizes or maximizes the cost function.
  • seed: Optional[int], default=None - A seed for random number generation.

Public Methods

Function optimize(...)

def optimize(self, max_iters: int = 50, n_iter_no_change=10, verbose: bool = True) -> npt.NDArray:

This method execute the optimization process and return the population.

Input parameters:

  • max_iters: int, default=50 - The maximum number of interactions.
  • n_iter_no_change: int, default=10 - The maximum number of iterations without an improvement in the best solution.
  • verbose: bool, default=True - A flag to enable or disable detailed output during the optimization process.

Returns:

  • npt.NDArray: The best antibody population after clonal expansion.

Function affinity_function(...)

def affinity_function(self, solution: npt.NDArray) -> np.float64:

This method evaluates the affinity of a candidate solution. It raises a NotImplementedError if no affinity function has been provided to the class instance.

Input parameters:

  • solution: npt.NDArray - The candidate solution to be evaluated.

Returns:

  • np.float64: The affinity value associated with the solution.

Private Methods

Function _select_top_antibodies(...)

def _select_top_antibodies(self, n: int, antibodies: list[tuple]) -> list[tuple]:

This method selects the top n antibodies based on their affinity scores, according to the mode ('min' or 'max').

Input parameters:

  • n: int - The number of antibodies to select.
  • antibodies: list[tuple] - A list of tuples, where each tuple represents an antibody and its associated score.

Returns:

  • list[tuple]: A list containing the n selected antibodies.

Function _init_population_antibodies(...)

def _init_population_antibodies(self) -> npt.NDArray:

This method initializes the initial population of antibodies randomly.

Returns:

  • npt.NDArray: A list of the initialized antibodies.

Function _diversity_introduction(...)

def _diversity_introduction(self):

This method introduces new random antibodies into the population to maintain genetic diversity and help prevent premature convergence.

Returns:

  • npt.NDArray: An array of new random antibodies.

Function _clone_and_mutate(...)

def _clone_and_mutate(self, antibody: npt.NDArray, n_clone: int, rate_hypermutation: float) -> npt.NDArray:

This method generates mutated clones from a single antibody. The mutation strategy depends on the feature_type specified during initialization ('binary-features', 'continuous-features', 'ranged-features', or 'permutation-features').

Input parameters:

  • antibody: npt.NDArray - The original antibody vector to be cloned and mutated.
  • n_clone: int - The number of clones to generate.
  • rate_hypermutation: float - The hypermutation rate.

Returns:

  • npt.NDArray: An array containing the mutated clones.

Function _clone_and_hypermutation(...)

def _clone_and_hypermutation(self, population: list[tuple]) -> list:

This method clones and hypermutates a population of antibodies. It returns a list of all clones and their affinities with respect to the cost function.

Input parameters:

  • population: list[tuple] - The list of antibodies to be evaluated and cloned.

Returns:

  • list: A list of mutated clones.

References


  1. BROWNLEE, Jason. Clonal Selection Algorithm. Clever Algorithms: Nature-inspired Programming Recipes., 2011. Available at: https://cleveralgorithms.com/nature-inspired/immune/clonal_selection_algorithm.html

Português

Algoritmo de Seleção Clonal (CLONALG)

Clonalg

A classe Clonalg é um algoritmo de otimização inspirado no processo biológico de seleção clonal do sistema imunológico. Esta implementação é projetada para minimizar ou maximizar funções de custo em diversos tipos de problemas, incluindo problemas binários, contínuos, com valores limitados (ranged) e de permutação.

A implementação do CLONALG foi inspirada na descrição apresentada em 1.

Esta implementação do CLONALG contém algumas alterações baseadas no contexto do AISP, para aplicação geral a diversos problemas, que podem produzir resultados diferentes da implementação padrão ou específica. Esta adaptação visa generalizar o CLONALG para tarefas de minimização e maximização, além de suportar problemas contínuos, discretos e de permutação.


Construtor

O construtor inicializa a instância do CLONALG com os principais parâmetros que definem o processo de otimização.

Atributos:

  • problem_size: int - Dimensão do problema a ser otimizado.
  • N: int, padrão=50 - Número de células de memória (anticorpos) na população.
  • rate_clonal: float, padrão=10 - Número máximo de clones possíveis de uma célula. Este valor é multiplicado pela afinidade da célula para determinar o número de clones.
  • rate_hypermutation: float, padrão=0.75 - Taxa de clones mutados, usada como fator escalar.
  • n_diversity_injection: int, padrão=5 - Número de novas células de memória aleatórias injetadas para manter a diversidade.
  • selection_size: int, padrão=5 - Número de melhores anticorpos selecionados para clonagem.
  • affinity_function: Optional[Callable[..., npt.NDArray]], padrão=None - Função objetivo usada para avaliar soluções candidatas.
  • feature_type: FeatureTypeAll, padrão='ranged-features' - Tipo de amostra do problema, podendo ser 'continuous-features', 'binary-features', 'ranged-features' ou 'permutation-features'.
  • bounds: Optional[Dict], padrão=None - Dicionário definindo os limites de busca para problemas 'ranged-features'. Pode ser um único intervalo ou uma lista de intervalos para cada dimensão.
  • mode: Literal["min", "max"], padrão="min" - Especifica se o algoritmo minimiza ou maximiza a função de custo.
  • seed: Optional[int], padrão=None - Semente para geração de números aleatórios.

Métodos Públicos

Função optimize(...)

def optimize(self, max_iters: int = 50, n_iter_no_change=10, verbose: bool = True) -> npt.NDArray:

Este método executa o processo de otimização e retorna a população de anticorpos.

Parâmetros de entrada:

  • max_iters: int, padrão=50 - Número máximo de interações.
  • n_iter_no_change: int, padrão=10 - Número máximo de iterações sem melhoria na melhor solução.
  • verbose: bool, padrão=True - Flag para habilitar ou desabilitar saída detalhada durante o processo de otimização.

Retorna:

  • npt.NDArray: A população de anticorpos após a expansão clonal.

Função affinity_function(...)

def affinity_function(self, solution: npt.NDArray) -> np.float64:

Este método avalia a afinidade de uma solução candidata. Levanta NotImplementedError se nenhuma função de afinidade tiver sido fornecida à instância da classe.

Parâmetros de entrada:

  • solution: npt.NDArray - Solução candidata a ser avaliada.

Retorna:

  • np.float64: Valor de afinidade associado à solução.

Métodos Privados

Função _select_top_antibodies(...)

def _select_top_antibodies(self, n: int, antibodies: list[tuple]) -> list[tuple]:

Seleciona os n melhores anticorpos com base em suas pontuações de afinidade, de acordo com o mode ('min' ou 'max').

Parâmetros de entrada:

  • n: int - Número de anticorpos a serem selecionados.
  • antibodies: list[tuple] - Lista de tuplas, onde cada tupla representa um anticorpo e sua pontuação associada.

Retorna:

  • list[tuple]: Lista contendo os n anticorpos selecionados.

Função _init_population_antibodies(...)

def _init_population_antibodies(self) -> npt.NDArray:

Inicializa aleatoriamente a população inicial de anticorpos.

Retorna:

  • npt.NDArray: Lista com os anticorpos inicializados.

Função _diversity_introduction(...)

def _diversity_introduction(self):

Introduz novos anticorpos aleatórios na população para manter a diversidade genética e ajudar a evitar convergência prematura.

Retorna:

  • npt.NDArray: Array contendo os novos anticorpos aleatórios.

Função _clone_and_mutate(...)

def _clone_and_mutate(self, antibody: npt.NDArray, n_clone: int, rate_hypermutation: float) -> npt.NDArray:

Gera clones mutados a partir de um único anticorpo. A estratégia de mutação depende do feature_type especificado durante a inicialização ('binary-features', 'continuous-features', 'ranged-features' ou 'permutation-features').

Parâmetros de entrada:

  • antibody: npt.NDArray - Vetor original do anticorpo a ser clonado e mutado.
  • n_clone: int - Número de clones a serem gerados.
  • rate_hypermutation: float - Taxa de hipermutação.

Retorna:

  • npt.NDArray: Array contendo os clones mutados.

Função _clone_and_hypermutation(...)

def _clone_and_hypermutation(self, population: list[tuple]) -> list:

Clona e aplica hipermutação a uma população de anticorpos. Retorna uma lista de todos os clones e suas afinidades em relação à função de custo.

Parâmetros de entrada:

  • population: list[tuple] - Lista de anticorpos a serem avaliados e clonados.

Retorna:

  • list: Lista contendo os clones mutados.

Referências


  1. BROWNLEE, Jason. Clonal Selection Algorithm. Clever Algorithms: Nature-inspired Programming Recipes., 2011. Available at: https://cleveralgorithms.com/nature-inspired/immune/clonal_selection_algorithm.html