Dear list, regarding my Genetic Programming hobby, I have a question about redefinitions in the source code.
Just briefly, the process goes so that a GP individual is given a chance to reproduce an offspring by executing its function X. At another point of time the offspring is given a change to run the fittness test by executing its function Y. The offspring is basically a module source code. Due to GP's crossover and mutation functions, the offsprings source code can suggest function redefinitions in (atleast) two ways. For example (define a 3) (define a 7) (set! a (+ 1 2)) (define a b) (set! a (+ b c)) Now, when the offspring function "a" is called, will it return error or one of the definitions above? If latter, then which one will it pick and why? I mostly run the process from a shell commandline/ racket. If racket doesn't allow redefinitions by default, how could I change it? This may seem silly, but actually by having the redefitions allowed can have positive benefits, I think: - You can have "resessive" alternatives to functions that increase diversity in the population (many possible answers). - You can preserve a "once useful" definition in the population that may become useful once again after a long time (~like resistence to a serious disease) - Giving the evolution the time and space needed to "work out" more complex redefinitions. When unactivated (resessive), the redefinition can use many generations of crossover and mutations to come up with a radically different solution (and also bypass the local optima obstacle). Then, all you need is to remove the prominant definition to active the new, resessive definition. Crossover or mutation will handle the removal easily in the future generations. All this allows hidden evolution to take place, while the prominant functionality is always the fittest known (fenotype). Now, I could be wrong there... Comments? br, jukka ____________________ Racket Users list: http://lists.racket-lang.org/users