simulate_network: Simulate the failures, expansion, rehabilitation, and costs...

Description Usage Arguments Details Value Author(s) See Also Examples

View source: R/main.r

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

See Also

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.

Examples

 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)

scheidan/WaMaSim documentation built on May 2, 2020, 11:01 a.m.