Here is my R code for 5 engine failures in parallel: all engines start with a failure probability of 0.5...each turn the probability of failure increases by 0.01 ... when it fails for the first time, its out forever. This continues until all 5 engines have failed:
engines <- paste0("engine_", 1:5)
prob_working <- 0.5
max_turns <- 100
df <- data.frame(matrix(ncol = 11, nrow = max_turns))
colnames(df) <- c("turn", paste0("engine_", 1:5), paste0("engine_", 1:5, "_prob"))
for (i in seq_along(.engines)) {
engine <- .engines[i]
turn <- 1
while(turn <= max_turns) {
result <- ifelse(runif(1) < prob_working, "working", "failure")
df[turn, "turn"] <- turn
df[turn, engine] <- result
df[turn, paste0(engine, "_prob")] <- prob_working
if (result == "failure") {
break
}
prob_working <- prob_working - 0.01
prob_working <- max(prob_working, 0)
turn <- turn + 1
}
if (df[turn, engine] == "failure") {
prob_working <- 0.5
}
}
df <- df[1:max(df$turn, na.rm = TRUE), ]
df
See below:
turn engine_1 engine_2 engine_3 engine_4 engine_5 engine_1_prob engine_2_prob engine_3_prob engine_4_prob engine_5_prob
1 1 failure failure working failure working 0.5 0.5 0.50 0.5 0.50
2 2 <NA> <NA> failure <NA> working NA NA 0.49 NA 0.49
3 3 <NA> <NA> <NA> <NA> working NA NA NA NA 0.48
4 4 <NA> <NA> <NA> <NA> failure NA NA NA NA 0.47
How can I change this code so that at the start of each turn, we look at how many engines have failed ... and the remaining engines from now on will have a failure probability of 0.01 * (n+1) , where n = number of failed engines?