Discórdia | Lista de discussão | |
---|---|---|
Grupos do Google |
Site | Fonte | Documentos | Papel |
---|---|---|---|
pyribs.org | GitHub | docs.pyribs.org | pyribs.org/paper |
PyPI | Conda | CI/CD | Status dos documentos |
---|---|---|---|
Uma biblioteca Python básica para otimização de diversidade de qualidade (QD). Pyribs implementa a estrutura altamente modular Rapid Illumination of Behavior Space (RIBS) para otimização de QD. Pyribs também é a implementação oficial de Covariance Matrix Adaptation MAP-Elites (CMA-ME), Covariance Matrix Adaptation MAP-Elites via Gradient Arborescence (CMA-MEGA), Covariance Matrix Adaptation MAP-Annealing (CMA-MAE) e variantes escaláveis do CMA-MAE.
Junte-se à lista de discussão de Anúncios do Pyribs para atualizações pouco frequentes (menos de 1/mês) sobre o status do projeto e novos lançamentos.
Precisa de ajuda? Quer perguntar se pyribs é adequado para o seu projeto? Tem uma pergunta que não é exatamente um bug e nem uma solicitação de recurso?
Junte-se à comunidade Discord!
A otimização da diversidade de qualidade (QD) é um subcampo da otimização onde as soluções geradas cobrem todos os pontos em um espaço de medida enquanto maximizam (ou minimizam) simultaneamente um único objetivo . Algoritmos QD dentro da família MAP-Elites de algoritmos QD produzem mapas de calor (arquivos) como saída onde cada célula contém o melhor representante descoberto de uma região no espaço de medida.
Na literatura de QD, os resultados das funções de medida também são chamados de "características comportamentais", "descritores de comportamento" ou "descritores de recursos".
Nos últimos anos, assistimos ao desenvolvimento de um grande número de algoritmos QD. Para representar estes e futuros algoritmos, desenvolvemos a estrutura RIBS altamente modular. RIBS divide um algoritmo QD em três componentes:
Ao trocar esses componentes, um usuário pode compor um grande número de algoritmos de QD.
Pyribs é uma implementação da estrutura RIBS projetada para oferecer suporte a uma ampla gama de usuários, desde iniciantes na área até pesquisadores experientes que buscam desenvolver novos algoritmos. O Pyribs atinge esses objetivos incorporando três princípios:
Em contraste com outras bibliotecas QD, pyribs é "básico". Por exemplo, assim como o pycma, o pyribs se concentra exclusivamente na otimização de domínios contínuos de dimensão fixa. Focar neste problema comum nos permite otimizar a biblioteca tanto para desempenho quanto para facilidade de uso. Consulte a lista de bibliotecas QD adicionais abaixo se precisar lidar com casos de uso adicionais.
Seguindo a estrutura RIBS (mostrada na figura abaixo), um algoritmo padrão em pyribs funciona da seguinte forma:
ask()
no agendador. O escalonador solicita soluções de cada emissor chamando o método ask()
do emissor.tell()
do agendador. O agendador adiciona as soluções ao arquivo e recebe feedback. O escalonador passa esse feedback junto com as soluções avaliadas para o método tell()
de cada emissor, e cada emissor então atualiza seu estado interno. pyribs suporta Python 3.8 e superior. A grande maioria dos usuários pode instalar pyribs executando:
# If you are on Mac, you may need to use quotations, e.g., pip install "ribs[visualize]"
pip install ribs[visualize]
O comando acima inclui o extra visualize
. Se não for usar as ferramentas de visualização do pyribs, você pode instalar a versão base do pyribs com:
pip install ribs
Para comandos de instalação mais específicos (por exemplo, instalar a partir do Conda ou instalar a partir do código-fonte), visite o seletor de instalação em nosso site.
Para testar sua instalação, importe o pyribs e imprima a versão com este comando:
python -c " import ribs; print(ribs.__version__) "
Você deverá ver um número de versão na saída.
Aqui mostramos um exemplo de aplicação do CMA-ME em Piribs. Para inicializar o algoritmo, primeiro criamos:
Após inicializar os componentes, otimizamos (pyribs maximiza) a função negativa 10-D Sphere para 1000 iterações. Os usuários do pycma estarão familiarizados com a interface ask-tell (que o pyribs adotou). Primeiro, o usuário deve ask
ao escalonador novas soluções candidatas. Após avaliar a solução, eles tell
ao escalonador os objetivos e medidas de cada solução candidata. O algoritmo então preenche o arquivo e toma decisões sobre onde amostrar as próximas soluções. Nosso exemplo de brinquedo usa os dois primeiros parâmetros do espaço de busca como medidas.
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 )
Para visualizar este arquivo com Matplotlib, usamos então a função grid_archive_heatmap
de ribs.visualize
.
import matplotlib . pyplot as plt
from ribs . visualize import grid_archive_heatmap
grid_archive_heatmap ( archive )
plt . show ()
A documentação está disponível online aqui. Sugerimos que novos usuários comecem com os tutoriais.
Dois anos após o lançamento inicial do pyribs, lançamos um artigo que detalha a estrutura RIBS e as decisões de design por trás dos pyribs. Para mais informações sobre este artigo, veja aqui. Se você usar pyribs em sua pesquisa, considere citar este artigo da seguinte maneira. Considere também citar quaisquer algoritmos que você usa conforme mostrado abaixo.
@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}
}
pyribs é desenvolvido e mantido pelo Laboratório ICAROS da USC. Para obter informações sobre como contribuir para o repositório, consulte CONTRIBUINDO.
Agradecemos a Amy K. Hoover e Julian Togelius por suas contribuições na derivação do algoritmo CMA-ME.
Os usuários do Pyribs incluem:
Para obter a lista de publicações que usam pyribs, consulte nossa entrada no Google Scholar.
Consulte o gráfico de dependências do GitHub para os repositórios públicos do GitHub que dependem de pyribs.
Se você usar os seguintes algoritmos, considere citar seus artigos relevantes:
@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}
}
@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}
}
@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}
}
@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}
}
pyribs é lançado sob a licença do MIT.
O pacote pyribs foi criado inicialmente com Cookiecutter e o modelo de projeto audreyr/cookiecutter-pypackage.