Icon for

pyribs: A Bare-Bones Python Library for Quality Diversity Optimization

Bryon Tjanaka*
University of Southern California

Matthew C. Fontaine
University of Southern California

David H. Lee
University of Southern California

Yulun Zhang
Carnegie Mellon University

Nivedit Reddy Balam
University of Southern California

Nathaniel Dennler
University of Southern California

Sujay S. Garlanka
University of Southern California

Nikitas Dimitri Klapsis
University of Southern California

Stefanos Nikolaidis
University of Southern California


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 implements the conceptual RIBS framework for QD optimization. The user first ask()'s for solutions from a scheduler. The scheduler selects emitters to ask() for solutions and returns the solutions to the user. After evaluating the solutions, the user tell()'s the results to the scheduler. The scheduler add()'s the solutions to the archive and receives information that it tell()'s to the emitters, enabling the emitters to update their internal search state.