Giter Site home page Giter Site logo

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

Gegelati's Projects

gegelati icon gegelati

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

gegelati-apps icon gegelati-apps

Application repository for the GEGELATI Tangled Program Graph library.

gegelati-codegen-performance icon gegelati-codegen-performance

Repository storing scripts and sources to compare the inference between the native functions in gegelati and generated code

skellcotpg icon skellcotpg

A genetic programming framework with emphasis on emergent modularity.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.