A couple of things I learnt from Chaos Communication Congress #28 videos
- The key to sucess with cartesian genetic programming is a subtlety: the chosen child from the set of mutants should be as good as, or better than, its parent. You would think that it would be more efficient to always choose children which are better than their parents. This turns out not to be the case. By choosing children which are at least as good as their parents, we are allowing mutations to accumulate. This allows us to perform neutral search, in which we investigate several areas on the flat spot of the "fitness hill". If we don't do this, then we are relying on a single magic mutation to push us upwards. If instead we allow mutations to accumulate we don't have to rely on a single magic mutation, but instead can allow one mutation to activate several other accumulated mutations. (Automatic Algorithm Invention with a GPU)
- In Commodore 64 demos, you can use a counter to keep track of frame-by-frame jitter. However, in your interrupt service routine, you would normally have to examine the counter and then perform a computed jump, or do some other calculation, to perform different actions depending on the jitter value. This consumes a lot of cycles. Instead, you can set the interrupt service routine vector to be the jitter counter itself. When an interrupt occurs, the C64 will use the current value of the jitter counter as the location of the interrupt service routine. You can then put code in all locations in memory corresponding to the possible values of the jitter counter. (Behind the scenes of a C64 demo).