edo.operators package

Submodules

edo.operators.crossover module

Functions for the crossover process.

edo.operators.crossover.crossover(parent1, parent2, col_limits, families, random_state, prob=0.5)[source]

Blend the information from two parents to create a new Individual. Dimensions are inherited first, forming a “skeleton” that is filled with column-metadata pairs. These pairs are selected from either parent uniformly. Missing values are filled in as necessary.

Parameters:
parent1 : Individual

The first individual to be blended.

parent2 : Individual

The second individual to be blended.

col_limits : list

Lower and upper bounds on the number of columns offspring can have. Used in case of tuple limits.

families : list

Families of distributions with which to create new columns. Used in case of tuple column limits.

random_state : numpy.random.RandomState

The PRNG associated with the offspring.

prob : float, optional

The cut-off probability with which to inherit dimensions from parent1 over parent2.

Returns
——-
offspring : Individual

A new individual formed from the dimensions and columns of its parents.

edo.operators.mutation module

Functions related to the mutation operator.

edo.operators.mutation.mutate_ncols(dataframe, metadata, col_limits, families, weights, random_state, prob)[source]

Mutate the number of columns an individual has by adding a new column and/or dropping a column at random. In either case, the bounds defined in col_limits cannot be exceeded.

edo.operators.mutation.mutate_nrows(dataframe, metadata, row_limits, random_state, prob)[source]

Mutate the number of rows an individual has by adding a new row and/or dropping a row at random so as not to exceed the bounds of row_limits.

edo.operators.mutation.mutate_values(dataframe, metadata, random_state, prob)[source]

Iterate over the values of dataframe and mutate them each with probability prob. Mutating a value is done by resampling from the associated column distribution in metadata.

edo.operators.mutation.mutation(individual, prob, row_limits, col_limits, families, weights=None)[source]

Mutate an individual. Here, the characteristics of an individual can be split into two parts: their dimensions, and their values. Each of these parts is mutated in a different way using the same probability, prob.

Parameters:
individual : Individual

The individual to be mutated.

prob : float

The probability with which any characteristic of individual should be mutated.

row_limits : list

Lower and upper limits on the number of rows an individual can have.

col_limits : list

Lower and upper limits on the number of columns an individual can have.

families: list

Families of distributions with which to create new columns.

weights : list, optional

Probabilities with which to sample a distribution families. If None, sample uniformly.

Returns:
mutant : Individual

A (potentially) mutated individual.

edo.operators.selection module

The selection operator.

edo.operators.selection.selection(population, pop_fitness, best_prop, lucky_prop, random_state, maximise=False)[source]

Given a population, select a proportion of the “best” individuals and another of the “lucky” individuals (if they are available) to form a set of potential parents.

Parameters:
population : list

All current individuals.

pop_fitness : list

The fitness of each individual in population.

best_prop : float

The proportion of the fittest individuals in population to be selected.

lucky_prop : float

The proportion of lucky individuals left in population to be selected after the “best” have been selected.

maximise : bool, optional

Determines whether an individual’s fitness should be maximal or not. Defaults to False.

Returns:
parents : dict

The individuals chosen to potentially become parents and their index in the current population.

edo.operators.shrink module

Functions for shrinking the search space.

edo.operators.shrink.shrink(parents, families, itr, shrinkage)[source]

Given the current progress of the evolutionary algorithm, shrink its search space, i.e. the parameter spaces for each of the distribution classes in families.

Parameters:
parents : list of Individual instances

The parent individuals for this iteration.

families : list of Distribution instances

The families of distributions to be shrunk.

itr : int

The current iteration.

shrinkage : float

The shrinkage factor between 0 and 1.

Returns:
families : list of Distribution instances

The altered families.

edo.operators.util module

A collection of functions for use across several operators.

edo.operators.util.get_family_counts(metadata, families)[source]

Get the number of instances in metadata that belong to each family in families.

Module contents

edo.operators.crossover(parent1, parent2, col_limits, families, random_state, prob=0.5)[source]

Blend the information from two parents to create a new Individual. Dimensions are inherited first, forming a “skeleton” that is filled with column-metadata pairs. These pairs are selected from either parent uniformly. Missing values are filled in as necessary.

Parameters:
parent1 : Individual

The first individual to be blended.

parent2 : Individual

The second individual to be blended.

col_limits : list

Lower and upper bounds on the number of columns offspring can have. Used in case of tuple limits.

families : list

Families of distributions with which to create new columns. Used in case of tuple column limits.

random_state : numpy.random.RandomState

The PRNG associated with the offspring.

prob : float, optional

The cut-off probability with which to inherit dimensions from parent1 over parent2.

Returns
——-
offspring : Individual

A new individual formed from the dimensions and columns of its parents.

edo.operators.mutation(individual, prob, row_limits, col_limits, families, weights=None)[source]

Mutate an individual. Here, the characteristics of an individual can be split into two parts: their dimensions, and their values. Each of these parts is mutated in a different way using the same probability, prob.

Parameters:
individual : Individual

The individual to be mutated.

prob : float

The probability with which any characteristic of individual should be mutated.

row_limits : list

Lower and upper limits on the number of rows an individual can have.

col_limits : list

Lower and upper limits on the number of columns an individual can have.

families: list

Families of distributions with which to create new columns.

weights : list, optional

Probabilities with which to sample a distribution families. If None, sample uniformly.

Returns:
mutant : Individual

A (potentially) mutated individual.

edo.operators.selection(population, pop_fitness, best_prop, lucky_prop, random_state, maximise=False)[source]

Given a population, select a proportion of the “best” individuals and another of the “lucky” individuals (if they are available) to form a set of potential parents.

Parameters:
population : list

All current individuals.

pop_fitness : list

The fitness of each individual in population.

best_prop : float

The proportion of the fittest individuals in population to be selected.

lucky_prop : float

The proportion of lucky individuals left in population to be selected after the “best” have been selected.

maximise : bool, optional

Determines whether an individual’s fitness should be maximal or not. Defaults to False.

Returns:
parents : dict

The individuals chosen to potentially become parents and their index in the current population.

edo.operators.shrink(parents, families, itr, shrinkage)[source]

Given the current progress of the evolutionary algorithm, shrink its search space, i.e. the parameter spaces for each of the distribution classes in families.

Parameters:
parents : list of Individual instances

The parent individuals for this iteration.

families : list of Distribution instances

The families of distributions to be shrunk.

itr : int

The current iteration.

shrinkage : float

The shrinkage factor between 0 and 1.

Returns:
families : list of Distribution instances

The altered families.