porcupy.utils.population

Classes

PopulationCycle

Class for managing cyclic population reduction in the Crested Porcupine Optimizer.

SelectionStrategies

Class implementing various selection strategies for population reduction.

Module Contents

class porcupy.utils.population.PopulationCycle(initial_pop_size: int, min_pop_size: int, max_iter: int, cycles: int = 2, reduction_strategy: str = 'linear')[source]

Class for managing cyclic population reduction in the Crested Porcupine Optimizer.

This class implements the cyclic population reduction strategy, which is a key feature of the CPO algorithm. The population size varies cyclically throughout the optimization process to balance exploration and exploitation.

Parameters:
  • initial_pop_size (int) – Initial population size.

  • min_pop_size (int) – Minimum population size during reduction.

  • max_iter (int) – Maximum number of iterations.

  • cycles (int) – Number of cycles for population reduction.

  • reduction_strategy (str) – Strategy for population reduction (‘linear’, ‘cosine’, or ‘exponential’).

initial_pop_size[source]

Initial population size.

Type:

int

min_pop_size[source]

Minimum population size during reduction.

Type:

int

max_iter[source]

Maximum number of iterations.

Type:

int

cycles[source]

Number of cycles for population reduction.

Type:

int

reduction_strategy[source]

Strategy for population reduction.

Type:

str

initial_pop_size[source]
min_pop_size[source]
max_iter[source]
cycles = 2[source]
reduction_strategy = 'linear'[source]
calculate_pop_size(iteration: int) int[source]

Calculate the population size for the current iteration

Parameters:

iteration (int) – Current iteration number

Returns:

Population size for the current iteration

Return type:

int

class porcupy.utils.population.SelectionStrategies[source]

Class implementing various selection strategies for population reduction.

This class provides methods for selecting which individuals to keep when reducing the population size.

static best_selection(positions: numpy.ndarray, fitness: numpy.ndarray, new_size: int) Tuple[numpy.ndarray, numpy.ndarray][source]

Select the best individuals based on fitness

Parameters:
  • positions (numpy.ndarray) – Current positions of all individuals

  • fitness (numpy.ndarray) – Current fitness values of all individuals

  • new_size (int) – New population size

Returns:

A tuple containing (selected_positions, selected_fitness)

Return type:

tuple

static tournament_selection(positions: numpy.ndarray, fitness: numpy.ndarray, new_size: int, tournament_size: int = 3) Tuple[numpy.ndarray, numpy.ndarray][source]

Select individuals using tournament selection

Parameters:
  • positions (numpy.ndarray) – Current positions of all individuals

  • fitness (numpy.ndarray) – Current fitness values of all individuals

  • new_size (int) – New population size

  • tournament_size (int) – Size of each tournament

Returns:

A tuple containing (selected_positions, selected_fitness)

Return type:

tuple

static roulette_wheel_selection(positions: numpy.ndarray, fitness: numpy.ndarray, new_size: int) Tuple[numpy.ndarray, numpy.ndarray][source]

Select individuals using roulette wheel selection

Parameters:
  • positions (numpy.ndarray) – Current positions of all individuals

  • fitness (numpy.ndarray) – Current fitness values of all individuals

  • new_size (int) – New population size

Returns:

A tuple containing (selected_positions, selected_fitness)

Return type:

tuple

static diversity_selection(positions: numpy.ndarray, fitness: numpy.ndarray, new_size: int, elite_fraction: float = 0.2) Tuple[numpy.ndarray, numpy.ndarray][source]

Select individuals based on fitness and diversity

Parameters:
  • positions (numpy.ndarray) – Current positions of all individuals

  • fitness (numpy.ndarray) – Current fitness values of all individuals

  • new_size (int) – New population size

  • elite_fraction (float) – Fraction of individuals to select based on fitness

Returns:

A tuple containing (selected_positions, selected_fitness)

Return type:

tuple