ribs.emitters.GaussianEmitter

class ribs.emitters.GaussianEmitter(archive, *, sigma, x0=None, initial_solutions=None, bounds=None, batch_size=64, seed=None)[source]

Emits solutions by adding Gaussian noise to existing archive solutions.

If the archive is empty and self._initial_solutions is set, a call to ask() will return self._initial_solutions. If self._initial_solutions is not set, we draw from a Gaussian distribution centered at self.x0 with standard deviation self.sigma. Otherwise, each solution is drawn from a distribution centered at a randomly chosen elite with standard deviation self.sigma.

This is the classic variation operator presented in Mouret 2015.

Parameters
  • archive (ribs.archives.ArchiveBase) – An archive to use when creating and inserting solutions. For instance, this can be ribs.archives.GridArchive.

  • sigma (float or array-like) – Standard deviation of the Gaussian distribution. Note we assume the Gaussian is diagonal, so if this argument is an array, it must be 1D.

  • x0 (array-like) – Center of the Gaussian distribution from which to sample solutions when the archive is empty. Must be 1-dimensional. This argument is ignored if initial_solutions is set.

  • initial_solutions (array-like) – An (n, solution_dim) array of solutions to be used when the archive is empty. If this argument is None, then solutions will be sampled from a Gaussian distribution centered at x0 with standard deviation sigma.

  • bounds (None or array-like) – Bounds of the solution space. Solutions are clipped to these bounds. Pass None to indicate there are no bounds. Alternatively, pass an array-like to specify the bounds for each dim. Each element in this array-like can be None to indicate no bound, or a tuple of (lower_bound, upper_bound), where lower_bound or upper_bound may be None to indicate no bound.

  • batch_size (int) – Number of solutions to return in ask().

  • seed (int) – Value to seed the random number generator. Set to None to avoid a fixed seed.

Raises
  • ValueError – There is an error in x0 or initial_solutions.

  • ValueError – There is an error in the bounds configuration.

Methods

ask()

Creates solutions by adding Gaussian noise to elites in the archive.

ask_dqd()

Generates a (batch_size, solution_dim) array of solutions for which gradient information must be computed.

tell(solution, objective, measures, ...)

Gives the emitter results from evaluating solutions.

tell_dqd(solution, objective, measures, ...)

Gives the emitter results from evaluating the gradient of the solutions, only used for DQD emitters.

Attributes

archive

The archive which stores solutions generated by this emitter.

batch_size

Number of solutions to return in ask().

initial_solutions

The initial solutions which are returned when the archive is empty (if x0 is not set).

lower_bounds

(solution_dim,) array with lower bounds of solution space.

sigma

Standard deviation of the (diagonal) Gaussian distribution when the archive is not empty.

solution_dim

The dimension of solutions produced by this emitter.

upper_bounds

(solution_dim,) array with upper bounds of solution space.

x0

Center of the Gaussian distribution from which to sample solutions when the archive is empty (if initial_solutions is not set).

ask()[source]

Creates solutions by adding Gaussian noise to elites in the archive.

If the archive is empty and self._initial_solutions is set, we return self._initial_solutions. If self._initial_solutions is not set, we draw from Gaussian distribution centered at self.x0 with standard deviation self.sigma. Otherwise, each solution is drawn from a distribution centered at a randomly chosen elite with standard deviation self.sigma.

Returns

If the archive is not empty, (batch_size, solution_dim) array – contains batch_size new solutions to evaluate. If the archive is empty, we return self._initial_solutions, which might not have batch_size solutions.

ask_dqd()

Generates a (batch_size, solution_dim) array of solutions for which gradient information must be computed.

This method only needs to be implemented by emitters used in DQD. The method returns an empty array by default.

tell(solution, objective, measures, add_info, **fields)

Gives the emitter results from evaluating solutions.

This base class implementation (in EmitterBase) needs to be overriden.

Parameters
  • solution (numpy.ndarray) – Array of solutions generated by this emitter’s ask() method.

  • objective (numpy.ndarray) – 1D array containing the objective function value of each solution.

  • measures (numpy.ndarray) – (n, <measure space dimension>) array with the measure space coordinates of each solution.

  • add_info (dict) – Data returned from the archive add() method.

  • fields (keyword arguments) – Additional data for each solution. Each argument should be an array with batch_size as the first dimension.

tell_dqd(solution, objective, measures, jacobian, add_info, **fields)

Gives the emitter results from evaluating the gradient of the solutions, only used for DQD emitters.

Parameters
  • solution (numpy.ndarray) – (batch_size, :attr:`solution_dim`) array of solutions generated by this emitter’s ask() method.

  • objective (numpy.ndarray) – 1-dimensional array containing the objective function value of each solution.

  • measures (numpy.ndarray) – (batch_size, measure space dimension) array with the measure space coordinates of each solution.

  • jacobian (numpy.ndarray) – (batch_size, 1 + measure_dim, solution_dim) array consisting of Jacobian matrices of the solutions obtained from ask_dqd(). Each matrix should consist of the objective gradient of the solution followed by the measure gradients.

  • add_info (dict) – Data returned from the archive add() method.

  • fields (keyword arguments) – Additional data for each solution. Each argument should be an array with batch_size as the first dimension.

property archive

The archive which stores solutions generated by this emitter.

Type

ribs.archives.ArchiveBase

property batch_size

Number of solutions to return in ask().

Type

int

property initial_solutions

The initial solutions which are returned when the archive is empty (if x0 is not set).

Type

numpy.ndarray

property lower_bounds

(solution_dim,) array with lower bounds of solution space.

For instance, [-1, -1, -1] indicates that every dimension of the solution space has a lower bound of -1.

Type

numpy.ndarray

property sigma

Standard deviation of the (diagonal) Gaussian distribution when the archive is not empty.

Type

float or numpy.ndarray

property solution_dim

The dimension of solutions produced by this emitter.

Type

int

property upper_bounds

(solution_dim,) array with upper bounds of solution space.

For instance, [1, 1, 1] indicates that every dimension of the solution space has an upper bound of 1.

Type

numpy.ndarray

property x0

Center of the Gaussian distribution from which to sample solutions when the archive is empty (if initial_solutions is not set).

Type

numpy.ndarray