A Training Ground for Autonomous Agents
Project description
About
palaestrAI is a distributed framework to train and test all kinds of autonomous agents. It provides interfaces to any environment, be it OpenAI Gym or co-simulation environments via mosaik. palaestrAI can train and test any kind of autonomous agent in these environments: From Deep Reinforcement Learning (DRL) algorithms over model-based to simple rule-based agents, all can train and test with or against each other in a shared environment.
In short, palaestrAI can…
…train and test one or more agent of any algorithm
…place the agents on one or several environments at once, depending on the agents’ algorithm
…provides facilities to define and reproducibly run experiments
palaestrAI is the core framework of a whole ecosystem:
hARL provides implementations of several DRL algorithms and interfaces to existing DRL libraries.
arsenAI provides all facilities needed for proper design of experiments.
palaestrai-mosaik is a interface to the mosaik co-simulation software
palaestrai-environments provides a number of simple, easy to use environments for playing with palaestrAI
Documentation can be found at http://docs.palaestr.ai/
Use Cases
palaestrAI is the framework for the Adversarial Resilience Learning (ARL) reference implementation. The ARL core concept consists of two agents, attacker and defender agents, working an a common model of a cyber-phyiscal system (CPS). The attacker’s goal is to de-stabilize the CPS, whereas the defender works to keep the system in a stable and operational state. Both agents do not perceive their opponent’s actions directly, but only the state of the CPS itself. This imples that none of the agents knows whether anything they perceive through their sensors is the result of the dynamics of the CPS itself or of another agent’s action. Also, none of the agents has an internal model of the CPS. Attacker and defender alike have to explore the CPS given their sensors and actuators independently and adapt to it. ARL is, in that sense, suitable to a reinforcement learning approach. Combined with the fact the both agents do not simply learn the CPS, but also its respective opponent, ARL implements system-of-systems deep reinforcement learning.
Installation
palaestrAI is mainly written in Python, with the usual third-party library here and there. It provides a setup.py file just as any well-behaved Python program. Use:
pip install palaestrai
or for a fullstack installation with all subpackages from the framework including palaestrai-arsenai, palaestrai-agents (harl), palaestrai-environments, palaestrai-mosaik as well as all packages from midas-mosaik and pysimmods, run:
pip install palaestrai[full]
or for development, clone the palaestrAI repository from https://gitlab.com/arl2/palaestrai/-/tree/development and run:
pip install -e .[dev]
(With zsh, you need to escape the parenthesis like this:
pip install -e .\[dev\]
)
If you wish to build the documentation you additionally need to install the graphviz package. On Debian derivatives install graphviz-dev while on Arch Linux install graphviz. For more information on how to handle installation on your OS please refer to the official documentation: https://graphviz.org/download/
palaestrai comes with shell completion definitions for bash, zsh, and fish, courtesy of click. They are installed in /etc/bash_completion.d, /etc/zsh_completion.d, and /etc/fish_completion.d, respectively. The /etc directory is relative to your installation root. I.e., if you install palaestrai in your virtualenv directory ~/palaestrai/venv, then the completion files will be installed in ~/palaestrai/venv/etc/{bash,zsh,fish}_completion.d. (Note that pip install -e does not install data files, but in that case you have the files in the main directory of your git repo clone.) You will have to source the appropriate file to enable shell completion. To do so automatically, add the approporiate stanza to your ~/.bashrc, ~/.zshrc, or ~/.fishrc, respectively. E.g.,
echo ‘. /etc/zsh_completion.d/palaestrai_completion.zsh’ >> ~/.zshrc
After installation, you can start the dummy experiment run with:
palaestrai experiment-start tests/fixtures/dummy_run.yml
However, to use all palaestrAI functionalities, some additional setup is currently required. First, you need to install Docker. You find docker in your preferred distributions package manager or you can use the following commands to start a convience script:
curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh
Afterwards, you should add yourself to the Docker group:
sudo usermod -aG docker $USER
Try if your Docker installation works by typing:
docker images
(or any other valid docker command). If that’s not the case, the easiest way is to restart your system (or use some magic commands to start the docker daemon). The next step is to start a Docker container for the store:
docker run -d --name timescaledb -p 5432:5432 -e POSTGRES_PASSWORD=password timescale/timescaledb:1.7.4-pg12
You only need to run this command once. If you want to start the container after a system reboot, the following command is sufficient:
docker start timescaledb
Next, you need to setup the database. Type the following three commands:
docker exec -it timescaledb psql -U postgres CREATE DATABASE Palaestrai; exit
Now, you need to add a store_uri in your Palaestrai-runtime.conf.yaml. If you followed this guide step-by-step, the following store_uri should do:
store_uri: postgresql://postgres:password@172.17.0.1:5432/Palaestrai
Finally, you can enable some loggers by changing their value from ERROR to DEBUG or keep palaestrAI silent.
Usage
After installing (and, probably, setting log levels in the palaestrai-runtime.conf.yaml), type:
palaestrai database-create
to create the data store.
Everything that steers palaestrAI is defined through experiment run files. They define which agents, which algorithms, and which environments to use. You can then either start palaestrAI standalone from the command line as:
palaestrai experiment-start RUNFILE
E.g.,:
palaestrai experiment-start my_run.yml
Or you use palaestrAI from your Jupyter notebook:
import palaestrai palaestrai.execute('my_run.yml')
Development
Handling a Bug
If you find any kind of bug, please create an issue in GitLab:
A prose description of the bug: what did you intend to do, what happened instead?
The error message, if there is any.
The command line parameters and configuration
Your version of Python you are using, and the version of all modules (pip freeze gives you that).
Contributing
The typical work flow is as such:
File a bug/feature/support request in the issue tracker
Create a feature branch to work on your issue. Name it bug-<num>-<shortname> for bugs, feature-<num>-<shortname> for new features, etc.
Provide a unit test for the bug/feature you have been working on.
Fix the bug/work on the feature.
Run black -l 79 ./src/palaestrai ./tests to auto-format the code
Run tox and clean up all errors. (Run tox -e full-docker to also run system tests using docker and docker-compose)
Request a merge. The merge will happen after a code review; work-in-progress code gets first merged into development
Once the current development branch has ripened enough, it is merged to master. The master branch must contain code that is stable. New releases are only tagged on master branch commits.
Coding Style
Have a look at our architecture document and diagrams in doc/architecture.rst.
We adhere to PEP8 or black with line length of 79.
Try hard to find fitting names for new modules and subdirectories. If you are importing your own module as import X as Y and Y is differing semantically from X, it might be the right time to change the name of X. Please refrain from abbreviated names if it is not absolutely clear (in two years from now) what the abbreviation signifies. Specifically, use short variable names in functions, if you like to, but stick to commonly known and accepted abbreviations, such as for i in list or similar things. Avoid confusion with function names from the Python base library, e.g., do not use exp as a shorthand for “experiment” (cf. math.exp(x, y).
Supply docstrings for every class and public function. Otherwise, when you find yourself writing comments, consider writing better, self-explaining code instead. When adding “TODO” or “FIXME” comments, make sure somebody else can understand and begin to work on them. Use type hinting wherever possible.
Functions should not span more than one screen length.
Documentation
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file palaestrai-3.5.3.tar.gz
.
File metadata
- Download URL: palaestrai-3.5.3.tar.gz
- Upload date:
- Size: 6.8 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.10.13
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6c6ff289f4ae3c2c24e05bd382253343a32058e2d97d643a68a39640fbe5c66e |
|
MD5 | 586ed04309625c8fa09037b525892580 |
|
BLAKE2b-256 | 32bd53a1241df4d2863ef22437e0737f265cb57937d809a3cd97d4c4ba36749d |
File details
Details for the file palaestrai-3.5.3-py3-none-any.whl
.
File metadata
- Download URL: palaestrai-3.5.3-py3-none-any.whl
- Upload date:
- Size: 263.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.10.13
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 55432ce164f0a61442dda025b37fb22d75b4d6f51b4dde22bf67b1fb979ccada |
|
MD5 | c81407f41947c152a388c9008059cb36 |
|
BLAKE2b-256 | c9a44918c229016c7e79b4a086395cb94e07908f77fcb7bd7fdaf163b61f1ad1 |