# trimton: Adjust the amount of turbines per windfarm In windfarmGA: Genetic Algorithm for Wind Farm Layout Optimization

## Description

Adjust the mutated individuals to the required amount of turbines.

## Usage

 `1` ```trimton(mut, nturb, allparks, nGrids, trimForce, seed) ```

## Arguments

 `mut` A binary matrix with the mutated individuals `nturb` A numeric value indicating the amount of required turbines `allparks` A data.frame consisting of all individuals of the current generation `nGrids` A numeric value indicating the total amount of grid cells `trimForce` If `TRUE` the algorithm will use a probabilistic approach to correct the windfarms to the desired amount of turbines. If `FALSE` the adjustment will be random. Default is `FALSE` `seed` Set a seed for comparability. Default is NULL

## Value

Returns a binary matrix with the correct amount of turbines per individual

Other Genetic Algorithm Functions: `crossover()`, `fitness()`, `genetic_algorithm()`, `init_population()`, `mutation()`, `selection()`, `windfarmGA()`
 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54``` ```## Create a random rectangular shapefile library(sf) Polygon1 <- sf::st_as_sf(sf::st_sfc( sf::st_polygon(list(cbind( c(0, 0, 2000, 2000, 0), c(0, 2000, 2000, 0, 0)))), crs = 3035 )) ## Create a uniform and unidirectional wind data.frame and plots the ## resulting wind rose ## Uniform wind speed and single wind direction data.in <- as.data.frame(cbind(ws=12, wd=0)) ## Calculate a Grid and an indexed data.frame with coordinates and grid cell Ids. Grid1 <- grid_area(shape = Polygon1, size = 200, prop = 1); Grid <- Grid1[[1]] AmountGrids <- nrow(Grid) startsel <- init_population(Grid,10,20); wind <- as.data.frame(cbind(ws=12,wd=0)) wind <- list(wind, probab = 100) fit <- fitness(selection = startsel, referenceHeight = 100, RotorHeight = 100, SurfaceRoughness=0.3, Polygon = Polygon1, resol1 = 200, rot = 20, dirspeed = wind, srtm_crop="", topograp=FALSE, cclRaster="") allparks <- do.call("rbind", fit); ## SELECTION ## print the amount of Individuals selected. ## Check if the amount of Turbines is as requested. selec6best <- selection(fit, Grid,2, TRUE, 6, "VAR"); selec6best <- selection(fit, Grid,2, TRUE, 6, "FIX"); selec6best <- selection(fit, Grid,4, FALSE, 6, "FIX"); ## CROSSOVER ## u determines the amount of crossover points, ## crossPart determines the method used (Equal/Random), ## uplimit is the maximum allowed permutations crossOut <- crossover(selec6best, 2, uplimit = 300, crossPart="RAN"); crossOut <- crossover(selec6best, 7, uplimit = 500, crossPart="RAN"); crossOut <- crossover(selec6best, 3, uplimit = 300, crossPart="EQU"); ## MUTATION ## Variable Mutation Rate is activated if more than 2 individuals represent ## the current best solution. mut <- mutation(a = crossOut, p = 0.3, NULL); ## TRIMTON ## After Crossover and Mutation, the amount of turbines in a windpark change and have to be ## corrected to the required amount of turbines. mut1 <- trimton(mut = mut, nturb = 10, allparks = allparks, nGrids = AmountGrids, trimForce = FALSE) colSums(mut) colSums(mut1) ```