/gegelati

Generic Evolvable Graphs for Efficient Learning of Artificial Tangled Intelligence. (A C++ framework for Tangled Program Graphs)

Primary LanguageC++OtherNOASSERTION

GEGELATI

Generic Evolvable Graphs for Efficient Learning of Artificial Tangled Intelligence

Introduction to GEGELATI

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).

Overview

⚙️ Continuous Integration

All branches CI Status SonarCloud Analysis*
master CI Quality Gate Status Coverage
develop CI Quality Gate Status Coverage

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.

🖼️ Application Gallery

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.

🛠️ Build and Install the Library

Binaries

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.

Build tools

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.

Hammer time!

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>.

📖 How to Use the GEGELATI Library

Learn with our tutorials

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.

Learn by Examples

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.

Link to the library with CMake

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})

Utilization Guide

(10.000 pages of documentation (or less) coming soon...)

🎓 Citing GEGELATI

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)},
}

⚖️ License

This project is distributed under the CeCILL-C license (see LICENSE file).