Hello All, As part of the design for a simple genetic algorithm I have this function:
(define (roulette-wheel-ratio generation-fitness ) (cond [(empty? generation-fitness) empty] [else (cons (/ (first generation-fitness) (total-population-fitness generation-fitness)) (roulette-wheel-ratio (rest generation-fitness)))])) where generation-fitness is a list of values that correspond to the fitness of each individual in a population. For example, in a generation with population size 12, generation fitness may look like: '(7.8807275269175125 6.78896220864992 6.52572681075793 3.208263473483078 9.970710802683316 10.400703374724888 7.434703353949041 6.009574612909729 2.9503066173989634 6.07124467626777 2.1893449585751754 1.0741024515301607) Here is how I have defined the auxiliary function, total-population-fitness: (define (total-population-fitness generation-fitness) (foldl + 0 generation-fitness)) I was wondering how can I modify the above function, roulette-wheel-ratio so that when it evaluates the helper function, total-population-fitness it only does so for the initial list of generation-fitness. Otherwise the total population fitness decreases for each recursive call which is what I don't want, it should remain constant throughout the entire function call. Basically, is it possible to modify this function so that the auxiliary function call (total-population-fitness generation-fitness) remains unaffected by the natural recursion imposed by roulette-wheel-ratio? Any help would be appreciated as I am still learning the Racket basics. Kind Regards, -- Rian Shams
____________________ Racket Users list: http://lists.racket-lang.org/users