# 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) ```