An Introduction To Genetic And Evolutionary Programming (Guide)


One of the central challenges of computer science is to get a computer to do what needs to be done, without telling it how to do it. Genetic programming is an approach that seems most appropriate with problems in which there are a large number of fluctuating variables such as those related to artificial intelligence. 

Genetic programming addresses this challenge by providing a method for automatically creating a working computer program from a high-level problem statement of the problem. In artificial intelligence, genetic programming (GP) is a technique of evolving programs, starting from a population of unfit (usually random) programs, fit for a particular task by applying operations analogous to natural genetic processes to the population of programs.

It is essentially a heuristic search technique often described as 'hill climbing', i.e. searching for an optimal or at least suitable program among the space of all programs. Genetic programming achieves this goal of automatic programming (also sometimes called program synthesis or program induction) by genetically breeding a population of computer programs using the principles of Darwinian natural selection and biologically inspired operations. 

The operations include reproduction, crossover (sexual recombination), mutation, and architecture-altering operations patterned after gene duplication and gene deletion in nature.

Evolutionary programming on the other hand, is one of the major evolutionary algorithm paradigms such as the Genetic Algorithm, and Learning Classifier Systems. It is sometimes confused with Genetic Programming given the similarity in name, and more recently it shows a strong functional similarity to Evolution Strategies. 

Unlike genetic programming, the structure of the program to be optimized is fixed, while its numerical parameters are allowed to evolve. It was first used by Lawrence J. Fogel in the US in 1960, in order to use simulated evolution as a learning process aiming to generate artificial intelligence. Fogel used finite-state machines as predictors and evolved them. 

Currently evolutionary programming is a wide evolutionary computing dialect with no fixed structure or (representation), in contrast with some of the other dialects. It is becoming harder to distinguish from evolutionary strategies. Its main variation operator is mutation; members of the population are viewed as part of a specific species rather than members of the same species therefore each parent generates an offspring, using a (μ + μ).

Unlike Evolutionary programming, Genetic programming uses the ideas (and some of the terminology) of biological evolution to handle a complex problem. Of a number of possible programs (usually small program functions within a larger application), the most effective programs survive and compete or cross-breed with other programs to continually approach closer to the needed solution. 

Specifically, genetic programming iteratively transforms a population of computer programs into a new generation of programs by applying analogs of naturally occurring genetic operations.


So what Are The Preparatory Steps of Genetic Programming?

The human user communicates the high-level statement of the problem to the genetic programming system by performing certain well-defined preparatory steps. The five major preparatory steps for the basic version of genetic programming require the human user to specify:

The set of terminals (e.g., the independent variables of the problem, zero-argument functions, and random constants) for each branch of the to-be-evolved program;
The set of primitive functions for each branch of the to-be-evolved program;
The fitness measure (for explicitly or implicitly measuring the fitness of individuals in the population);
Certain parameters for controlling the run;
The termination criterion and method for designating the result of the run.

Genetic programming goes a step farther and makes the program or "function" the unit that is tested. Two approaches are used to select the successful program - cross-breeding and the tournament or competition approach. A difficult part of using genetic programming is determining the fitness function, the degree to which a program is helping to arrive at the desired goal. 

A simple example of a task suited for genetic programming would be devising a program to fire a gun. The distance by which the bullet misses its target would determine the fitness function.Typically, members of each new generation are on average more fit than the members of the previous generation, and the best-of-generation program is often better than the best-of-generation programs from previous generations. 

Termination of the recursion is when some individual program reaches a predefined proficiency or fitness level. It may and often does happen that a particular run of the algorithm results in premature convergence to some local maximum which is not a globally optimal or even good solution. 

Multiple runs (dozens to hundreds) are usually necessary to produce a very good result. It may also be necessary to increase the starting population size and variability of the individuals to avoid pathologies. The genetic programming model is mostly used with the LISP and Scheme programming languages. However, it can also be used with C and other programming languages.


The Following Are Some GP Applications And Packages:

Clojush (Clojure/Java) by Lee Spector, Thomas Helmuth, and additional contributors.

Clojush is a version of the Push programming language for evolutionary computation, and the PushGP genetic programming system, implemented in Clojure. Push features a stack-based execution architecture in which there is a separate stack for each data type. PushGP has been used for a variety of applications, ranging from intelligent agent design to automatic quantum computer programming. 

It has also been used for “meta-genetic-programming” or “autoconstructive evolution” experiments, in which programs and genetic operators co-evolve or in which programs produce their own offspring while also solving problems.

Data Modeler (Mathematica) By Evolved Analytics
The DataModeler package is developed within the context of industrial data analysis with a goal of rapid analysis, interpretation and exploitation of multivariate data sets. So what does a data modeler do? A data modeler ensures an organization's data is organized correctly and optimized into an information system to help achieve critical objectives.

DEAP (Python) Distributed Evolutionary Algorithms by Félix-Antoine Fortin and François-Michel De Rainville

DEAP is a novel evolutionary computation framework for rapid prototyping and testing of ideas. It seeks to make algorithms explicit and data structures transparent. It works in perfect harmony with parallelisation mechanism such as multiprocessing and SCOOP.

ECJ (Java) by Sean Luke, et al.
ECJ is a research Evolutionary Computation system written in Java. It was designed to be highly flexible, with nearly all classes (and all of their settings) dynamically determined at runtime by a user-provided parameter file. All structures in the system are arranged to be easily modifiable. Even so, the system was designed with an eye toward efficiency.

Eureqa (web) by Nutonian
Eureqa is a Machine Intelligence™ application that automates much of the heavy lifting inherent in analytics and data science. Leveraging automated evolutionary algorithms, Eureqa churns through your data to create accurate predictive models in minutes rather than months.

FCUBE (Amazon cloud) by ALFA Group, CSAIL, MIT
A platform for collaborative learning supporting and uniting developers of home-brewed classifier algorithms to solve relevant problems of public domain. FCUBE allows users to:

Easily upload datasets;
Execute classification algorithms with large training data with a preset computational budget on Amazon EC2;
Easily contribute your standalone classifier in executable format (Java, python) or as source code (must compile in Linux: C, C++ etc);
Retrieve the solutions from the cloud nodes, build a fused model, and compute the testing predictions.

Karoo GP (Python) by Kai Staats
A Python based genetic programming application suite with support for symbolic regression and classification. Karoo GP is a scalable platform with multicore support, designed to work with realworld data. As a teaching tool, it enables instructors to share step-by-step how an evolutionary algorithm arrives to its solution. 

As a hands-on learning tool, Karoo GP supports rapid, repeatable experimentation with a simple interface. Ready to run, no programming required.


Multi-core And GPU Support Via TensorFlow
It provides a desktop application, a simple user interface with menu, 5 display modes, and runtime reconfiguration of parameters. It is also a server application which supports preset and/or argument-based scripting. Written in Object Oriented Python with a hierarchical naming scheme for all methods ---it is relatively a simple framework for preparing custom fitness functions and evaluation routines which:
  • Anticipates datasets as standard .csv files.
  • Auto-records the full population of each generation and runtime configuration.
  • Supports the loading of customised seed populations.

Linear Genetic Programming (Kotlin) by Jed Simson

An implementation of Linear Genetic Programming (LGP) as outlined by M. F. Brameier and W. Banzhaf (2007). LGP is a paradigm of genetic programming that employs a representation of linearly sequenced instructions in automatically generated programs. 

A linear approach lends itself to programs which have two unique attributes: a graph-based functional structure and the existence of structurally non-effective instructions. This particular implementation is written using the Kotlin programming language and provides:

A modern, robust, and easy-to-use API;
A modular system design that allows extensibility of entire system components;
Numerous built-in components for use in different contexts (e.g. parallelised evolutionary algorithms, fitness functions);
Cross-platform support due to being built on a JVM-based language;
Extensive API documentation and usage guide;
Completely open-source and still in active development.

Modular Agent Based Evolution Framework (mixed environments and platforms) by Hintzelab

MABE is a digital evolution research tool used to create and manage populations of evolving digital organisms. Mabe is a framework with modular parts which can be combined to create experiments. MABE encourages users to develop new modules if needed, and use existing modules when possible.

The Purpose Of MABE Is Threefold:
  • To support and accelerate research into topics related to digital evolution.
  • To provide insight into evolution and evolutionary processes in both digital and biological contexts.
  • To provide a platform which allows for direct comparisons.


Symbiotic Bid-Based GP (Python) by Jessica Pauli de Castro Bonson

Symbiotic Bid-Based GP (SBB) is a framework for coevolving teams of programs that learn how to autonomously decompose a decision task. Solutions therefore always consist of at least two programs. The framework assumes that decisions take the form of a discrete set of actions (as in classification and reinforcement learning with atomic actions).

To date, examples of the SBB framework have been demonstrated for multi-class classification, and single and multi-agent reinforcement learning in control and computer gaming (e.g. Acrobot, Rubik’s Cube, keepaway soccer, MsPacMan, Poker). However, this implementation of SBB focus on reinforcement learning, and is not recommended for classification.


Early works that set the stage for current genetic programming research topics and applications is diverse, and includes software synthesis and repair, predictive modeling, data mining, financial modeling, soft sensors, design, and image processing. Applications in some areas, such as design, often make use of intermediate representations, such as Fred Gruau’s cellular encoding.

Today, industrial uptake has been significant in several areas including finance, the chemical industry, bioinformatics, steel industry etc. As AI and ML are being applied across various channels and industries, big corporations invest in these fields, and the demand for experts in ML and AI grows accordingly.

Python is one of the best programming languages for ML and AI. Python for machine learning is a great choice, as this language is very flexible:
  • It offers an option to choose either to use Object-Oriented Programming System or scripting.
  • There’s also no need to recompile the source code, developers can implement any changes and quickly see the results.
  • Programmers can combine Python and other languages to reach their goals.

Moreover, flexibility allows developers choose the programming styles which they are fully comfortable with or even combine these styles to solve different types of problems in the most efficient way. The imperative style consists of commands that describe how a computer should perform these commands.With this style, you define the sequence of computations which happen like a change of the program state.

The functional style is also called declarative because it declares what operations should be performed. It doesn’t consider the program state, compared to the imperative style, it declares statements in the form of mathematical equations.

Further, the object-oriented style is based on two concepts: class and object, where similar objects form classes. This style is not fully supported by Python, as it can’t fully perform encapsulation, but developers can still use this style to a finite degree.

The procedural style is the most common among beginners, as it proceeds tasks in a step-by-step format. It’s often used for sequencing, iteration, modularization, and selection. The flexibility factor decreases the possibility of errors, as programmers have a chance to take the situation under control and work in a comfortable environment.

Machine learning and artificial intelligence-based projects are obviously what the future holds. Better personalization, smarter recommendations, and improved search functionality. Apps are becoming smarter – that’s what artificial intelligence (AI) has brought, enhancing the user experience and creating value across many industries.
Tags

#buttons=(Accept !) #days=(20)

Our website uses cookies from Google to enhance your experience. Our Privacy Policy
Accept !