Automatic Programming Through Combinatorial Evolution

by   Sebastian Fix, et al.

It has been already shown that combinatorial evolution - the creation of new things through the combination of existing things - can be a powerful way to evolve rather than design technical objects such as electronic circuits in a computer simulation. Intriguingly, only a few iterations seem to be required to already achieve complex objects. In the present paper we want to employ combinatorial evolution in software development. Our research question is whether it is possible to generate computer programs of increasing complexity using automatic programming through combinatorial evolution. Specifically, we ask what kind of basic code blocks are needed at the beginning, how are these code blocks implemented to allow them to combine, and how can code complexity be measured. We implemented a computer program simulating combinatorial evolution of code blocks stored in a database to make them available for combinations. Automatic programming is achieved by evaluating regular expressions. We found that reserved key words of a programming language are suitable for defining the basic code blocks at the beginning of the simulation. We also found that placeholders can be used to combine code blocks and that code complexity can be described in terms of the importance to the programming language. As in the previous combinatorial evolution simulation of electronic circuits, complexity increased from simple keywords and special characters to more complex variable declarations, to class definitions, to methods, and to classes containing methods and variable declarations. Combinatorial evolution, therefore, seems to be a promising approach for automatic programming.


page 1

page 2

page 3

page 4


Quantifying the Impact on Software Complexity of Composable Inductive Programming using Zoea

Composable inductive programming as implemented in the Zoea programming ...

A Programming Language For Quantum Oracle Construction

Many quantum programs require circuits for addition, subtraction and log...

Compiling Combinatorial Genetic Circuits with Semantic Inference

A central strategy of synthetic biology is to understand the basic proce...

Modular Formal Verification of Rust Programs with Unsafe Blocks

Rust is a modern systems programming language whose type system guarante...

Evolution of Things

Evolution is one of the major omnipresent powers in the universe that ha...

Self-Modifying Code in Open-Ended Evolutionary Systems

Having a model and being able to implement open-ended evolutionary syste...

Enumerating combinatorial triangulations of the hexahedron

Most indirect hexahedral meshing methods rely on 10 patterns of subdivis...

Please sign up or login with your details

Forgot password? Click here to reset