ribs


Nameribs JSON
Version 0.7.1 PyPI version JSON
download
home_pagehttps://github.com/icaros-usc/pyribs
SummaryA bare-bones Python library for quality diversity optimization.
upload_time2024-03-14 09:54:51
maintainer
docs_urlNone
authorICAROS Lab pyribs Team
requires_python>=3.8.0
licenseMIT license
keywords ribs
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # pyribs

|                                                        Discord                                                        |                     Mailing List                     |                                                                   Twitter                                                                    |
| :-------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------: |
| [![](https://dcbadge.vercel.app/api/server/QxhcJSqZ8G?compact=true&style=flat-square)](https://discord.gg/QxhcJSqZ8G) | [Google Groups](https://groups.google.com/g/pyribs/) | [![Twitter](https://img.shields.io/badge/twitter-%231DA1F2.svg?&style=flat-square&logo=twitter&logoColor=white)](https://twitter.com/pyribs) |

|             Website              |                     Source                     |                    Docs                    |                    Paper                     |
| :------------------------------: | :--------------------------------------------: | :----------------------------------------: | :------------------------------------------: |
| [pyribs.org](https://pyribs.org) | [GitHub](https://github.com/icaros-usc/pyribs) | [docs.pyribs.org](https://docs.pyribs.org) | [pyribs.org/paper](https://pyribs.org/paper) |

|                                                       PyPI                                                        |                                                               Conda                                                                |                                                                                                      CI/CD                                                                                                       |                                                                   Docs Status                                                                    |
| :---------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------: |
| [![PyPI](https://img.shields.io/pypi/v/ribs.svg?style=flat-square&color=blue)](https://pypi.python.org/pypi/ribs) | [![Conda Recipe](https://img.shields.io/badge/recipe-pyribs-green.svg?style=flat-square)](https://anaconda.org/conda-forge/pyribs) | [![Tests](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Factions-badge.atrox.dev%2Ficaros-usc%2Fpyribs%2Fbadge&style=flat-square)](https://github.com/icaros-usc/pyribs/actions?query=workflow%3A"Tests") | [![Documentation Status](https://readthedocs.org/projects/ribs/badge/?version=stable&style=flat-square)](https://readthedocs.org/projects/ribs/) |

A _bare-bones_ Python library for quality diversity (QD) optimization. Pyribs
implements the highly modular _Rapid Illumination of Behavior Space (RIBS)_
framework for QD optimization. Pyribs is also the official implementation of
Covariance Matrix Adaptation MAP-Elites (CMA-ME), Covariance Matrix Adaptation
MAP-Elites via a Gradient Arborescence (CMA-MEGA), Covariance Matrix Adaptation
MAP-Annealing (CMA-MAE), and scalable variants of CMA-MAE.

## Community

**Join the
[Pyribs Announcements mailing list](https://groups.google.com/g/pyribs/)** for
infrequent updates (less than 1/month) on the status of the project and new
releases.

Need some help? Want to ask if pyribs is right for your project? Have a question
that is not quite a bug and not quite a feature request?

**Join the [community Discord](https://discord.gg/QxhcJSqZ8G)!**

## Overview

![Types of Optimization](readme_assets/optimization_types.png)

[Quality diversity (QD) optimization](https://arxiv.org/abs/2012.04322) is a
subfield of optimization where solutions generated cover every point in a
_measure_ space while simultaneously maximizing (or minimizing) a single
_objective_. QD algorithms within the MAP-Elites family of QD algorithms produce
heatmaps (archives) as output where each cell contains the best discovered
representative of a region in measure space.

> In the QD literature, measure function outputs have also been referred to as
> "behavioral characteristics," "behavior descriptors," or "feature
> descriptors."

Recent years have seen the development of a large number of QD algorithms. To
represent these and future algorithms, we have developed the highly modular RIBS
framework. RIBS divides a QD algorithm into three components:

- An **archive**, which saves generated solutions within measure space.
- One or more **emitters**, where each emitter is an algorithm which generates
  new candidate solutions and responds to feedback about how the solutions were
  evaluated and how they were inserted into the archive.
- A **scheduler** that controls the interaction of the **archive** and
  **emitters**. The **scheduler** also provides an interface for requesting new
  candidate solutions and telling the algorithm how candidates performed.

By interchanging these components, a user can compose a large number of QD
algorithms.

Pyribs is an implementation of the RIBS framework designed to support a wide
range of users, from beginners entering the field to experienced researchers
seeking to develop new algorithms. Pyribs achieves these goals by embodying
three principles:

- **Simple:** Centered _only_ on components that are absolutely necessary to run
  a QD algorithm, allowing users to combine the framework with other software
  frameworks.
- **Flexible:** Capable of representing a wide range of current and future QD
  algorithms, allowing users to easily create or modify components.
- **Accessible:** Easy to install and learn, particularly for beginners with
  limited computational resources.

In contrast to other QD libraries, pyribs is "bare-bones." For example, like
[pycma](https://pypi.org/project/cma/), pyribs focuses solely on optimizing
fixed-dimensional continuous domains. Focusing on this one commonly-occurring
problem allows us to optimize the library for performance as well as ease of
use. Refer to the list of [additional QD libraries](#additional-qd-libraries)
below if you need to handle additional use cases.

Following the RIBS framework (shown in the figure below), a standard algorithm
in pyribs operates as follows:

1. The user calls the `ask()` method on the scheduler. The scheduler requests
   solutions from each emitter by calling the emitter's `ask()` method.
2. The user evaluates solutions to obtain the objective and measure values.
3. The user passes the evaluations to the scheduler's `tell()` method. The
   scheduler adds the solutions into the archive and receives feedback. The
   scheduler passes this feedback along with the evaluated solutions to each
   emitter's `tell()` method, and each emitter then updates its internal state.

![The RIBS framework](readme_assets/ribs.png)

## Installation

pyribs supports Python 3.8 and above. The vast majority of users can install
pyribs by running:

```bash
pip install ribs[visualize]
```

The command above includes the `visualize` extra. If you will not be using the
pyribs visualization tools, you can install the base version of pyribs with:

```bash
pip install ribs
```

For more specific installation commands (e.g., installing from Conda or
installing from source), visit the
[installation selector](https://pyribs.org/#installation) on our website.

To test your installation, import pyribs and print the version with this
command:

```bash
python -c "import ribs; print(ribs.__version__)"
```

You should see a version number in the output.

## Usage

Here we show an example application of CMA-ME in pyribs. To initialize the
algorithm, we first create:

- A 2D **GridArchive** where each dimension contains 20 cells across the range
  [-1, 1].
- Three instances of **EvolutionStrategyEmitter**, all of which start from the
  search point **0** in 10-dimensional space and a Gaussian sampling
  distribution with standard deviation 0.1.
- A **Scheduler** that combines the archive and emitters together.

After initializing the components, we optimize (pyribs maximizes) the negative
10-D Sphere function for 1000 iterations. Users of
[pycma](https://pypi.org/project/cma/) will be familiar with the ask-tell
interface (which pyribs adopted). First, the user must `ask` the scheduler for
new candidate solutions. After evaluating the solution, they `tell` the
scheduler the objectives and measures of each candidate solution. The algorithm
then populates the archive and makes decisions on where to sample solutions
next. Our toy example uses the first two parameters of the search space as
measures.

```python
import numpy as np

from ribs.archives import GridArchive
from ribs.emitters import EvolutionStrategyEmitter
from ribs.schedulers import Scheduler

archive = GridArchive(
    solution_dim=10,
    dims=[20, 20],
    ranges=[(-1, 1), (-1, 1)],
)
emitters = [
    EvolutionStrategyEmitter(
        archive,
        x0=[0.0] * 10,
        sigma0=0.1,
    ) for _ in range(3)
]
scheduler = Scheduler(archive, emitters)

for itr in range(1000):
    solutions = scheduler.ask()

    # Optimize the 10D negative Sphere function.
    objective_batch = -np.sum(np.square(solutions), axis=1)

    # Measures: first 2 coordinates of each 10D solution.
    measures_batch = solutions[:, :2]

    scheduler.tell(objective_batch, measures_batch)
```

To visualize this archive with Matplotlib, we then use the
`grid_archive_heatmap` function from `ribs.visualize`.

```python
import matplotlib.pyplot as plt
from ribs.visualize import grid_archive_heatmap

grid_archive_heatmap(archive)
plt.show()
```

![Sphere heatmap](readme_assets/sphere_heatmap.png)

## Documentation

**The documentation is available online [here](https://docs.pyribs.org/). We
suggest that new users start with the
[tutorials](https://docs.pyribs.org/en/stable/tutorials.html).**

## Paper and Citation

Two years after the initial release of pyribs, we released a paper that
elaborates on the RIBS framework and the design decisions behind pyribs. For
more information on this paper, see [here](https://pyribs.org/paper). If you use
pyribs in your research, please consider citing this paper as follows. Also
consider citing any algorithms you use as shown
[below](#citing-algorithms-in-pyribs).

```
@inproceedings{10.1145/3583131.3590374,
  author = {Tjanaka, Bryon and Fontaine, Matthew C and Lee, David H and Zhang, Yulun and Balam, Nivedit Reddy and Dennler, Nathaniel and Garlanka, Sujay S and Klapsis, Nikitas Dimitri and Nikolaidis, Stefanos},
  title = {Pyribs: A Bare-Bones Python Library for Quality Diversity Optimization},
  year = {2023},
  isbn = {9798400701191},
  publisher = {Association for Computing Machinery},
  address = {New York, NY, USA},
  url = {https://doi.org/10.1145/3583131.3590374},
  doi = {10.1145/3583131.3590374},
  abstract = {Recent years have seen a rise in the popularity of quality diversity (QD) optimization, a branch of optimization that seeks to find a collection of diverse, high-performing solutions to a given problem. To grow further, we believe the QD community faces two challenges: developing a framework to represent the field's growing array of algorithms, and implementing that framework in software that supports a range of researchers and practitioners. To address these challenges, we have developed pyribs, a library built on a highly modular conceptual QD framework. By replacing components in the conceptual framework, and hence in pyribs, users can compose algorithms from across the QD literature; equally important, they can identify unexplored algorithm variations. Furthermore, pyribs makes this framework simple, flexible, and accessible, with a user-friendly API supported by extensive documentation and tutorials. This paper overviews the creation of pyribs, focusing on the conceptual framework that it implements and the design principles that have guided the library's development. Pyribs is available at https://pyribs.org},
  booktitle = {Proceedings of the Genetic and Evolutionary Computation Conference},
  pages = {220–229},
  numpages = {10},
  keywords = {framework, quality diversity, software library},
  location = {Lisbon, Portugal},
  series = {GECCO '23}
}
```

## Contributors

pyribs is developed and maintained by the [ICAROS Lab](http://icaros.usc.edu) at
USC. For information on contributing to the repo, see
[CONTRIBUTING](./CONTRIBUTING.md).

- [Bryon Tjanaka](https://btjanaka.net)
- [Matthew C. Fontaine](https://scholar.google.com/citations?user=RqSvzikAAAAJ)
- [David H. Lee](https://github.com/itsdawei)
- [Yulun Zhang](https://github.com/lunjohnzhang)
- [Nivedit Reddy Balam](https://www.linkedin.com/in/nivedit-reddy)
- [Nathan Dennler](https://ndennler.github.io/)
- [Sujay S. Garlanka](https://sujaygarlanka.com)
- Nikitas Klapsis
- [Robby Costales](https://robbycostales.com)
- [Sam Sommerer](https://github.com/sam-sommerer)
- [Vincent Vu](https://vuvincent.com/)
- [Stefanos Nikolaidis](https://stefanosnikolaidis.net)

We thank [Amy K. Hoover](http://amykhoover.com/) and
[Julian Togelius](http://julian.togelius.com/) for their contributions deriving
the CMA-ME algorithm.

## Users

pyribs users include:

<!-- Alphabetical order -->

- [Adam Gaier (Autodesk Research)](https://scholar.google.com/citations?user=GGyARB8AAAAJ)
- [Adaptive & Intelligent Robotics Lab (Imperial College London)](https://www.imperial.ac.uk/adaptive-intelligent-robotics)
- [Chair of Statistical Learning and Data Science (LMU Munich)](https://www.slds.stat.uni-muenchen.de/)
- [Game Innovation Lab (New York University)](https://game.engineering.nyu.edu)
- [Giovanni Iacca (University of Trento)](https://sites.google.com/site/giovanniiacca/)
- [HUAWEI Noah's Ark Lab](https://github.com/huawei-noah)
- [ICAROS Lab (University of Southern California)](http://icaros.usc.edu/)
- [Jacob Schrum (Southwestern University)](https://github.com/schrum2/PyribsForGameGAN)
- [Lenia Research](https://lenia.world)
- [Paul Kent (The University of Warwick)](https://warwick.ac.uk/fac/sci/mathsys/people/students/2018intake/kent/)
- [Various](https://github.com/ganyariya/mario_pytorch)
  [researchers](https://direct.mit.edu/isal/proceedings/isal/33/112256) at the
  University of Tsukuba

### Publications

For the list of publications that use pyribs, refer to our
[Google Scholar entry](https://scholar.google.com/scholar?cites=1780392371068190395).

### Software

See the
[GitHub dependency graph](https://github.com/icaros-usc/pyribs/network/dependents)
for the public GitHub repositories which depend on pyribs.

## Citing Algorithms in pyribs

If you use the following algorithms, please consider citing their relevant
papers:

- **CMA-ME:** [Fontaine 2020](https://dl.acm.org/doi/10.1145/3377930.3390232)
  ```
  @inproceedings{10.1145/3377930.3390232,
    author = {Fontaine, Matthew C. and Togelius, Julian and Nikolaidis, Stefanos and Hoover, Amy K.},
    title = {Covariance Matrix Adaptation for the Rapid Illumination of Behavior Space},
    year = {2020},
    isbn = {9781450371285},
    publisher = {Association for Computing Machinery},
    address = {New York, NY, USA},
    url = {https://doi.org/10.1145/3377930.3390232},
    doi = {10.1145/3377930.3390232},
    booktitle = {Proceedings of the 2020 Genetic and Evolutionary Computation Conference},
    pages = {94–102},
    numpages = {9},
    location = {Canc\'{u}n, Mexico},
    series = {GECCO '20}
  }
  ```
- **CMA-MEGA:**
  [Fontaine 2021](https://proceedings.neurips.cc/paper/2021/hash/532923f11ac97d3e7cb0130315b067dc-Abstract.html)
  ```
  @inproceedings{NEURIPS2021_532923f1,
   author = {Fontaine, Matthew and Nikolaidis, Stefanos},
   booktitle = {Advances in Neural Information Processing Systems},
   editor = {M. Ranzato and A. Beygelzimer and Y. Dauphin and P.S. Liang and J. Wortman Vaughan},
   pages = {10040--10052},
   publisher = {Curran Associates, Inc.},
   title = {Differentiable Quality Diversity},
   url = {https://proceedings.neurips.cc/paper/2021/file/532923f11ac97d3e7cb0130315b067dc-Paper.pdf},
   volume = {34},
   year = {2021}
  }
  ```
- **CMA-MAE:** [Fontaine 2022](https://arxiv.org/abs/2205.10752)
  ```
  @misc{cmamae,
    doi = {10.48550/ARXIV.2205.10752},
    url = {https://arxiv.org/abs/2205.10752},
    author = {Fontaine, Matthew C. and Nikolaidis, Stefanos},
    keywords = {Machine Learning (cs.LG), Artificial Intelligence (cs.AI), FOS: Computer and information sciences, FOS: Computer and information sciences},
    title = {Covariance Matrix Adaptation MAP-Annealing},
    publisher = {arXiv},
    year = {2022},
    copyright = {arXiv.org perpetual, non-exclusive license}
  }
  ```
- **Scalable CMA-MAE:** [Tjanaka 2022](https://arxiv.org/abs/2210.02622)
  ```
  @ARTICLE{10243102,
    author={Tjanaka, Bryon and Fontaine, Matthew C. and Lee, David H. and Kalkar, Aniruddha and Nikolaidis, Stefanos},
    journal={IEEE Robotics and Automation Letters},
    title={Training Diverse High-Dimensional Controllers by Scaling Covariance Matrix Adaptation MAP-Annealing},
    year={2023},
    volume={8},
    number={10},
    pages={6771-6778},
    keywords={Covariance matrices;Training;Neural networks;Legged locomotion;Reinforcement learning;Evolutionary robotics;Evolutionary robotics;reinforcement learning},
    doi={10.1109/LRA.2023.3313012}
  }
  ```

## Additional QD Libraries

- [QDax](https://github.com/adaptive-intelligent-robotics/QDax): Implementations
  of QD algorithms in JAX. QDax is suitable if you want to run entire QD
  algorithms on hardware accelerators in a matter of minutes, and it is
  particularly useful if you need to interface with Brax environments.
- [qdpy](https://gitlab.com/leo.cazenille/qdpy/): Python implementations of a
  wide variety of QD algorithms.
- [sferes](https://github.com/sferes2/sferes2): Contains C++ implementations of
  QD algorithms; can also handle discrete domains.

## License

pyribs is released under the
[MIT License](https://github.com/icaros-usc/pyribs/blob/master/LICENSE).

## Credits

The pyribs package was initially created with
[Cookiecutter](https://github.com/audreyr/cookiecutter) and the
[audreyr/cookiecutter-pypackage](https://github.com/audreyr/cookiecutter-pypackage)
project template.


# History

## 0.7.1

This release introduces the
[QDHF tutorial](https://docs.pyribs.org/en/stable/tutorials/qdhf.html)! It also
makes a couple of minor usability improvements, such as better error checking.

### Changelog

#### API

- Support Python 3.12 ({pr}`390`)

#### Improvements

- Add qd score to lunar lander example ({pr}`458`)
- Raise error if `result_archive` and `archive` have different fields
  ({pr}`461`)
- Warn user if resampling for bounds takes too long in ESs ({pr}`462`)

#### Documentation

- Add QDHF tutorial ({pr}`459`)

#### Bugs

- Fix solution retrieval in lunar lander eval ({pr}`457`)

## 0.7.0

To learn about this release, see our page on What's New in v0.7.0:
https://docs.pyribs.org/en/stable/whats-new.html

### Changelog

#### API

- Support alternative centroid generation methods in CVTArchive ({pr}`417`,
  {pr}`437`)
- Add PyCMAEvolutionStrategy for using pycma in ES emitters ({pr}`434`)
- **Backwards-incompatible:** Add ranking values to evolution strategy tell
  method ({pr}`438`)
- **Backwards-incompatible:** Move evolution strategy bounds to init ({pr}`436`)
- **Backwards-incompatible:** Use seed instead of rng in ranker ({pr}`432`)
- **Backwards-incompatible:** Replace status and value with add_info ({pr}`430`)
- Support custom data fields in archive, emitters, and scheduler ({pr}`421`,
  {pr}`429`)
- **Backwards-incompatible:** Remove `_batch` from parameter names ({pr}`422`,
  {pr}`424`, {pr}`425`, {pr}`426`, {pr}`428`)
- Add Gaussian, IsoLine Operators and Refactor GaussianEmitter/IsoLineEmitter
  ({pr}`418`)
- **Backwards-incompatible:** Remove metadata in favor of custom fields
  ({pr}`420`)
- Add Base Operator Interface and Emitter Operator Retrieval ({pr}`416`)
- **Backwards-incompatible:** Return occupied booleans in retrieve ({pr}`414`)
- **Backwards-incompatible:** Deprecate `as_pandas` in favor of
  `data(return_type="pandas")` ({pr}`408`)
- **Backwards-incompatible:** Replace ArchiveDataFrame batch methods with
  `get_field` ({pr}`413`)
- Add field_list and data methods to archives ({pr}`412`)
- Include threshold in `archive.best_elite` ({pr}`409`)
- **Backwards-incompatible:** Replace Elite and EliteBatch with dicts
  ({pr}`397`)
- **Backwards-incompatible:** Rename `measure_*` columns to `measures_*` in
  `as_pandas` ({pr}`396`)
- Add ArrayStore data structure ({pr}`395`, {pr}`398`, {pr}`400`, {pr}`402`,
  {pr}`403`, {pr}`404`, {pr}`406`, {pr}`407`, {pr}`411`)
- Add GradientOperatorEmitter to support OMG-MEGA and OG-MAP-Elites ({pr}`348`)

#### Improvements

- Raise error when threshold_min is set but learning_rate is not ({pr}`453`)
- Fix interval_size in CVTArchive and SlidingBoundariesArchive ({pr}`452`)
- Allow overriding ES in sphere example ({pr}`439`)
- Use NumPy SeedSequence in emitters ({pr}`431`, {pr}`440`)
- Use numbers types when checking arguments ({pr}`419`)
- Reimplement ArchiveBase using ArrayStore ({pr}`399`)
- Use chunk computation in CVT brute force calculation to reduce memory usage
  ({pr}`394`)
- Test pyribs installation in tutorials ({pr}`384`)
- Add cron job for testing installation ({pr}`389`, {pr}`401`)
- Fix broken cross-refs in docs ({pr}`393`)

#### Documentation

- Tidy up LSI MNIST notebook ({pr}`444`)

## 0.6.4

Small release that adds the scalable CMA-MAE tutorial.

### Changelog

#### Documentation

- Add tutorial on scalable CMA-MAE variants ({pr}`433`, {pr}`443`)

## 0.6.3

Small patch release due to deprecation issues.

### Changelog

#### Improvements

- Replace np.product with np.prod due to deprecation ({pr}`385`)

## 0.6.2

Small patch release due to installation issues in our tutorials.

### Changelog

#### API

- Import ribs[visualize] in tutorials that need it ({pr}`379`)

#### Improvements

- Switch to a branch-based release model ({pr}`382`)

## 0.6.1

(This release was removed)

## 0.6.0

### Changelog

#### API

- Drop Python 3.7 support and upgrade dependencies ({pr}`350`)
- Add visualization of QDax repertoires ({pr}`353`)
- Improve cvt_archive_heatmap flexibility ({pr}`354`)
- Clip Voronoi regions in cvt_archive_heatmap ({pr}`356`)
- **Backwards-incompatible:** Allow using kwargs for colorbar in
  parallel_axes_plot ({pr}`358`)
  - Removes cbar_orientaton and cbar_pad args for parallel_axes_plot
- Add `rasterized` arg for heatmaps ({pr}`359`)
- Support 1D cvt_archive_heatmap ({pr}`362`)
- Add 3D plots for CVTArchive ({pr}`371`)
- Add visualization of 3D QDax repertoires ({pr}`373`)
- Enable plotting custom data in visualizations ({pr}`374`)

#### Documentation

- Use dask instead of multiprocessing for lunar lander tutorial ({pr}`346`)
- pip install swig before gymnasium[box2d] in lunar lander tutorial ({pr}`346`)
- Fix lunar lander dependency issues ({pr}`366`, {pr}`367`)
- Simplify DQD tutorial imports ({pr}`369`)
- Improve visualization docs examples ({pr}`372`)

#### Improvements

- Improve developer workflow with pre-commit ({pr}`351`, {pr}`363`)
- Speed up 2D cvt_archive_heatmap by order of magnitude ({pr}`355`)
- Refactor visualize module into multiple files ({pr}`357`)
- Refactor visualize tests into multiple files ({pr}`370`)
- Add GitHub link roles in documentation ({pr}`361`)
- Refactor argument validation utilities ({pr}`365`)
- Use Conda envs in all CI jobs ({pr}`368`)
- Split tutorial CI into multiple jobs ({pr}`375`)

## 0.5.2

This release contains miscellaneous edits to our documentation from v0.5.1.
Furthermore, the library is updated to support Python 3.11, removed deprecated
options, and strengthened with more robust checks and error messages in the
schedulers.

### Changelog

#### API

- Support Python 3.11 ({pr}`342`)
- Check that emitters passed in are lists/iterables in scheduler ({pr}`341`)
- Fix Matplotlib `get_cmap` deprecation ({pr}`340`)
- **Backwards-incompatible:** Default `plot_centroids` to False when plotting
  ({pr}`339`)
- Raise error messages when `ask` is called without `ask_dqd` ({pr}`338`)

#### Documentation

- Add BibTex citation for GECCO 2023 ({pr}`337`)

#### Improvements

- Update distribution dependencies ({pr}`344`)

## 0.5.1

This release contains miscellaneous edits to our documentation from v0.5.0.
There were no changes to library functionality in this release.

## 0.5.0

To learn about this release, see our page on What's New in v0.5.0:
https://docs.pyribs.org/en/stable/whats-new.html

### Changelog

#### API

- Schedulers warn if no solutions are inserted into archive ({pr}`320`)
- Implement `BanditScheduler` ({pr}`299`)
- **Backwards-incompatible:** Implement Scalable CMA-ES Optimizers ({pr}`274`,
  {pr}`288`)
- Make ribs.emitters.opt public ({pr}`281`)
- Add normalized QD score to ArchiveStats ({pr}`276`)
- **Backwards-incompatible:** Make ArchiveStats a dataclass ({pr}`275`)
- **Backwards-incompatible:** Add shape checks to `tell()` and `tell_dqd()`
  methods ({pr}`269`)
- Add method for computing CQD score in archives ({pr}`252`)
- **Backwards-incompatible:** Deprecate positional arguments in constructors
  ({pr}`261`)
- **Backwards-incompatible:** Allow custom initialization in Gaussian and
  IsoLine emitters ({pr}`259`, {pr}`265`)
- Implement CMA-MAE archive thresholds ({pr}`256`, {pr}`260`, {pr}`314`)
  - Revive the old implementation of `add_single` removed in ({pr}`221`)
  - Add separate tests for `add_single` and `add` with single solution
- Fix all examples and tutorials ({pr}`253`)
- Add restart timer to `EvolutionStrategyEmitter` and
  `GradientArborescenceEmitter`({pr}`255`)
- Rename fields and update documentation ({pr}`249`, {pr}`250`)
  - **Backwards-incompatible:** rename `Optimizer` to `Scheduler`
  - **Backwards-incompatible:** rename `objective_value` to `objective`
  - **Backwards-incompatible:** rename `behavior_value`/`bcs` to `measures`
  - **Backwards-incompatible:** `behavior_dim` in archives is now `measure_dim`
  - Rename `n_solutions` to `batch_size` in `Scheduler`.
- Add `GradientArborescenceEmitter`, which is used to implement CMA-MEGA
  ({pr}`240`, {pr}`263`, {pr}`264`, {pr}`282`, {pr}`321`)
- Update emitter `tell()` docstrings to no longer say "Inserts entries into
  archive" ({pr}`247`)
- Expose `emitter.restarts` as a property ({pr}`248`)
- Specify that `x0` is 1D for all emitters ({pr}`244`)
- Add `best_elite` property for archives ({pr}`237`)
- Rename methods in ArchiveDataFrame and rename as_pandas behavior columns
  ({pr}`236`)
- Re-run CVTArchive benchmarks and update CVTArchive ({pr}`235`, {pr}`329`)
  - **Backwards-incompatible:** `use_kd_tree` now defaults to True since the k-D
    tree is always faster than brute force in benchmarks.
- Allow adding solutions one at a time in optimizer ({pr}`233`)
- Minimize numba usage ({pr}`232`)
- **Backwards-incompatible:** Implement batch addition in archives ({pr}`221`,
  {pr}`242`)
  - `add` now adds a batch of solutions to the archive
  - `add_single` adds a single solution
- `emitter.tell` now takes in `status_batch` and `value_batch` ({pr}`227`)
- Make epsilon configurable in archives ({pr}`226`)
- **Backwards-incompatible:** Remove ribs.factory ({pr}`225`, {pr}`228`)
- **Backwards-incompatible:** Replaced `ImprovementEmitter`,
  `RandomDirectionEmitter`, and `OptimizingEmitter` with
  `EvolutionStrategyEmitter` ({pr}`220`, {pr}`223`, {pr}`278`)
- Raise ValueError for incorrect array shapes in archive methods ({pr}`219`)
- Introduced the Ranker object, which is responsible for ranking the solutions
  based on different objectives ({pr}`209`, {pr}`222`, {pr}`245`)
- Add index_of_single method for getting index of measures for one solution
  ({pr}`214`)
- **Backwards-incompatible:** Replace elite_with_behavior with retrieve and
  retrieve_single in archives ({pr}`213`, {pr}`215`, {pr}`295`)
- **Backwards-incompatible:** Replace get_index with batched index_of method in
  archives ({pr}`208`)
  - Also added `grid_to_int_index` and `int_to_grid_index` methods for
    `GridArchive` and `SlidingBoundariesArchive`
- **Backwards-incompatible:** Made it such that each archive is initialized
  fully in its constructor instead of needing a separate
  .initialize(solution_dim) call ({pr}`200`)
- **Backwards-incompatible:** Add `sigma`, `sigma0` options to
  `gaussian_emitter` and `iso_line_emitter` ({pr}`199`)
  - `gaussian_emitter` constructor requires `sigma`; `sigma0` is optional.
  - `iso_line_emitter` constructor takes in optional parameter `sigma0`.
- **Backwards-incompatible:** Add `cbar`, `aspect` options for
  `cvt_archive_heatmap` ({pr}`197`)
- **Backwards-incompatible:** Add `aspect` option to `grid_archive_heatmap` +
  support for 1D heatmaps ({pr}`196`)
  - `square` option no longer works
- **Backwards-incompatible:** Add `cbar` option to `grid_archive_heatmap`
  ({pr}`193`)
- **Backwards-incompatible:** Replace `get_random_elite()` with batched
  `sample_elites()` method ({pr}`192`)
- **Backwards-incompatible:** Add EliteBatch and rename fields in Elite
  ({pr}`191`)
- **Backwards-incompatible:** Rename bins to cells for consistency with
  literature ({pr}`189`)
  - Archive constructors now take in `cells` argument instead of `bins`
  - Archive now have a `cells` property rather than a `bins` property
- **Backwards-incompatible:** Only use integer indices in archives ({pr}`185`)
  - `ArchiveBase`
    - Replaced `storage_dims` (tuple of int) with `storage_dim` (int)
    - `_occupied_indices` is now a fixed-size array with `_num_occupied`
      indicating its current usage, and `_occupied_indices_cols` has been
      removed
    - `index_of` must now return an integer

#### Bugs

- Fix boundary lines in sliding boundaries archive heatmap ({pr}`271`)
- Fix negative eigenvalue in CMA-ES covariance matrix ({pr}`285`)

#### Documentation

- Speed up lunar lander tutorial ({pr}`319`)
- Add DQDTutorial ({pr}`267`)
- Remove examples extra in favor of individual example deps ({pr}`306`)
- Facilitate linking to latest version of documentation ({pr}`300`)
- Update lunar lander tutorial with v0.5.0 features ({pr}`292`)
- Improve tutorial and example overviews ({pr}`291`)
- Move tutorials out of examples folder ({pr}`290`)
- Update lunar lander to use Gymnasium ({pr}`289`)
- Add CMA-MAE tutorial ({pr}`273`, {pr}`284`)
- Update README ({pr}`279`)
- Add sphinx-codeautolink to docs ({pr}`206`, {pr}`280`)
- Fix documentation rendering issues on ReadTheDocs ({pr}`205`)
- Fix typos and formatting in docstrings of `ribs/visualize.py` ({pr}`203`)
- Add in-comment type hint rich linking ({pr}`204`)
- Upgrade Sphinx dependencies ({pr}`202`)

#### Improvements

- Move threadpoolctl from optimizer to CMA-ES ({pr}`241`)
- Remove unnecessary emitter benchmarks ({pr}`231`)
- Build docs during CI/CD workflow ({pr}`211`)
- Drop Python 3.6 and add Python 3.10 support ({pr}`181`)
- Add procedure for updating changelog ({pr}`182`)
- Add 'visualize' extra ({pr}`183`, {pr}`184`, {pr}`302`)

## 0.4.0 (2021-07-19)

To learn about this release, see our blog post: https://pyribs.org/blog/0-4-0

### Changelog

#### API

- Add ribs.visualize.parallel_axes_plot for analyzing archives with
  high-dimensional BCs ({pr}`92`)
- **Backwards-incompatible:** Reduce attributes and parameters in EmitterBase to
  make it easier to extend ({pr}`101`)
- In Optimizer, support emitters that return any number of solutions in ask()
  ({pr}`101`)
- **Backwards-incompatible:** Store metadata in archives as described in
  {pr}`87` ({pr}`103`, {pr}`114`, {pr}`115`, {pr}`119`)
- **Backwards-incompatible:** Rename "index" to "index_0" in
  CVTArchive.as_pandas for API consistency ({pr}`113`)
- **Backwards-incompatible:** Make index_of() public in archives to emphasize
  each index's meaning ({pr}`128`)
- **Backwards-incompatible:** Add index to get_random_elite() and
  elite_with_behavior() in archives ({pr}`129`)
- Add clear() method to archive ({pr}`140`, {pr}`146`)
- Represent archive elites with an Elite namedtuple ({pr}`142`)
- Add len and iter methods to archives ({pr}`151`, {pr}`152`)
- Add statistics to archives ({pr}`100`, {pr}`157`)
- Improve manipulation of elites by modifying as_pandas ({pr}`123`, {pr}`149`,
  {pr}`153`, {pr}`158`, {pr}`168`)
- Add checks for optimizer array and list shapes ({pr}`166`)

#### Documentation

- Add bibtex citations for tutorials ({pr}`122`)
- Remove network training from Fooling MNIST tutorial ({pr}`161`)
- Fix video display for lunar lander in Colab ({pr}`163`)
- Fix Colab links in stable docs ({pr}`164`)

#### Improvements

- Add support for Python 3.9 ({pr}`84`)
- Test with pinned versions ({pr}`110`)
- Increase minimum required versions for scipy and numba ({pr}`110`)
- Refactor as_pandas tests ({pr}`114`)
- Expand CI/CD to test examples and tutorials ({pr}`117`)
- Tidy up existing tests ({pr}`120`, {pr}`127`)
- Fix vocab in various areas ({pr}`138`)
- Fix dependency issues in tests ({pr}`139`)
- Remove tox from CI ({pr}`143`)
- Replace "entry" with "elite" in tests ({pr}`144`)
- Use new archive API in ribs.visualize implementation ({pr}`155`)

## 0.3.1 (2021-03-05)

This release features various bug fixes and improvements. In particular, we have
added tests for SlidingBoundariesArchive and believe it is ready for more
rigorous use.

### Changelog

- Move SlidingBoundariesArchive out of experimental by adding tests and fixing
  bugs ({pr}`93`)
- Added nicer figures to the Sphere example with `grid_archive_heatmap`
  ({pr}`86`)
- Added testing for Windows and MacOS ({pr}`83`)
- Fixed package metadata e.g. description

## 0.3.0 (2021-02-05)

pyribs is now in beta. Since our alpha release (0.2.0), we have polished the
library and added new tutorials and examples to our documentation.

### Changelog

- Added a Lunar Lander example that extends the lunar lander tutorial ({pr}`70`)
- Added New Tutorial: Illuminating the Latent Space of an MNIST GAN ({pr}`78`)
- GridArchive: Added a boundaries attribute with the upper and lower bounds of
  each dimension's bins ({pr}`76`)
- Fixed a bug where CMA-ME emitters do not work with float32 archives ({pr}`74`)
- Fixed a bug where Optimizer is able to take in non-unique emitter instances
  ({pr}`75`)
- Fixed a bug where GridArchive failed for float32 due to a small epsilon
  ({pr}`81`)
- Fix issues with bounds in the SlidingBoundaryArchive ({pr}`77`)
- Added clearer error messages for archives ({pr}`82`)
- Modified the Python requirements to allow any version above 3.6.0 ({pr}`68`)
- The wheel is now fixed so that it only supports py3 rather than py2 and py3
  ({pr}`68`)
- Miscellaneous documentation fixes ({pr}`71`)

## 0.2.0 (2021-01-29)

- Alpha release

## 0.2.1 (2021-01-29)

- Package metadata fixes (author, email, url)
- Miscellaneous documentation improvements

## 0.1.1 (2021-01-29)

- Test release (now removed)

## 0.1.0 (2020-09-11)

- Test release (now removed)

## 0.0.0 (2020-09-11)

- pyribs begins

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/icaros-usc/pyribs",
    "name": "ribs",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.8.0",
    "maintainer_email": "",
    "keywords": "ribs",
    "author": "ICAROS Lab pyribs Team",
    "author_email": "team@pyribs.org",
    "download_url": "https://files.pythonhosted.org/packages/02/c1/7aed1b6f36f64d442c2932cc7892fa54e23b3e9f3e67152b20e769833a6c/ribs-0.7.1.tar.gz",
    "platform": null,
    "description": "# pyribs\n\n|                                                        Discord                                                        |                     Mailing List                     |                                                                   Twitter                                                                    |\n| :-------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------: |\n| [![](https://dcbadge.vercel.app/api/server/QxhcJSqZ8G?compact=true&style=flat-square)](https://discord.gg/QxhcJSqZ8G) | [Google Groups](https://groups.google.com/g/pyribs/) | [![Twitter](https://img.shields.io/badge/twitter-%231DA1F2.svg?&style=flat-square&logo=twitter&logoColor=white)](https://twitter.com/pyribs) |\n\n|             Website              |                     Source                     |                    Docs                    |                    Paper                     |\n| :------------------------------: | :--------------------------------------------: | :----------------------------------------: | :------------------------------------------: |\n| [pyribs.org](https://pyribs.org) | [GitHub](https://github.com/icaros-usc/pyribs) | [docs.pyribs.org](https://docs.pyribs.org) | [pyribs.org/paper](https://pyribs.org/paper) |\n\n|                                                       PyPI                                                        |                                                               Conda                                                                |                                                                                                      CI/CD                                                                                                       |                                                                   Docs Status                                                                    |\n| :---------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------: |\n| [![PyPI](https://img.shields.io/pypi/v/ribs.svg?style=flat-square&color=blue)](https://pypi.python.org/pypi/ribs) | [![Conda Recipe](https://img.shields.io/badge/recipe-pyribs-green.svg?style=flat-square)](https://anaconda.org/conda-forge/pyribs) | [![Tests](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Factions-badge.atrox.dev%2Ficaros-usc%2Fpyribs%2Fbadge&style=flat-square)](https://github.com/icaros-usc/pyribs/actions?query=workflow%3A\"Tests\") | [![Documentation Status](https://readthedocs.org/projects/ribs/badge/?version=stable&style=flat-square)](https://readthedocs.org/projects/ribs/) |\n\nA _bare-bones_ Python library for quality diversity (QD) optimization. Pyribs\nimplements the highly modular _Rapid Illumination of Behavior Space (RIBS)_\nframework for QD optimization. Pyribs is also the official implementation of\nCovariance Matrix Adaptation MAP-Elites (CMA-ME), Covariance Matrix Adaptation\nMAP-Elites via a Gradient Arborescence (CMA-MEGA), Covariance Matrix Adaptation\nMAP-Annealing (CMA-MAE), and scalable variants of CMA-MAE.\n\n## Community\n\n**Join the\n[Pyribs Announcements mailing list](https://groups.google.com/g/pyribs/)** for\ninfrequent updates (less than 1/month) on the status of the project and new\nreleases.\n\nNeed some help? Want to ask if pyribs is right for your project? Have a question\nthat is not quite a bug and not quite a feature request?\n\n**Join the [community Discord](https://discord.gg/QxhcJSqZ8G)!**\n\n## Overview\n\n![Types of Optimization](readme_assets/optimization_types.png)\n\n[Quality diversity (QD) optimization](https://arxiv.org/abs/2012.04322) is a\nsubfield of optimization where solutions generated cover every point in a\n_measure_ space while simultaneously maximizing (or minimizing) a single\n_objective_. QD algorithms within the MAP-Elites family of QD algorithms produce\nheatmaps (archives) as output where each cell contains the best discovered\nrepresentative of a region in measure space.\n\n> In the QD literature, measure function outputs have also been referred to as\n> \"behavioral characteristics,\" \"behavior descriptors,\" or \"feature\n> descriptors.\"\n\nRecent years have seen the development of a large number of QD algorithms. To\nrepresent these and future algorithms, we have developed the highly modular RIBS\nframework. RIBS divides a QD algorithm into three components:\n\n- An **archive**, which saves generated solutions within measure space.\n- One or more **emitters**, where each emitter is an algorithm which generates\n  new candidate solutions and responds to feedback about how the solutions were\n  evaluated and how they were inserted into the archive.\n- A **scheduler** that controls the interaction of the **archive** and\n  **emitters**. The **scheduler** also provides an interface for requesting new\n  candidate solutions and telling the algorithm how candidates performed.\n\nBy interchanging these components, a user can compose a large number of QD\nalgorithms.\n\nPyribs is an implementation of the RIBS framework designed to support a wide\nrange of users, from beginners entering the field to experienced researchers\nseeking to develop new algorithms. Pyribs achieves these goals by embodying\nthree principles:\n\n- **Simple:** Centered _only_ on components that are absolutely necessary to run\n  a QD algorithm, allowing users to combine the framework with other software\n  frameworks.\n- **Flexible:** Capable of representing a wide range of current and future QD\n  algorithms, allowing users to easily create or modify components.\n- **Accessible:** Easy to install and learn, particularly for beginners with\n  limited computational resources.\n\nIn contrast to other QD libraries, pyribs is \"bare-bones.\" For example, like\n[pycma](https://pypi.org/project/cma/), pyribs focuses solely on optimizing\nfixed-dimensional continuous domains. Focusing on this one commonly-occurring\nproblem allows us to optimize the library for performance as well as ease of\nuse. Refer to the list of [additional QD libraries](#additional-qd-libraries)\nbelow if you need to handle additional use cases.\n\nFollowing the RIBS framework (shown in the figure below), a standard algorithm\nin pyribs operates as follows:\n\n1. The user calls the `ask()` method on the scheduler. The scheduler requests\n   solutions from each emitter by calling the emitter's `ask()` method.\n2. The user evaluates solutions to obtain the objective and measure values.\n3. The user passes the evaluations to the scheduler's `tell()` method. The\n   scheduler adds the solutions into the archive and receives feedback. The\n   scheduler passes this feedback along with the evaluated solutions to each\n   emitter's `tell()` method, and each emitter then updates its internal state.\n\n![The RIBS framework](readme_assets/ribs.png)\n\n## Installation\n\npyribs supports Python 3.8 and above. The vast majority of users can install\npyribs by running:\n\n```bash\npip install ribs[visualize]\n```\n\nThe command above includes the `visualize` extra. If you will not be using the\npyribs visualization tools, you can install the base version of pyribs with:\n\n```bash\npip install ribs\n```\n\nFor more specific installation commands (e.g., installing from Conda or\ninstalling from source), visit the\n[installation selector](https://pyribs.org/#installation) on our website.\n\nTo test your installation, import pyribs and print the version with this\ncommand:\n\n```bash\npython -c \"import ribs; print(ribs.__version__)\"\n```\n\nYou should see a version number in the output.\n\n## Usage\n\nHere we show an example application of CMA-ME in pyribs. To initialize the\nalgorithm, we first create:\n\n- A 2D **GridArchive** where each dimension contains 20 cells across the range\n  [-1, 1].\n- Three instances of **EvolutionStrategyEmitter**, all of which start from the\n  search point **0** in 10-dimensional space and a Gaussian sampling\n  distribution with standard deviation 0.1.\n- A **Scheduler** that combines the archive and emitters together.\n\nAfter initializing the components, we optimize (pyribs maximizes) the negative\n10-D Sphere function for 1000 iterations. Users of\n[pycma](https://pypi.org/project/cma/) will be familiar with the ask-tell\ninterface (which pyribs adopted). First, the user must `ask` the scheduler for\nnew candidate solutions. After evaluating the solution, they `tell` the\nscheduler the objectives and measures of each candidate solution. The algorithm\nthen populates the archive and makes decisions on where to sample solutions\nnext. Our toy example uses the first two parameters of the search space as\nmeasures.\n\n```python\nimport numpy as np\n\nfrom ribs.archives import GridArchive\nfrom ribs.emitters import EvolutionStrategyEmitter\nfrom ribs.schedulers import Scheduler\n\narchive = GridArchive(\n    solution_dim=10,\n    dims=[20, 20],\n    ranges=[(-1, 1), (-1, 1)],\n)\nemitters = [\n    EvolutionStrategyEmitter(\n        archive,\n        x0=[0.0] * 10,\n        sigma0=0.1,\n    ) for _ in range(3)\n]\nscheduler = Scheduler(archive, emitters)\n\nfor itr in range(1000):\n    solutions = scheduler.ask()\n\n    # Optimize the 10D negative Sphere function.\n    objective_batch = -np.sum(np.square(solutions), axis=1)\n\n    # Measures: first 2 coordinates of each 10D solution.\n    measures_batch = solutions[:, :2]\n\n    scheduler.tell(objective_batch, measures_batch)\n```\n\nTo visualize this archive with Matplotlib, we then use the\n`grid_archive_heatmap` function from `ribs.visualize`.\n\n```python\nimport matplotlib.pyplot as plt\nfrom ribs.visualize import grid_archive_heatmap\n\ngrid_archive_heatmap(archive)\nplt.show()\n```\n\n![Sphere heatmap](readme_assets/sphere_heatmap.png)\n\n## Documentation\n\n**The documentation is available online [here](https://docs.pyribs.org/). We\nsuggest that new users start with the\n[tutorials](https://docs.pyribs.org/en/stable/tutorials.html).**\n\n## Paper and Citation\n\nTwo years after the initial release of pyribs, we released a paper that\nelaborates on the RIBS framework and the design decisions behind pyribs. For\nmore information on this paper, see [here](https://pyribs.org/paper). If you use\npyribs in your research, please consider citing this paper as follows. Also\nconsider citing any algorithms you use as shown\n[below](#citing-algorithms-in-pyribs).\n\n```\n@inproceedings{10.1145/3583131.3590374,\n  author = {Tjanaka, Bryon and Fontaine, Matthew C and Lee, David H and Zhang, Yulun and Balam, Nivedit Reddy and Dennler, Nathaniel and Garlanka, Sujay S and Klapsis, Nikitas Dimitri and Nikolaidis, Stefanos},\n  title = {Pyribs: A Bare-Bones Python Library for Quality Diversity Optimization},\n  year = {2023},\n  isbn = {9798400701191},\n  publisher = {Association for Computing Machinery},\n  address = {New York, NY, USA},\n  url = {https://doi.org/10.1145/3583131.3590374},\n  doi = {10.1145/3583131.3590374},\n  abstract = {Recent years have seen a rise in the popularity of quality diversity (QD) optimization, a branch of optimization that seeks to find a collection of diverse, high-performing solutions to a given problem. To grow further, we believe the QD community faces two challenges: developing a framework to represent the field's growing array of algorithms, and implementing that framework in software that supports a range of researchers and practitioners. To address these challenges, we have developed pyribs, a library built on a highly modular conceptual QD framework. By replacing components in the conceptual framework, and hence in pyribs, users can compose algorithms from across the QD literature; equally important, they can identify unexplored algorithm variations. Furthermore, pyribs makes this framework simple, flexible, and accessible, with a user-friendly API supported by extensive documentation and tutorials. This paper overviews the creation of pyribs, focusing on the conceptual framework that it implements and the design principles that have guided the library's development. Pyribs is available at https://pyribs.org},\n  booktitle = {Proceedings of the Genetic and Evolutionary Computation Conference},\n  pages = {220\u2013229},\n  numpages = {10},\n  keywords = {framework, quality diversity, software library},\n  location = {Lisbon, Portugal},\n  series = {GECCO '23}\n}\n```\n\n## Contributors\n\npyribs is developed and maintained by the [ICAROS Lab](http://icaros.usc.edu) at\nUSC. For information on contributing to the repo, see\n[CONTRIBUTING](./CONTRIBUTING.md).\n\n- [Bryon Tjanaka](https://btjanaka.net)\n- [Matthew C. Fontaine](https://scholar.google.com/citations?user=RqSvzikAAAAJ)\n- [David H. Lee](https://github.com/itsdawei)\n- [Yulun Zhang](https://github.com/lunjohnzhang)\n- [Nivedit Reddy Balam](https://www.linkedin.com/in/nivedit-reddy)\n- [Nathan Dennler](https://ndennler.github.io/)\n- [Sujay S. Garlanka](https://sujaygarlanka.com)\n- Nikitas Klapsis\n- [Robby Costales](https://robbycostales.com)\n- [Sam Sommerer](https://github.com/sam-sommerer)\n- [Vincent Vu](https://vuvincent.com/)\n- [Stefanos Nikolaidis](https://stefanosnikolaidis.net)\n\nWe thank [Amy K. Hoover](http://amykhoover.com/) and\n[Julian Togelius](http://julian.togelius.com/) for their contributions deriving\nthe CMA-ME algorithm.\n\n## Users\n\npyribs users include:\n\n<!-- Alphabetical order -->\n\n- [Adam Gaier (Autodesk Research)](https://scholar.google.com/citations?user=GGyARB8AAAAJ)\n- [Adaptive & Intelligent Robotics Lab (Imperial College London)](https://www.imperial.ac.uk/adaptive-intelligent-robotics)\n- [Chair of Statistical Learning and Data Science (LMU Munich)](https://www.slds.stat.uni-muenchen.de/)\n- [Game Innovation Lab (New York University)](https://game.engineering.nyu.edu)\n- [Giovanni Iacca (University of Trento)](https://sites.google.com/site/giovanniiacca/)\n- [HUAWEI Noah's Ark Lab](https://github.com/huawei-noah)\n- [ICAROS Lab (University of Southern California)](http://icaros.usc.edu/)\n- [Jacob Schrum (Southwestern University)](https://github.com/schrum2/PyribsForGameGAN)\n- [Lenia Research](https://lenia.world)\n- [Paul Kent (The University of Warwick)](https://warwick.ac.uk/fac/sci/mathsys/people/students/2018intake/kent/)\n- [Various](https://github.com/ganyariya/mario_pytorch)\n  [researchers](https://direct.mit.edu/isal/proceedings/isal/33/112256) at the\n  University of Tsukuba\n\n### Publications\n\nFor the list of publications that use pyribs, refer to our\n[Google Scholar entry](https://scholar.google.com/scholar?cites=1780392371068190395).\n\n### Software\n\nSee the\n[GitHub dependency graph](https://github.com/icaros-usc/pyribs/network/dependents)\nfor the public GitHub repositories which depend on pyribs.\n\n## Citing Algorithms in pyribs\n\nIf you use the following algorithms, please consider citing their relevant\npapers:\n\n- **CMA-ME:** [Fontaine 2020](https://dl.acm.org/doi/10.1145/3377930.3390232)\n  ```\n  @inproceedings{10.1145/3377930.3390232,\n    author = {Fontaine, Matthew C. and Togelius, Julian and Nikolaidis, Stefanos and Hoover, Amy K.},\n    title = {Covariance Matrix Adaptation for the Rapid Illumination of Behavior Space},\n    year = {2020},\n    isbn = {9781450371285},\n    publisher = {Association for Computing Machinery},\n    address = {New York, NY, USA},\n    url = {https://doi.org/10.1145/3377930.3390232},\n    doi = {10.1145/3377930.3390232},\n    booktitle = {Proceedings of the 2020 Genetic and Evolutionary Computation Conference},\n    pages = {94\u2013102},\n    numpages = {9},\n    location = {Canc\\'{u}n, Mexico},\n    series = {GECCO '20}\n  }\n  ```\n- **CMA-MEGA:**\n  [Fontaine 2021](https://proceedings.neurips.cc/paper/2021/hash/532923f11ac97d3e7cb0130315b067dc-Abstract.html)\n  ```\n  @inproceedings{NEURIPS2021_532923f1,\n   author = {Fontaine, Matthew and Nikolaidis, Stefanos},\n   booktitle = {Advances in Neural Information Processing Systems},\n   editor = {M. Ranzato and A. Beygelzimer and Y. Dauphin and P.S. Liang and J. Wortman Vaughan},\n   pages = {10040--10052},\n   publisher = {Curran Associates, Inc.},\n   title = {Differentiable Quality Diversity},\n   url = {https://proceedings.neurips.cc/paper/2021/file/532923f11ac97d3e7cb0130315b067dc-Paper.pdf},\n   volume = {34},\n   year = {2021}\n  }\n  ```\n- **CMA-MAE:** [Fontaine 2022](https://arxiv.org/abs/2205.10752)\n  ```\n  @misc{cmamae,\n    doi = {10.48550/ARXIV.2205.10752},\n    url = {https://arxiv.org/abs/2205.10752},\n    author = {Fontaine, Matthew C. and Nikolaidis, Stefanos},\n    keywords = {Machine Learning (cs.LG), Artificial Intelligence (cs.AI), FOS: Computer and information sciences, FOS: Computer and information sciences},\n    title = {Covariance Matrix Adaptation MAP-Annealing},\n    publisher = {arXiv},\n    year = {2022},\n    copyright = {arXiv.org perpetual, non-exclusive license}\n  }\n  ```\n- **Scalable CMA-MAE:** [Tjanaka 2022](https://arxiv.org/abs/2210.02622)\n  ```\n  @ARTICLE{10243102,\n    author={Tjanaka, Bryon and Fontaine, Matthew C. and Lee, David H. and Kalkar, Aniruddha and Nikolaidis, Stefanos},\n    journal={IEEE Robotics and Automation Letters},\n    title={Training Diverse High-Dimensional Controllers by Scaling Covariance Matrix Adaptation MAP-Annealing},\n    year={2023},\n    volume={8},\n    number={10},\n    pages={6771-6778},\n    keywords={Covariance matrices;Training;Neural networks;Legged locomotion;Reinforcement learning;Evolutionary robotics;Evolutionary robotics;reinforcement learning},\n    doi={10.1109/LRA.2023.3313012}\n  }\n  ```\n\n## Additional QD Libraries\n\n- [QDax](https://github.com/adaptive-intelligent-robotics/QDax): Implementations\n  of QD algorithms in JAX. QDax is suitable if you want to run entire QD\n  algorithms on hardware accelerators in a matter of minutes, and it is\n  particularly useful if you need to interface with Brax environments.\n- [qdpy](https://gitlab.com/leo.cazenille/qdpy/): Python implementations of a\n  wide variety of QD algorithms.\n- [sferes](https://github.com/sferes2/sferes2): Contains C++ implementations of\n  QD algorithms; can also handle discrete domains.\n\n## License\n\npyribs is released under the\n[MIT License](https://github.com/icaros-usc/pyribs/blob/master/LICENSE).\n\n## Credits\n\nThe pyribs package was initially created with\n[Cookiecutter](https://github.com/audreyr/cookiecutter) and the\n[audreyr/cookiecutter-pypackage](https://github.com/audreyr/cookiecutter-pypackage)\nproject template.\n\n\n# History\n\n## 0.7.1\n\nThis release introduces the\n[QDHF tutorial](https://docs.pyribs.org/en/stable/tutorials/qdhf.html)! It also\nmakes a couple of minor usability improvements, such as better error checking.\n\n### Changelog\n\n#### API\n\n- Support Python 3.12 ({pr}`390`)\n\n#### Improvements\n\n- Add qd score to lunar lander example ({pr}`458`)\n- Raise error if `result_archive` and `archive` have different fields\n  ({pr}`461`)\n- Warn user if resampling for bounds takes too long in ESs ({pr}`462`)\n\n#### Documentation\n\n- Add QDHF tutorial ({pr}`459`)\n\n#### Bugs\n\n- Fix solution retrieval in lunar lander eval ({pr}`457`)\n\n## 0.7.0\n\nTo learn about this release, see our page on What's New in v0.7.0:\nhttps://docs.pyribs.org/en/stable/whats-new.html\n\n### Changelog\n\n#### API\n\n- Support alternative centroid generation methods in CVTArchive ({pr}`417`,\n  {pr}`437`)\n- Add PyCMAEvolutionStrategy for using pycma in ES emitters ({pr}`434`)\n- **Backwards-incompatible:** Add ranking values to evolution strategy tell\n  method ({pr}`438`)\n- **Backwards-incompatible:** Move evolution strategy bounds to init ({pr}`436`)\n- **Backwards-incompatible:** Use seed instead of rng in ranker ({pr}`432`)\n- **Backwards-incompatible:** Replace status and value with add_info ({pr}`430`)\n- Support custom data fields in archive, emitters, and scheduler ({pr}`421`,\n  {pr}`429`)\n- **Backwards-incompatible:** Remove `_batch` from parameter names ({pr}`422`,\n  {pr}`424`, {pr}`425`, {pr}`426`, {pr}`428`)\n- Add Gaussian, IsoLine Operators and Refactor GaussianEmitter/IsoLineEmitter\n  ({pr}`418`)\n- **Backwards-incompatible:** Remove metadata in favor of custom fields\n  ({pr}`420`)\n- Add Base Operator Interface and Emitter Operator Retrieval ({pr}`416`)\n- **Backwards-incompatible:** Return occupied booleans in retrieve ({pr}`414`)\n- **Backwards-incompatible:** Deprecate `as_pandas` in favor of\n  `data(return_type=\"pandas\")` ({pr}`408`)\n- **Backwards-incompatible:** Replace ArchiveDataFrame batch methods with\n  `get_field` ({pr}`413`)\n- Add field_list and data methods to archives ({pr}`412`)\n- Include threshold in `archive.best_elite` ({pr}`409`)\n- **Backwards-incompatible:** Replace Elite and EliteBatch with dicts\n  ({pr}`397`)\n- **Backwards-incompatible:** Rename `measure_*` columns to `measures_*` in\n  `as_pandas` ({pr}`396`)\n- Add ArrayStore data structure ({pr}`395`, {pr}`398`, {pr}`400`, {pr}`402`,\n  {pr}`403`, {pr}`404`, {pr}`406`, {pr}`407`, {pr}`411`)\n- Add GradientOperatorEmitter to support OMG-MEGA and OG-MAP-Elites ({pr}`348`)\n\n#### Improvements\n\n- Raise error when threshold_min is set but learning_rate is not ({pr}`453`)\n- Fix interval_size in CVTArchive and SlidingBoundariesArchive ({pr}`452`)\n- Allow overriding ES in sphere example ({pr}`439`)\n- Use NumPy SeedSequence in emitters ({pr}`431`, {pr}`440`)\n- Use numbers types when checking arguments ({pr}`419`)\n- Reimplement ArchiveBase using ArrayStore ({pr}`399`)\n- Use chunk computation in CVT brute force calculation to reduce memory usage\n  ({pr}`394`)\n- Test pyribs installation in tutorials ({pr}`384`)\n- Add cron job for testing installation ({pr}`389`, {pr}`401`)\n- Fix broken cross-refs in docs ({pr}`393`)\n\n#### Documentation\n\n- Tidy up LSI MNIST notebook ({pr}`444`)\n\n## 0.6.4\n\nSmall release that adds the scalable CMA-MAE tutorial.\n\n### Changelog\n\n#### Documentation\n\n- Add tutorial on scalable CMA-MAE variants ({pr}`433`, {pr}`443`)\n\n## 0.6.3\n\nSmall patch release due to deprecation issues.\n\n### Changelog\n\n#### Improvements\n\n- Replace np.product with np.prod due to deprecation ({pr}`385`)\n\n## 0.6.2\n\nSmall patch release due to installation issues in our tutorials.\n\n### Changelog\n\n#### API\n\n- Import ribs[visualize] in tutorials that need it ({pr}`379`)\n\n#### Improvements\n\n- Switch to a branch-based release model ({pr}`382`)\n\n## 0.6.1\n\n(This release was removed)\n\n## 0.6.0\n\n### Changelog\n\n#### API\n\n- Drop Python 3.7 support and upgrade dependencies ({pr}`350`)\n- Add visualization of QDax repertoires ({pr}`353`)\n- Improve cvt_archive_heatmap flexibility ({pr}`354`)\n- Clip Voronoi regions in cvt_archive_heatmap ({pr}`356`)\n- **Backwards-incompatible:** Allow using kwargs for colorbar in\n  parallel_axes_plot ({pr}`358`)\n  - Removes cbar_orientaton and cbar_pad args for parallel_axes_plot\n- Add `rasterized` arg for heatmaps ({pr}`359`)\n- Support 1D cvt_archive_heatmap ({pr}`362`)\n- Add 3D plots for CVTArchive ({pr}`371`)\n- Add visualization of 3D QDax repertoires ({pr}`373`)\n- Enable plotting custom data in visualizations ({pr}`374`)\n\n#### Documentation\n\n- Use dask instead of multiprocessing for lunar lander tutorial ({pr}`346`)\n- pip install swig before gymnasium[box2d] in lunar lander tutorial ({pr}`346`)\n- Fix lunar lander dependency issues ({pr}`366`, {pr}`367`)\n- Simplify DQD tutorial imports ({pr}`369`)\n- Improve visualization docs examples ({pr}`372`)\n\n#### Improvements\n\n- Improve developer workflow with pre-commit ({pr}`351`, {pr}`363`)\n- Speed up 2D cvt_archive_heatmap by order of magnitude ({pr}`355`)\n- Refactor visualize module into multiple files ({pr}`357`)\n- Refactor visualize tests into multiple files ({pr}`370`)\n- Add GitHub link roles in documentation ({pr}`361`)\n- Refactor argument validation utilities ({pr}`365`)\n- Use Conda envs in all CI jobs ({pr}`368`)\n- Split tutorial CI into multiple jobs ({pr}`375`)\n\n## 0.5.2\n\nThis release contains miscellaneous edits to our documentation from v0.5.1.\nFurthermore, the library is updated to support Python 3.11, removed deprecated\noptions, and strengthened with more robust checks and error messages in the\nschedulers.\n\n### Changelog\n\n#### API\n\n- Support Python 3.11 ({pr}`342`)\n- Check that emitters passed in are lists/iterables in scheduler ({pr}`341`)\n- Fix Matplotlib `get_cmap` deprecation ({pr}`340`)\n- **Backwards-incompatible:** Default `plot_centroids` to False when plotting\n  ({pr}`339`)\n- Raise error messages when `ask` is called without `ask_dqd` ({pr}`338`)\n\n#### Documentation\n\n- Add BibTex citation for GECCO 2023 ({pr}`337`)\n\n#### Improvements\n\n- Update distribution dependencies ({pr}`344`)\n\n## 0.5.1\n\nThis release contains miscellaneous edits to our documentation from v0.5.0.\nThere were no changes to library functionality in this release.\n\n## 0.5.0\n\nTo learn about this release, see our page on What's New in v0.5.0:\nhttps://docs.pyribs.org/en/stable/whats-new.html\n\n### Changelog\n\n#### API\n\n- Schedulers warn if no solutions are inserted into archive ({pr}`320`)\n- Implement `BanditScheduler` ({pr}`299`)\n- **Backwards-incompatible:** Implement Scalable CMA-ES Optimizers ({pr}`274`,\n  {pr}`288`)\n- Make ribs.emitters.opt public ({pr}`281`)\n- Add normalized QD score to ArchiveStats ({pr}`276`)\n- **Backwards-incompatible:** Make ArchiveStats a dataclass ({pr}`275`)\n- **Backwards-incompatible:** Add shape checks to `tell()` and `tell_dqd()`\n  methods ({pr}`269`)\n- Add method for computing CQD score in archives ({pr}`252`)\n- **Backwards-incompatible:** Deprecate positional arguments in constructors\n  ({pr}`261`)\n- **Backwards-incompatible:** Allow custom initialization in Gaussian and\n  IsoLine emitters ({pr}`259`, {pr}`265`)\n- Implement CMA-MAE archive thresholds ({pr}`256`, {pr}`260`, {pr}`314`)\n  - Revive the old implementation of `add_single` removed in ({pr}`221`)\n  - Add separate tests for `add_single` and `add` with single solution\n- Fix all examples and tutorials ({pr}`253`)\n- Add restart timer to `EvolutionStrategyEmitter` and\n  `GradientArborescenceEmitter`({pr}`255`)\n- Rename fields and update documentation ({pr}`249`, {pr}`250`)\n  - **Backwards-incompatible:** rename `Optimizer` to `Scheduler`\n  - **Backwards-incompatible:** rename `objective_value` to `objective`\n  - **Backwards-incompatible:** rename `behavior_value`/`bcs` to `measures`\n  - **Backwards-incompatible:** `behavior_dim` in archives is now `measure_dim`\n  - Rename `n_solutions` to `batch_size` in `Scheduler`.\n- Add `GradientArborescenceEmitter`, which is used to implement CMA-MEGA\n  ({pr}`240`, {pr}`263`, {pr}`264`, {pr}`282`, {pr}`321`)\n- Update emitter `tell()` docstrings to no longer say \"Inserts entries into\n  archive\" ({pr}`247`)\n- Expose `emitter.restarts` as a property ({pr}`248`)\n- Specify that `x0` is 1D for all emitters ({pr}`244`)\n- Add `best_elite` property for archives ({pr}`237`)\n- Rename methods in ArchiveDataFrame and rename as_pandas behavior columns\n  ({pr}`236`)\n- Re-run CVTArchive benchmarks and update CVTArchive ({pr}`235`, {pr}`329`)\n  - **Backwards-incompatible:** `use_kd_tree` now defaults to True since the k-D\n    tree is always faster than brute force in benchmarks.\n- Allow adding solutions one at a time in optimizer ({pr}`233`)\n- Minimize numba usage ({pr}`232`)\n- **Backwards-incompatible:** Implement batch addition in archives ({pr}`221`,\n  {pr}`242`)\n  - `add` now adds a batch of solutions to the archive\n  - `add_single` adds a single solution\n- `emitter.tell` now takes in `status_batch` and `value_batch` ({pr}`227`)\n- Make epsilon configurable in archives ({pr}`226`)\n- **Backwards-incompatible:** Remove ribs.factory ({pr}`225`, {pr}`228`)\n- **Backwards-incompatible:** Replaced `ImprovementEmitter`,\n  `RandomDirectionEmitter`, and `OptimizingEmitter` with\n  `EvolutionStrategyEmitter` ({pr}`220`, {pr}`223`, {pr}`278`)\n- Raise ValueError for incorrect array shapes in archive methods ({pr}`219`)\n- Introduced the Ranker object, which is responsible for ranking the solutions\n  based on different objectives ({pr}`209`, {pr}`222`, {pr}`245`)\n- Add index_of_single method for getting index of measures for one solution\n  ({pr}`214`)\n- **Backwards-incompatible:** Replace elite_with_behavior with retrieve and\n  retrieve_single in archives ({pr}`213`, {pr}`215`, {pr}`295`)\n- **Backwards-incompatible:** Replace get_index with batched index_of method in\n  archives ({pr}`208`)\n  - Also added `grid_to_int_index` and `int_to_grid_index` methods for\n    `GridArchive` and `SlidingBoundariesArchive`\n- **Backwards-incompatible:** Made it such that each archive is initialized\n  fully in its constructor instead of needing a separate\n  .initialize(solution_dim) call ({pr}`200`)\n- **Backwards-incompatible:** Add `sigma`, `sigma0` options to\n  `gaussian_emitter` and `iso_line_emitter` ({pr}`199`)\n  - `gaussian_emitter` constructor requires `sigma`; `sigma0` is optional.\n  - `iso_line_emitter` constructor takes in optional parameter `sigma0`.\n- **Backwards-incompatible:** Add `cbar`, `aspect` options for\n  `cvt_archive_heatmap` ({pr}`197`)\n- **Backwards-incompatible:** Add `aspect` option to `grid_archive_heatmap` +\n  support for 1D heatmaps ({pr}`196`)\n  - `square` option no longer works\n- **Backwards-incompatible:** Add `cbar` option to `grid_archive_heatmap`\n  ({pr}`193`)\n- **Backwards-incompatible:** Replace `get_random_elite()` with batched\n  `sample_elites()` method ({pr}`192`)\n- **Backwards-incompatible:** Add EliteBatch and rename fields in Elite\n  ({pr}`191`)\n- **Backwards-incompatible:** Rename bins to cells for consistency with\n  literature ({pr}`189`)\n  - Archive constructors now take in `cells` argument instead of `bins`\n  - Archive now have a `cells` property rather than a `bins` property\n- **Backwards-incompatible:** Only use integer indices in archives ({pr}`185`)\n  - `ArchiveBase`\n    - Replaced `storage_dims` (tuple of int) with `storage_dim` (int)\n    - `_occupied_indices` is now a fixed-size array with `_num_occupied`\n      indicating its current usage, and `_occupied_indices_cols` has been\n      removed\n    - `index_of` must now return an integer\n\n#### Bugs\n\n- Fix boundary lines in sliding boundaries archive heatmap ({pr}`271`)\n- Fix negative eigenvalue in CMA-ES covariance matrix ({pr}`285`)\n\n#### Documentation\n\n- Speed up lunar lander tutorial ({pr}`319`)\n- Add DQDTutorial ({pr}`267`)\n- Remove examples extra in favor of individual example deps ({pr}`306`)\n- Facilitate linking to latest version of documentation ({pr}`300`)\n- Update lunar lander tutorial with v0.5.0 features ({pr}`292`)\n- Improve tutorial and example overviews ({pr}`291`)\n- Move tutorials out of examples folder ({pr}`290`)\n- Update lunar lander to use Gymnasium ({pr}`289`)\n- Add CMA-MAE tutorial ({pr}`273`, {pr}`284`)\n- Update README ({pr}`279`)\n- Add sphinx-codeautolink to docs ({pr}`206`, {pr}`280`)\n- Fix documentation rendering issues on ReadTheDocs ({pr}`205`)\n- Fix typos and formatting in docstrings of `ribs/visualize.py` ({pr}`203`)\n- Add in-comment type hint rich linking ({pr}`204`)\n- Upgrade Sphinx dependencies ({pr}`202`)\n\n#### Improvements\n\n- Move threadpoolctl from optimizer to CMA-ES ({pr}`241`)\n- Remove unnecessary emitter benchmarks ({pr}`231`)\n- Build docs during CI/CD workflow ({pr}`211`)\n- Drop Python 3.6 and add Python 3.10 support ({pr}`181`)\n- Add procedure for updating changelog ({pr}`182`)\n- Add 'visualize' extra ({pr}`183`, {pr}`184`, {pr}`302`)\n\n## 0.4.0 (2021-07-19)\n\nTo learn about this release, see our blog post: https://pyribs.org/blog/0-4-0\n\n### Changelog\n\n#### API\n\n- Add ribs.visualize.parallel_axes_plot for analyzing archives with\n  high-dimensional BCs ({pr}`92`)\n- **Backwards-incompatible:** Reduce attributes and parameters in EmitterBase to\n  make it easier to extend ({pr}`101`)\n- In Optimizer, support emitters that return any number of solutions in ask()\n  ({pr}`101`)\n- **Backwards-incompatible:** Store metadata in archives as described in\n  {pr}`87` ({pr}`103`, {pr}`114`, {pr}`115`, {pr}`119`)\n- **Backwards-incompatible:** Rename \"index\" to \"index_0\" in\n  CVTArchive.as_pandas for API consistency ({pr}`113`)\n- **Backwards-incompatible:** Make index_of() public in archives to emphasize\n  each index's meaning ({pr}`128`)\n- **Backwards-incompatible:** Add index to get_random_elite() and\n  elite_with_behavior() in archives ({pr}`129`)\n- Add clear() method to archive ({pr}`140`, {pr}`146`)\n- Represent archive elites with an Elite namedtuple ({pr}`142`)\n- Add len and iter methods to archives ({pr}`151`, {pr}`152`)\n- Add statistics to archives ({pr}`100`, {pr}`157`)\n- Improve manipulation of elites by modifying as_pandas ({pr}`123`, {pr}`149`,\n  {pr}`153`, {pr}`158`, {pr}`168`)\n- Add checks for optimizer array and list shapes ({pr}`166`)\n\n#### Documentation\n\n- Add bibtex citations for tutorials ({pr}`122`)\n- Remove network training from Fooling MNIST tutorial ({pr}`161`)\n- Fix video display for lunar lander in Colab ({pr}`163`)\n- Fix Colab links in stable docs ({pr}`164`)\n\n#### Improvements\n\n- Add support for Python 3.9 ({pr}`84`)\n- Test with pinned versions ({pr}`110`)\n- Increase minimum required versions for scipy and numba ({pr}`110`)\n- Refactor as_pandas tests ({pr}`114`)\n- Expand CI/CD to test examples and tutorials ({pr}`117`)\n- Tidy up existing tests ({pr}`120`, {pr}`127`)\n- Fix vocab in various areas ({pr}`138`)\n- Fix dependency issues in tests ({pr}`139`)\n- Remove tox from CI ({pr}`143`)\n- Replace \"entry\" with \"elite\" in tests ({pr}`144`)\n- Use new archive API in ribs.visualize implementation ({pr}`155`)\n\n## 0.3.1 (2021-03-05)\n\nThis release features various bug fixes and improvements. In particular, we have\nadded tests for SlidingBoundariesArchive and believe it is ready for more\nrigorous use.\n\n### Changelog\n\n- Move SlidingBoundariesArchive out of experimental by adding tests and fixing\n  bugs ({pr}`93`)\n- Added nicer figures to the Sphere example with `grid_archive_heatmap`\n  ({pr}`86`)\n- Added testing for Windows and MacOS ({pr}`83`)\n- Fixed package metadata e.g. description\n\n## 0.3.0 (2021-02-05)\n\npyribs is now in beta. Since our alpha release (0.2.0), we have polished the\nlibrary and added new tutorials and examples to our documentation.\n\n### Changelog\n\n- Added a Lunar Lander example that extends the lunar lander tutorial ({pr}`70`)\n- Added New Tutorial: Illuminating the Latent Space of an MNIST GAN ({pr}`78`)\n- GridArchive: Added a boundaries attribute with the upper and lower bounds of\n  each dimension's bins ({pr}`76`)\n- Fixed a bug where CMA-ME emitters do not work with float32 archives ({pr}`74`)\n- Fixed a bug where Optimizer is able to take in non-unique emitter instances\n  ({pr}`75`)\n- Fixed a bug where GridArchive failed for float32 due to a small epsilon\n  ({pr}`81`)\n- Fix issues with bounds in the SlidingBoundaryArchive ({pr}`77`)\n- Added clearer error messages for archives ({pr}`82`)\n- Modified the Python requirements to allow any version above 3.6.0 ({pr}`68`)\n- The wheel is now fixed so that it only supports py3 rather than py2 and py3\n  ({pr}`68`)\n- Miscellaneous documentation fixes ({pr}`71`)\n\n## 0.2.0 (2021-01-29)\n\n- Alpha release\n\n## 0.2.1 (2021-01-29)\n\n- Package metadata fixes (author, email, url)\n- Miscellaneous documentation improvements\n\n## 0.1.1 (2021-01-29)\n\n- Test release (now removed)\n\n## 0.1.0 (2020-09-11)\n\n- Test release (now removed)\n\n## 0.0.0 (2020-09-11)\n\n- pyribs begins\n",
    "bugtrack_url": null,
    "license": "MIT license",
    "summary": "A bare-bones Python library for quality diversity optimization.",
    "version": "0.7.1",
    "project_urls": {
        "Homepage": "https://github.com/icaros-usc/pyribs"
    },
    "split_keywords": [
        "ribs"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "76cbad54e8b28ce497f8dfa8edf76b9b0a6a8290080dfb4212f68b6781f8c9af",
                "md5": "38924b22816cb8fa138d718ac9d1ab42",
                "sha256": "efe1c83f79e85eb4eb4d074d372ff8a2673cfe26c0117320611633f7a8888090"
            },
            "downloads": -1,
            "filename": "ribs-0.7.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "38924b22816cb8fa138d718ac9d1ab42",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8.0",
            "size": 140103,
            "upload_time": "2024-03-14T09:54:49",
            "upload_time_iso_8601": "2024-03-14T09:54:49.163738Z",
            "url": "https://files.pythonhosted.org/packages/76/cb/ad54e8b28ce497f8dfa8edf76b9b0a6a8290080dfb4212f68b6781f8c9af/ribs-0.7.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "02c17aed1b6f36f64d442c2932cc7892fa54e23b3e9f3e67152b20e769833a6c",
                "md5": "9518f1064cee3ba3bdf37244ab2ad3cc",
                "sha256": "9b20229926e8bd7de7e7e716cd4c2755233a9d71aee2ece127b897d407c7a990"
            },
            "downloads": -1,
            "filename": "ribs-0.7.1.tar.gz",
            "has_sig": false,
            "md5_digest": "9518f1064cee3ba3bdf37244ab2ad3cc",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8.0",
            "size": 124840,
            "upload_time": "2024-03-14T09:54:51",
            "upload_time_iso_8601": "2024-03-14T09:54:51.187803Z",
            "url": "https://files.pythonhosted.org/packages/02/c1/7aed1b6f36f64d442c2932cc7892fa54e23b3e9f3e67152b20e769833a6c/ribs-0.7.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-03-14 09:54:51",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "icaros-usc",
    "github_project": "pyribs",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "ribs"
}
        
Elapsed time: 0.22990s