Performs the mutation operation on an individual’s chromosome.
#include <imsls.h>
void imsls_f_ga_mutate (float p, Imsls_f_individual *individual, …, 0)
The type double function is imsls_d_ga_mutate.
float p
(Input)
The mutation probability. p can be any value
between 0 and 1. Most applications
set the probability to a value in the range 0.01 to 0.001.
Imsls_f_individual
*individual (Input/Output)
An existing individual that
will undergo mutation.
#include <imsls.h>
void
imsls_f_ga_mutate (float
p,
Imsls_f_individual *individual,
IMSLS_PRINT,
IMSLS_SWAP_MUTATION,
0)
IMSLS_PRINT
(Input)
By default, results are not printed. This option turns on
printing of summary information for the individual showing the chromosome before
and after mutation.
IMSLS_SWAP_MUTATION
(Input)
By default, swap encoding of nominal phenotype values is not
used. This option turns on swap mutation for nominal phenotypes which
ensures that after mutation the new individual contains the same nominal
phenotype values with at most two of them having swapped positions. Swap
mutation has no effect on the mutation of binary, integer or real
phenotypes.
Function imsls_f_ga_mutate performs the genetic algorithm mutation operation on the chromosome of an Imsls_f_individual data structure. Each bit assigned to binary, integer and real phenotypes undergoes the mutation operation using probability p. If the bit is zero it is switched to one and vice versa.
Mutation for nominal phenotypes is handled differently since these are not encoded as binary bits. Each bit assigned to a nominal phenotype can take on a range of values from 0, 1, … n_categories[i]-1. Any mutation must preserve this encoding. If the nominal phenotypes are further encoded using PMX crossover, then mutation must preserve that encoding as well.
For non-PMX encoded nominal phenotypes, each nominal phenotype value is mutated with probability p. If it is selected for mutation, its new value is randomly selected from the uniform discrete distribution of values from 0, 1,… n_categories[i]-1.
If PMX encoding is being used, the optional argument IMSLS_SWAP_MUTATION should be employed. This argument invokes swap mutation for the nominal phenotypes. Two nominal phenotypes are randomly selected and then their values are swapped with probability p. This ensures that the resulting new individual has the same nominal values, with at most two of them having switched positions.