I just watched a pretty cool ted talk by Danny Hillis dated 1994.
At one point in the video, he talks about "evolutionary programming", i.e. he asks the computer to generate hundreds of programs by generating random sequences of commands, then tests to see how well each program sorts numbers. He keeps 10% of the programs that sorts numbers the best, then generates a next round of programs based on the 10% that did well and repeats as many times as he wants to, to eventually generate the ultimate sorting program.
Are there tools/programming languages out there that do this? E.g. given certain constraints, generates C code that best satisfies those constraints.
I've visited some wikipedia articles related to "Evolutionary Programming"; there seems to be a lot of theory there, but it doesn't seem easy to find something you can just play with.
Evolutionary programming is one of the four major evolutionary algorithm paradigms. It is similar to genetic programming, but 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.
In a "genetic algorithm," the problem is encoded in a series of bit strings that are manipulated by the algorithm; in an "evolutionary algorithm," the decision variables and problem functions are used directly. Most commercial Solver products are based on evolutionary algorithms.
An evolutionary algorithm (EA) is an algorithm that uses mechanisms inspired by nature and solves problems through processes that emulate the behaviors of living organisms. EA is a component of both evolutionary computing and bio-inspired computing. EAs are inspired by the concepts in Darwinian Evolution.
2.3 Evolutionary Programming (EP) [25, 26] This is a stochastic optimization strategy similar to genetic algorithms. It places emphasis on the behavioral linkage between parents and their offspring, rather than seeking to emulate specific genetic operators as observed in nature.
A very simple and general free downloadable source is TinyGP implemented in Java. By the way.. for more details on this you should search information about "genetic programming" instead of "evolutionary programming". it is all a bit confusing because there are so many subfields of evolutionary computation with small diffrences in the names like "genetic algorithms", "evolutionary strategies", "evolutionary programming", "genetic programming"... but i think what you're talking about is actually genetic programming
One practical example:
Csmith is a tool that can generate random C programs that statically and dynamically conform to the C99 standard. It is useful for stress-testing compilers, static analyzers, and other tools that process C code. Csmith has found bugs in every tool that it has tested, and we have used it to find and report more than 400 previously-unknown compiler bugs.
Classic examples are Tierra and Avida.
A relevant area is hardware evolution and evolutionary robotics, see this page for example.
There's also a nice book about evolutionary computing in Mathematica.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With