ribs.emitters.GeneticAlgorithmEmitter¶
-
class ribs.emitters.GeneticAlgorithmEmitter(archive: ArchiveBase, *, operator: str, operator_kwargs: dict | None =
None, x0: ArrayLike | None =None, initial_solutions: ArrayLike | None =None, bounds: Collection[tuple[None | Float, None | Float]] | None =None, lower_bounds: ArrayLike | None =None, upper_bounds: ArrayLike | None =None, batch_size: Int =64, seed: Int | None =None)[source]¶ Creates solutions with a genetic algorithm.
If the archive is empty and
initial_solutionsis set, a call toask()will returninitial_solutions. Ifinitial_solutionsis not set, we passx0through the operator.- Parameters:¶
- archive: ArchiveBase¶
Archive of solutions, e.g.,
ribs.archives.GridArchive.- operator: str¶
Internal operator for mutating solutions. See
ribs.emitters.operatorsfor the list of allowed names.- operator_kwargs: dict | None =
None¶ Additional arguments to pass to the operator. See
ribs.emitters.operatorsfor the arguments allowed by each operator.- x0: ArrayLike | None =
None¶ Initial solution.
- initial_solutions: ArrayLike | None =
None¶ An (n, solution_dim) array of solutions to be used when the archive is empty, in lieu of
x0.- bounds: Collection[tuple[None | Float, None | Float]] | None =
None¶ Bounds of the solution space. 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), wherelower_boundorupper_boundmay be None to indicate no bound. Unbounded upper bounds are set to +inf, and unbounded lower bounds are set to -inf.- lower_bounds: ArrayLike | None =
None¶ Instead of specifying
bounds,lower_boundsandupper_boundsmay be specified. This is useful if, for instance, solutions are multi-dimensional. Here, pass None to indicate there are no bounds (i.e., bounds are set to -inf), or pass an array specifying the lower bounds of the solution space.- upper_bounds: ArrayLike | None =
None¶ Upper bounds of the solution space; see
lower_boundsabove. Pass None to indicate there are no bounds (i.e., bounds are set to inf).- batch_size: Int =
64¶ Number of solutions to return in
ask().- seed: Int | None =
None¶ 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 with the provided operator.
ask_dqd()Generates 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.
Attributes
Stores solutions generated by this emitter.
Number of solutions to return in
ask().Returned when the archive is empty (if
x0is not set).(solution_dim,)array with lower bounds of solution space.Dimensionality of solutions produced by this emitter.
(solution_dim,)array with upper bounds of solution space.Initial solution (if
initial_solutionsis not set).- ask() ndarray[source]¶
Creates solutions with the provided operator.
If the archive is empty and
initial_solutionsis set, a call toask()will returninitial_solutions. Ifinitial_solutionsis not set, we passx0through the operator. Otherwise, we sample parents from the archive to be passed to the operator.- Returns:¶
If the archive is not empty,
(batch_size, solution_dim)array – containsbatch_sizenew solutions to evaluate. If the archive is empty, we returninitial_solutions, which might not havebatch_sizesolutions.- Raises:¶
ValueError – The
parent_typeof the operator is unknown.
- ask_dqd() ndarray¶
Generates solutions for which gradient information must be computed.
The solutions should be a
(batch_size, solution_dim)array.This method only needs to be implemented by emitters used in DQD. It returns an empty array by default.
- tell(solution: numpy.typing.ArrayLike, objective: numpy.typing.ArrayLike, measures: numpy.typing.ArrayLike, add_info: dict[str, ndarray], **fields: numpy.typing.ArrayLike) None¶
Gives the emitter results from evaluating solutions.
This base class implementation (in
EmitterBase) does nothing by default.- Parameters:¶
- solution: numpy.typing.ArrayLike¶
Array of solutions generated by this emitter’s
ask()method.- objective: numpy.typing.ArrayLike¶
1D array containing the objective function value of each solution.
- measures: numpy.typing.ArrayLike¶
(n, <measure space dimension>)array with the measure space coordinates of each solution.- add_info: dict[str, ndarray]¶
Data returned from the archive
add()method.- **fields: numpy.typing.ArrayLike¶
Additional data for each solution. Each argument should be an array with batch_size as the first dimension.
- tell_dqd(solution: numpy.typing.ArrayLike, objective: numpy.typing.ArrayLike, measures: numpy.typing.ArrayLike, jacobian: numpy.typing.ArrayLike, add_info: dict[str, ndarray], **fields: numpy.typing.ArrayLike) None¶
Gives the emitter results from evaluating the gradient of the solutions.
This method is the counterpart of
ask_dqd(). It is only used by DQD emitters.- Parameters:¶
- solution: numpy.typing.ArrayLike¶
(batch_size, :attr:`solution_dim`)array of solutions generated by this emitter’sask()method.- objective: numpy.typing.ArrayLike¶
1-dimensional array containing the objective function value of each solution.
- measures: numpy.typing.ArrayLike¶
(batch_size, measure space dimension)array with the measure space coordinates of each solution.- jacobian: numpy.typing.ArrayLike¶
(batch_size, 1 + measure_dim, solution_dim)array consisting of Jacobian matrices of the solutions obtained fromask_dqd(). Each matrix should consist of the objective gradient of the solution followed by the measure gradients.- add_info: dict[str, ndarray]¶
Data returned from the archive
add()method.- **fields: numpy.typing.ArrayLike¶
Additional data for each solution. Each argument should be an array with batch_size as the first dimension.
- property archive : ArchiveBase¶
Stores solutions generated by this emitter.
- property lower_bounds : ndarray¶
(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.
- property solution_dim : int | integer | tuple[int | integer, ...]¶
Dimensionality of solutions produced by this emitter.