Truth emerges more readily from error than from confusion.
— Francis Bacon (1561–1626)

What is MicroGP?

MicroGP is an evolutionary optimizer: given a problem, it first creates a set of random solutions, then iteratively refines and enhances them using the result of their evaluations together with structural information. MicroGP is extremely versatile: it is able to tackle problem those solutions are simple fixed-length bit strings, as well as to optimize realistic assembly programs including loops, interrupts and recursive sub routines; moreover, candidate solutions can be evaluated using proprietary external tools.

MicroGP routinely outperforms both human experts and conventional heuristics, and over the years has been exploited as a coverage-driven fuzzer, as a general-purpose optimizer, and as a framework for prototyping and testing new ideas. Several papers discussing possible applications can be found in the scientific literature.

Audience

The expected audience for MicroGP4 includes computer scientists, engineers and practitioners.

  • MicroGP4 is available as a PyPi package and it can be easily installed using pip.
  • MicroGP4 can be used interactively from a Jupyter notebook — just like scikit-learn and keras — allowing to quickly assess new ideas and build prototypes.
  • An external tool can be used as evaluator, allowing to handle virtually any problem.
  • The evolutionary code can be tweaked injecting user-defined Python functions, without the need to hack the package itself.
  • The modular design allows scholars to exploit MicroGP4 for testing new ideas and novel algorithms.

In the past, due to its ability to handle realistic assembly programs and to exploit commercial simulators, MicroGP has been extensively used for the test, verification and validation of programmable cores and sequential circuits.

History

The MicroGP project started around the year 2000, with the creation of a collection of scripts for optimizing assembly-language programs. A fully working program was first coded in C in 2002, and then re-engineered in C++ in 2006; the design of a Python version started in 2018. MicroGP4 would not have been possible without the help and support of several people.

Alternatives

Among the remarkable alternatives to MicroGP are:

  • ECJ — A Java-based Evolutionary Computation Research System
  • DEAP — Distributed Evolutionary Algorithms in Python
  • inspyred — A framework for creating bio-inspired computational intelligence algorithms in Python
  • Jenetics — A Genetic Algorithm, Evolutionary Algorithm, Genetic Programming, and Multi-objective Optimization library, written in modern-day Java
  • Open BEAGLE — A generic C++ framework for evolutionary computation