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
position
A numeric vector of length 2 giving the initial position. (Make sure that it's within the dimensions of the ocean.)
age
initial age of the whale
lifespan
lifespan of the whale
range
Distance at which a female can detect an eligible male.
maturity
Age of whale at which reproduction is possible.
stepSize
Number 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
sex
sex of the whale
timeToFertility
how long until whale can breed
infertilityPeriod
number 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)
} # }