Skip to contents

The function randomly mutates an individual's genetic code

Usage

mutation(a, p, seed = NULL)

Arguments

a

The binary matrix of all individuals

p

The mutation rate

seed

Set a seed for comparability. Default is NULL

Value

Returns a binary matrix with mutated genes.

See also

Other Genetic Algorithm Functions: crossover(), fitness(), genetic_algorithm(), init_population(), selection(), trimton(), windfarmGA()

Examples

## Create 4 random individuals with binary values
a <- cbind(bin0 = sample(c(0,1), 20, replace=TRUE, prob = c(70,30)),
           bin1 = sample(c(0,1), 20, replace=TRUE, prob = c(30,70)),
           bin2 = sample(c(0,1), 20, replace=TRUE, prob = c(30,70)),
           bin3 = sample(c(0,1), 20, replace=TRUE, prob = c(30,70)))
a
#>       bin0 bin1 bin2 bin3
#>  [1,]    0    0    1    1
#>  [2,]    0    0    1    1
#>  [3,]    0    1    1    0
#>  [4,]    1    0    0    0
#>  [5,]    1    1    0    1
#>  [6,]    0    1    0    1
#>  [7,]    0    0    0    0
#>  [8,]    0    1    1    0
#>  [9,]    1    1    0    1
#> [10,]    0    1    0    1
#> [11,]    0    1    1    0
#> [12,]    0    1    1    1
#> [13,]    0    0    0    0
#> [14,]    1    1    1    1
#> [15,]    0    1    0    1
#> [16,]    1    0    0    1
#> [17,]    0    1    1    0
#> [18,]    0    1    1    1
#> [19,]    1    1    1    0
#> [20,]    0    1    1    1

## Mutate the individuals with a low percentage
aMut <- mutation(a, 0.1, NULL)
## Check which values are not like the originals
a == aMut
#>        bin0  bin1  bin2  bin3
#>  [1,]  TRUE FALSE  TRUE  TRUE
#>  [2,]  TRUE  TRUE  TRUE  TRUE
#>  [3,]  TRUE  TRUE  TRUE  TRUE
#>  [4,]  TRUE  TRUE FALSE  TRUE
#>  [5,]  TRUE  TRUE  TRUE  TRUE
#>  [6,]  TRUE  TRUE  TRUE  TRUE
#>  [7,]  TRUE FALSE  TRUE  TRUE
#>  [8,]  TRUE  TRUE  TRUE  TRUE
#>  [9,]  TRUE  TRUE  TRUE  TRUE
#> [10,]  TRUE FALSE  TRUE  TRUE
#> [11,]  TRUE  TRUE  TRUE  TRUE
#> [12,]  TRUE  TRUE  TRUE  TRUE
#> [13,]  TRUE  TRUE  TRUE  TRUE
#> [14,]  TRUE  TRUE  TRUE  TRUE
#> [15,]  TRUE  TRUE  TRUE  TRUE
#> [16,]  TRUE FALSE  TRUE  TRUE
#> [17,]  TRUE  TRUE  TRUE FALSE
#> [18,]  TRUE  TRUE  TRUE  TRUE
#> [19,] FALSE  TRUE  TRUE  TRUE
#> [20,]  TRUE  TRUE  TRUE FALSE

## Mutate the individuals with a high percentage
aMut <- mutation(a, 0.4, NULL)
## Check which values are not like the originals
a == aMut
#>        bin0  bin1  bin2  bin3
#>  [1,]  TRUE  TRUE  TRUE FALSE
#>  [2,]  TRUE FALSE  TRUE  TRUE
#>  [3,] FALSE FALSE  TRUE FALSE
#>  [4,] FALSE  TRUE  TRUE  TRUE
#>  [5,]  TRUE  TRUE  TRUE FALSE
#>  [6,] FALSE FALSE  TRUE  TRUE
#>  [7,] FALSE  TRUE  TRUE FALSE
#>  [8,]  TRUE  TRUE  TRUE FALSE
#>  [9,]  TRUE  TRUE FALSE  TRUE
#> [10,] FALSE FALSE FALSE  TRUE
#> [11,]  TRUE  TRUE  TRUE  TRUE
#> [12,]  TRUE FALSE  TRUE  TRUE
#> [13,]  TRUE FALSE  TRUE  TRUE
#> [14,]  TRUE  TRUE FALSE  TRUE
#> [15,] FALSE FALSE  TRUE  TRUE
#> [16,]  TRUE FALSE FALSE  TRUE
#> [17,] FALSE  TRUE FALSE FALSE
#> [18,] FALSE  TRUE FALSE FALSE
#> [19,]  TRUE  TRUE  TRUE  TRUE
#> [20,]  TRUE  TRUE FALSE  TRUE