#if defined(SCALING) static FUNCTION main_scaling_functions[] = { { "no_scaling", no_scaling, (PFV) 0, "No scaling is done." } }; #endif static FUNCTION main_survivor_functions[] = { { "random", random_survivors, (PFV) 0, "The individuals that are to be copied directly into the next generation\n\ as a result of the generation gap being less than 1.0 are selected at\n\ random from the current population." }, { "best", best_survivors, (PFV) 0, "The individuals that are to be copied directly into the next generation\n\ as a result of the generation gap being less than 1.0 are the ones that\n\ were of highest fitness in the current population." } }; static FUNCTION main_selection_functions[] = { { "tournament", tournament_selection, (PFV) 0, "The individuals that are to be used for genetic operations in order to\n\ produce the next generation are chosen as a result of a series of two\n\ individual tournaments. It is possible to change the selection of\n\ tournament competitors from with replacement (the default) to without\n\ replacement by #defining a constant in selectors.c" }, { "roulette", roulette_selection, (PFV) 0, "The individuals that are to be used for genetic operations in order to\n\ produce the next generation are chosen using a fitness proportionate\n\ rule like a biased roulette wheel. This is the selection method used in\n\ the simple GA of Goldberg's book." }, { "all", select_all, (PFV) 0, "In this simple scheme, all the current individuals are considered\n\ equally worthy of reproducing. This may not seem like a very good\n\ idea, but it is a useful option if you ever want to turn off this\n\ aspect of a normal GA. With this function, the population will be\n\ left alone - every individual will be made available for genetic\n\ processing." } }; static FUNCTION main_crossover_functions[] = { { "no_crossover", no_crossover, (PFV) 0, "This may seem like a strange crossover operator, but if you\n\ are interested in hill-climbing on your problem, or if you want to\n\ turn off crossover completely, you can do this. This function just\n\ copies the whole generation, no one is left behind and no-one is\n\ crossed over. Note that this is NOT the same as setting the crossover\n\ probability to zero, since in that case individuals are still being\n\ selected at *random* from the population and they go into the next\n\ generation unscathed. The randomness in this procedure does not\n\ guarantee that everyone will survive." }, { "no_crossover_random_copy", no_crossover_random_copy, (PFV) 0, "In this simple form, no crossover is done, but pairs of individuals\n\ are still chosen at random to go into the next generation. This is\n\ equivalent to setting the crossover probability to zero, but is faster\n\ than that since it never checks to see if crossover should be done, it\n\ just gets on with the job." }, #if defined(APP_INDIVIDUALS_HAVE_CONSTANT_SIZE) && defined(APP_INDIVIDUALS_ARE_STRINGS) { "one_point", one_pt_crossover, (PFV) 0, "Standard one point crossover." }, { "two_point", two_pt_crossover, (PFV) 0, "Standard two point crossover." }, { "uniform", uniform_crossover, (PFV) 0, "Standard uniform crossover, with bits being given to children\n\ in accordance with the uniform probability value which can be set\n\ with the -uniform_probability option." } #endif }; static FUNCTION main_mutation_functions[] = { { "no_mutation", no_mutation, (PFV) 0, "Mutation is turned off." }, #if defined(APP_INDIVIDUALS_HAVE_CONSTANT_SIZE) && defined(APP_INDIVIDUALS_ARE_STRINGS) { "simple", simple_mutation, (PFV) 0, "Each bit in the population is mutated with a certain (usually low)\n\ probability." } #endif };