simulate_network: Simulate the failures, expansion, rehabilitation, and costs... In WaMaSim: Simulate Rehabilitation Strategies for Water Distribution Systems

Description

Simulates failures, expansion, rehabilitation, and costs of a water supply pipe network. The simulation is stochastic.

Usage

 ```1 2 3``` ```simulate_network(n.years, expansion, rehabilitation, prob.failure, income = 0, initial.budget = Inf, initial.inventory = NULL, free.expansion = TRUE) ```

Arguments

 `n.years` number of years to simulate `expansion` either a scalar describing the number of pipes added every year to expand the pipe network, or a vector of length `n.years`. Negative values are not allowed. `rehabilitation` a (combination of) rehabilitation strategy function(s). See details below. `prob.failure` a function describing the probability of a pipe failing in the next year given its age, number of previous failures, and the age at the last failure (if any). `income` either a scalar describing the annual income, or a vector of length `n.years`. `initial.budget` initial budget `initial.inventory` if it is an integer it specifies the number of initial pipes, or alternatively it can be a `data.frame` containing the initial inventory of pipes. `free.expansion` if `TRUE` costs for network expansion are not deducted from the budget.

Details

The rehabilitation is defined by combining different simple replacement strategies. See the example for how this can be done using the `mystrategy` function input. If the strategies vary over time, see `initiate.network` and `simulate_network.period`.

The failure behavior is defined by the function `prob.failure`. It calculates the probability of a pipe failing within the next year based on pipe age, pipe age at the last failure, and the number of failures. Note, the model makes the assumption that a pipe cannot fail more than once per year.

The costs are calculated as a function of the pipe diameter, assuming all pipes have a length of 100 meters.

Value

an updated state list

Author(s)

Andreas Scheidegger

For more fine-grained control see `initiate.network` and `simulate_network.period`. Different replacement strategies are implemented: `replace.n.highest.risk`, `replace.n.oldest`, `replace.n.random`, `replace.older.than`, `replace.more.failures.than`, `do.nothing`.
 ``` 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``` ```## ----------- ## define model parameters ## Define the annual probability of a failure prob.failure.exp <- function(age, age.last.failure, n.failure) { if(n.failure==0){ return(1/30) } else { return(1/10) } } ## define a complicated (and probably useless) rehabilitation strategy mystrategy <- . %>% replace.n.highest.risk(n=2, prob.failure=prob.failure.exp) %>% replace.more.failures.than(failures=5) %>% replace.older.than(age=70, max.cost=2e6) %>% replace.n.oldest(n=3) %>% replace.n.random(n=2) ## This means: every year (if we have enough budget!), replace first the 2 pipes ## with the highest risk, then all pipes with more than 5 failures, ## then all pipes older then 70 years (up to costs of 2e6), then the 3 ## oldest pipes remaining, and finally replace 2 randomly selected pipes. ## ----------- ## run the simulation result <- simulate_network( n.years = 100, # run it for 100 years expansion = 10, # build 10 pipes per year (if money is available) rehabilitation = mystrategy, # use the strategy defined above prob.failure = prob.failure.exp, # use the probability function defined above income = 1e6, # the annual income initial.budget = 1e7, initial.inventory = 50, # start the simulation with 50 new pipes free.expansion = FALSE ) ## look at some results ## str(result) ## str(result\$time.100) ```