INTRODUCTION

I discovered machine learning at 18 during a school project on walking robots. Since then, it really moved me and I made a lot of personal project to simulate neural networks or simple machine learning algorithm. Things began to be a little bit more serious during my main project in engineer school second year. The goal of this project was to set up a system to simulate an ant robot and make it learn how to walk.

We started by testing already available genetic algorithm libraries and start our project with one of them. But I felt kind of limited by the extension possibilities of these libraries and I finally start writing a new one from scratch. The idea was to let the user describe any little pieces of the genetic algorithm structure.

I extended the research during my PhD which I started two years later. With the freedom offered by GenLib to describe a genetic algorithm structure, the problem was now to build something more efficient. The goal of GenLib then become to build multiple structures and compare them.

A lot of features have also been added from classic genetic algorithm for fitness function definition, aside population, database to store old results and sampling them efficiently. Curiosity based exploration are also really important in GenLib.

A full server-client architecture has been set up to allow to execute on remote machine a lot of simulation and to compare the result efficiently with data-viz methods.

Tech Specs

Computation core : C++ application, running on Linux remotely
Main Server : Java server, used for task ordonnancing on remote machine, logging and database cleaning
Monitoring client : Java GUI used to edit genetic algorithm structure, plan execution and display log and result data
DataBase : PostgreSQL database to store most interesting result along with evaluation summary

Open Source Availability

As this project had mainly been realized during my PhD, it is currently the property of my University. I fulfilled a request to publish it with an LGPL license and I am now waiting for the administrative process to conclude. I hope it will be available before the beginning of 2017 (the administrative process in France is sometimes lengthy).

SCREENSHOTS

  • Main Monitoring Panel

  • Genetic Algorithm Structure Editor

  • A Result Visualization

  • A Result Visualization

  • One of the simplest GA structure

MAIN FEATURES

All these features have been extensively used and tested during my PhD

Full extensibility

  • Every module can be extended easily : Score definition, Genes and genomes, genome selection
    population filter, genome comparison, etc...
  • High usage of polymorphism to allow specialization and generic usage
  • XML grammar adapted to this extensibility feature for the structure editor

GA Structure Editor

  • XML Based editor
  • Every block are documented in GUI
  • System to automatically discover inheritance link between modules
  • Easy to extends block list with a simple block description grammar

Monitoring

  • Automatic monitoring of selected metrics
  • Monitoring data are stored server side and could be consulted asynchronously
  • DataViz tools to efficiently summarize results of execution set
  • Usecase adapted visualization can be easily added

Curiosity

  • Curiosity driven fitness definitions
  • Interesting genomes are those which behave differently
  • Database sample used as reference population
  • Allow quick and interesting exploration of the solution space

Roadmap

  • Lots of idea for future features
  • Selection rule for crossover contained the genome
  • Live evolution (not by generation but like in a real enviromnent)
  • Local crossover (for 2d or 3d space based usecases), 2 individuals have to be at the same place to generate new genomes by crossover.

Database

  • Heart and memory of GenLib
  • Any interesting genome is stored in the database, with evaluation context data and behavior summary
  • This allow to bootstrap further executions
  • Aside population can be initialized with any SQL query.