Transcript: Hi. I'm Tim Tyler and this is a video about memetic programming.
The term "memetic programming" is often used to refer to mental software.
In computer science there is a hardware software divide - which is based on how easy systems are to upgrade: hardware is difficult to upgrade while upgrading software is easy. Much the same classification scheme maps pretty neatly onto animal nervous systems. In particular, brains are hard to upgrade, while learned information is easy to upgrade. Socially learned phenomena are a lot like a type of cultural software. Culture is easily hot-swapped and modified much like software is. As with computer software, there are memetic programs written in memetic codes - and there are memetic programmers and deprogrammers.
While this usage of the term "memetic programming" is interesting, it isn't the topic of this video. Instead, this video is about the subset of memetic algorithms that are based on using a computer program of some kind as their genome.
To recap, genetic algorithms were used to solve optimisation problems, starting in the 1960s. In the 1990s, genetic programming was popularised by John Koza. Koza used a computer program as a genome and developed programs with a tree-like structure, in an attempt to make the crossover operation more useful. Around the same time, memetic algorithms were conceived. Where genetic algorithms attempted to mimic organic evolution, memetic algorithms drew inspiration from cultural evolution. They typically featured individual or social learning in combination with more conventional aspects of genetic algorithms.
Computer programs are an interesting and flexible target for evolutionary approaches to optimization problems. They typically help to provide a neat split between the genome, a developmental program and the resulting phenotype. The use of tree-shaped chromosomes has advantages in that recombination potentially becomes more wide-ranging. A tree-shaped genome makes it a bit harder to exchange functionally-corresponding modules between two trees - but this is a manageable problem.
One issue associated with most kinds of computer program is that they are often relatively poorly suited for parallel programming. You can fork execution threads - but this is a clumsy approach to parallel execution. Automatic parallelization is another possibility - but this also has serious limitations. Similar universal media which are more suitable for parallelization include neural networks, networks of logic gates and circuit board floorplanning. However attempts to make mutation and recombination-friendly versions of these have not been very successful so far. Consequently, these parallel representations tend to be treated as phenotypes - produced from computer programs by a developmental process - which brings us back to having a computer program as a genome again.
There are quite a few papers on memetic algorithms, genetic algorithms and genetic programming. However, memetic programming hasn't received much attention from academics yet. There are only a few papers on the topic so far. It ought to be a fertile mix of genetic programming and memetic algorithms.
Many picture a future in which teams of machine programmers collectively work on the source code of the next generation of machines. This is the essence of memetic programming. If these sorts of dynamics are going to be important in the future, then we should start studying them more seriously now.