Simulation Patterns
Scenario Payoff
Reusing Outcomes
A payoff simulation maps scenario labels to numeric gains or losses. Changing the stake scales every simulated payoff.
Program
Play the script to change the stake and watch the average payoff scale.
scenario_payoff.R
Replay: real traced execution (multi-file project)
scenarios <- c("win", "lose", "win", "win", "lose", "lose")
stake <- 10
payoff <- ifelse(scenarios == "win", stake * 2, -stake)
average <- mean(payoff)
label <- paste("avg", average)
cat(label, "\n", sep = "")
scenarios <- c("win", "lose", "win", "win", "lose", "lose")
stake <- 5
payoff <- ifelse(scenarios == "win", stake * 2, -stake)
average <- mean(payoff)
label <- paste("avg", average)
cat(label, "\n", sep = "")
scenarios <- c("win", "lose", "win", "win", "lose", "lose")
stake <- 20
payoff <- ifelse(scenarios == "win", stake * 2, -stake)
average <- mean(payoff)
label <- paste("avg", average)
cat(label, "\n", sep = "")
scenarios ← win, lose, win, win, lose, lose
1scenarios <- c("win", "lose", "win", "win", "lose", "lose")2stake <- 10values this stepwin, lose, win, win, lose, losescenariosstake ← 10
1scenarios <- c("win", "lose", "win", "win", "lose", "lose")2stake <- 103payoff <- ifelse(scenarios == "win", stake * 2, -stake)values this step10stakepayoff ← 20, -10, 20, 20, -10, -10
2stake <- 103payoff <- ifelse(scenarios == "win", stake * 2, -stake)4average <- mean(payoff)values this step20, -10, 20, 20, -10, -10payoff3 wins, 3 lossesscenarios10stakeaverage ← 5
3payoff <- ifelse(scenarios == "win", stake * 2, -stake)4average <- mean(payoff)5label <- paste("avg", average)values this step5average20, -10, 20, 20, -10, -10payofflabel ← avg 5
4average <- mean(payoff)5label <- paste("avg", average)6cat(label, "\n", sep = "")values this stepavg 5label5averagecat(label, " ", sep = "")
5label <- paste("avg", average)6cat(label, "\n", sep = "")outputavg 5values this stepavg 5label
scenarios ← win, lose, win, win, lose, lose
1scenarios <- c("win", "lose", "win", "win", "lose", "lose")2stake <- 5values this stepwin, lose, win, win, lose, losescenariosstake ← 5
1scenarios <- c("win", "lose", "win", "win", "lose", "lose")2stake <- 53payoff <- ifelse(scenarios == "win", stake * 2, -stake)values this step5stakepayoff ← 10, -5, 10, 10, -5, -5
2stake <- 53payoff <- ifelse(scenarios == "win", stake * 2, -stake)4average <- mean(payoff)values this step10, -5, 10, 10, -5, -5payoff3 wins, 3 lossesscenarios5stakeaverage ← 2.5
3payoff <- ifelse(scenarios == "win", stake * 2, -stake)4average <- mean(payoff)5label <- paste("avg", average)values this step2.5average10, -5, 10, 10, -5, -5payofflabel ← avg 2.5
4average <- mean(payoff)5label <- paste("avg", average)6cat(label, "\n", sep = "")values this stepavg 2.5label2.5averagecat(label, " ", sep = "")
5label <- paste("avg", average)6cat(label, "\n", sep = "")outputavg 2.5values this stepavg 2.5label
scenarios ← win, lose, win, win, lose, lose
1scenarios <- c("win", "lose", "win", "win", "lose", "lose")2stake <- 20values this stepwin, lose, win, win, lose, losescenariosstake ← 20
1scenarios <- c("win", "lose", "win", "win", "lose", "lose")2stake <- 203payoff <- ifelse(scenarios == "win", stake * 2, -stake)values this step20stakepayoff ← 40, -20, 40, 40, -20, -20
2stake <- 203payoff <- ifelse(scenarios == "win", stake * 2, -stake)4average <- mean(payoff)values this step40, -20, 40, 40, -20, -20payoff3 wins, 3 lossesscenarios20stakeaverage ← 10
3payoff <- ifelse(scenarios == "win", stake * 2, -stake)4average <- mean(payoff)5label <- paste("avg", average)values this step10average40, -20, 40, 40, -20, -20payofflabel ← avg 10
4average <- mean(payoff)5label <- paste("avg", average)6cat(label, "\n", sep = "")values this stepavg 10label10averagecat(label, " ", sep = "")
5label <- paste("avg", average)6cat(label, "\n", sep = "")outputavg 10values this stepavg 10label
ifelse
`ifelse(condition, yes, no)` maps each scenario to a payoff.
scenario vector
A scenario vector can be reused while changing assumptions such as `stake`.
mean
`mean(payoff)` summarizes the simulated payoff distribution.