Generic Evolvable Graphs for Efficient Learning of Artificial Tangled Intelligence
GEGELATI [dʒedʒelati] is a fresh open-source reinforcement learning framework for training artificial intelligence based on Tangled Program Graphs (TPGs). The purpose of this framework, developed as a C++ shared library, is to make it as easy and as fast as possible and to train an agent on a new learning environment. The C++ library is developed to be portable, fully documented, and thoroughly unit tested to ensure its maintainability. GEGELATI is developed at the Institut d'Electronique et des Technologies du numéRique (IETR).
- ⚙️ Continuous Integration
- 🖼️ Application Gallery
- 🛠️ Build and Install the Library
- 📖 How to Use the GEGELATI Library
- 🎓 Citing GEGELATI
- ⚖️ License
All branches | CI Status | SonarCloud Analysis* |
---|---|---|
master | ||
develop |
Environments currently covered by the continuous integration are:
ubuntu-latest
: Linux (Ubuntu 20.04) with GCC 9.3 and Clang 11.windows-latest
: Windows Server 2019 (10.0.17763) with Microsoft Visual Studio 2019.macos-latest
: Mac OS X (10.15.7 ) with Clang 12.0.0
For more (and updated) information on CI environment, please refer to GitHub doc.
You can try GEGELATI with our (growing) set of open-source applications.
Atari Games | Inverted Pendulum | MNIST | Tic Tac Toe |
---|---|---|---|
Checkout the gegelati-apps repository for more. If you have developed your own open-source learning environment and think it deserves to be listed here, don't hesitate to send us an e-mail.
Because being too lazy to build the library yourself is OK too.
Binaries of the library for windows (MSVC only) are available at the following links:
To use these binaries, simply unzip them in a lib
directory of your c++ project, and follow the "How to Use the GEGELATI Library" guide.
The build process of GEGELATI relies on cmake to configure a project for a wide variety of development environments and operating systems. Install cmake on your system before building the library.
The GEGELATI code is annotated with the doxygen syntax. Because having a proper code documentation is fundamental, its generation is a mandatory part of the build process. Install doxygen on your system before building the library.
To build the shared library (and its code documentation), you can execute the following commands:
git clone https://github.com/gegelati/gegelati.git
cd gegelati/bin
cmake ..
cmake --build . --target INSTALL # On Windows
cmake --build . --target install # On Linux
The shared library will be installed:
- On Windows: in the
gegelati/bin/gegelatilib-<version>
folder. - On Linux, in the shared folders
/usr/local/lib/cmake/GEGELATI
,/usr/lib/libGEGELATI.so.<version>
,/usr/local/include/GEGELATI/
, and/usr/local/share/doc/GEGELATI-<version>
.
For a gentle introduction to the c++ API of GEGELATI, we strongly recommend you to follow our tutorials. These tutorials will guide you through the different features of the library and will help you better understand the functionning of TPGs.
Since sometimes, a simple example is worth 10.000 pages of documentations, examples of applications built with the GEGELATI library are available in the gegelati-apps repository.
To add GEGELATI to your c++ project, simply add the following lines to yourCMakeLists.txt
configuration:
# *******************************************
# *********** GEGELATI LIBRARY **************
# *******************************************
if(WIN32)
set(LIBS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/lib)
# find the gegelatilib-x.y.z folder in the lib directory.
file(GLOB GEGELATI_ROOT_DIR "${LIBS_DIR}/gegelatilib-[\\.|0-9]*")
set(ENV{GEGELATI_DIR} ${GEGELATI_ROOT_DIR})
endif()
find_package(GEGELATI)
if (WIN32)
file(GLOB
GEGELATI_DLL
${GEGELATI_ROOT_DIR}/bin/*.dll
)
MESSAGE("Copy GEGELATI DLLs into ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}")
if(NOT ${CMAKE_GENERATOR} MATCHES "Visual Studio.*")
file(COPY ${GEGELATI_DLL} DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
else()
file(COPY ${GEGELATI_DLL} DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Debug)
file(COPY ${GEGELATI_DLL} DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Release)
endif()
endif()
and (don't forget to replace YOUR_EXECUTABLE with... well, your executable name).
target_link_libraries(YOUR_EXECUTABLE ${GEGELATI_LIBRARIES})
(10.000 pages of documentation (or less) coming soon...)
If you use, criticize, or praise GEGELATI in your research, please cite the following:
K. Desnos, N. Sourbier, P.-Y. Raumer, O. Gesny and M. Pelcat. GEGELATI: Lightweight Artificial Intelligence through Generic and Evolvable Tangled Program Graphs. In Workshop on Design and Architectures for Signal and Image Processing (DASIP), ACM, 2021
Or using Bibtex:
@inproceedings{Desnos_GEGELATI_2021,
title = {GEGELATI: Lightweight Artificial Intelligence through Generic and Evolvable Tangled Program Graphs},
author = {Karol Desnos and Nicolas Sourbier and Pierre-Yves Raumer and Olivier Gesny and Maxime Pelcat },
year = {2021},
date = {2021-01-18},
booktitle = {Workshop on Design and Architectures for Signal and Image Processing (DASIP)},
publisher = {ACM},
address = {Budapest, Hungary},
series = {International Conference Proceedings Series (ICPS)},
}
This project is distributed under the CeCILL-C license (see LICENSE file).