R6 Objects for modelling a whale. Female and Male inherit from whale. Use Female and Male if you want to provide custom lists of male and female whales when you instantiate an ocean.
Author
Homer White homerhanumat@gmail.com
Public fields
positionA numeric vector of length 2 giving the initial position. (Make sure that it's within the dimensions of the ocean.)
ageinitial age of the whale
lifespanlifespan of the whale
rangeDistance at which a female can detect an eligible male.
maturityAge of whale at which reproduction is possible.
stepSizeNumber of units the whale moves in each generation.
Methods
Method new()
initialize a `Whale`.
Usage
Whale$new(
position = NA,
age = 3,
lifespan = 40,
range = 5,
maturity = 10,
stepSize = 5
)Public fields
sexsex of the whale
timeToFertilityhow long until whale can breed
infertilityPeriodnumber of steps until a female can breed again after having borne a child
Examples
if (FALSE) { # \dontrun{
initialMales <- vector(mode = "list", length = 10)
ages <- c(rep(3, 5), c(rep(10, 5)))
for (i in 1:10) {
initialMales[[i]] <- Male$new(
position = runif(2, min = 0, max = 100),
age = ages[i],
lifespan = 40,
range = 12,
maturity = 10,
stepSize = 7
)
}
initialFemales <- vector(mode = "list", length = 10)
for (i in 1:10) {
initialFemales[[i]] <- Female$new(
position = runif(2, min = 0, max = 100),
age = ages[i],
lifespan = 40,
maturity = 10,
range = 12,
stepSize = 3
)
}
library(ggplot2)
oceanSim <- function(
steps = 100,
males = 10,
females = 10,
starve = 5,
animate = FALSE,
seed = NULL
) {
if ( !is.null(seed) ) {
set.seed(seed)
}
ocean <- Ocean$new(
dims = c(100, 100),
males = males,
females = females,
starve = starve
)
population <-numeric(steps)
for (i in 1:steps) {
population[i] <- ocean$malePop + ocean$femalePop
if (population[i] == 0) break
ocean$advance()
if (animate) {
ocean$plot()
Sys.sleep(0.5)
}
}
pop <- population[1:i]
df <- data.frame(
time = 1:length(pop),
pop
)
ggplot(df, aes(x = time, y = pop)) +
geom_line() +
labs(x = "Time", y = "Whale Population")
}
oceanSim(males = initialMales, females = initialFemales, seed = 5050)
} # }