simulate_network.period: Simulate the network for a period of time 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``` ```simulate_network.period(statelist, n.years, expansion, rehabilitation, prob.failure, income = 0, free.expansion = TRUE) ```

Arguments

 `statelist` a state list `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`. `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.

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

`simulate_network` provides a slightly more convenient interface.
 ``` 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 55 56``` ```## ----------- ## 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 in steps statelist <- initiate.network(inventory = 50, budget = 1e7) statelist <- simulate_network.period( statelist, # state list to update n.years = 20, # run it for 20 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 ) statelist <- simulate_network.period( statelist, # state list to update n.years = 10, # run it for 10 more years expansion = 2, # now, build only 2 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 ) ## look at some results ## str(statelist) ## str(statelist\$time.30) ```