考虑以下矩阵和变量 INITIAL_WEALTH = 1000
每列都是模拟,每一行都是模拟的一步:
bet_pct_wealth (每次下注时实际财富的百分比)
[,1] [,2] [,3] [,4] [,5]
[1,] 0.0467 0.0700 0.0467 0.0467 0.0700
[2,] 0.0350 0.0700 0.0350 0.0467 0.0350
[3,] 0.0280 0.0467 0.0467 0.0467 0.0467
[4,] 0.1400 0.0700 0.0700 0.0700 0.0467
[5,] 0.0350 0.0467 0.0350 0.0700 0.0350
[6,] 0.0700 0.0700 0.0350 0.0700 0.0700
bet_results (1表示我赢了下注0表示我输了)
[,1] [,2] [,3] [,4] [,5]
[1,] 0 0 0 1 1
[2,] 0 0 1 1 0
[3,] 1 1 1 1 0
[4,] 1 1 0 0 0
[5,] 0 0 1 0 0
[6,] 0 0 0 0 0
bet_payoff (如果我赢得了与总赌注相关的赔率,我将获得多少奖金)
[,1] [,2] [,3] [,4] [,5]
[1,] 3 2 3 3 2
[2,] 4 2 4 3 4
[3,] 5 3 3 3 3
[4,] 1 2 2 2 3
[5,] 4 3 4 2 4
[6,] 2 2 4 2 2
我想要做的是创建另一个矩阵,在每一步显示什么是我的实际财富。因此,模拟步骤如下:
1-)每次模拟的初始Wealth = 1000,因此我得到的矩阵的第一行是:
total_wealth
[,1] [,2] [,3] [,4] [,5]
[1,] 1000 1000 1000 1000 1000
2-)我的第一轮投注将是
total_wealth[1,]*bet_pct_wealth[1,]
如果我赢了赌注,我的total_wealth [2,]将是:
total_wealth[1,] + total_wealth[1,] * bet_pct_wealth[1,0] * bet_payoff[1,0]
如果我松了
total_wealth[1,] - total_wealth[1,] * bet_pct_wealth[1,0]
然后你重复模拟直到你得到(舍入2位小数):
[,1] [,2] [,3] [,4] [,5]
[1,] 1000 1000 1000 1000 1000
[2,] 953,3 930 953,3 1140,1 1140
[3,] 919,93 864,9 1086,76 1299,83 1100,1
[4,] 1048,72 986,07 1239,02 1481,94 1048,73
[5,] 1195,54 1124,12 1152,29 1378,2 999,75
[6,] 1153,7 1071,62 1313,61 1281,73 964,76
[7,] 1072,94 996,61 1267,63 1192,01 897,23
关于如何使用3个矩阵获得第四个矩阵的任何想法?我可以在没有矩阵的情况下编码这个模拟,你可以在这里看到:
但结果模拟非常缓慢。
答案 0 :(得分:4)
您提供了一些示例数据以及您希望看到的结果,这很棒。如果您提供人们可以简单地复制和粘贴以获取数据的代码,您可能会发现您得到了更好的响应。例如,
bet_pct_wealth <- structure(c(0.0467, 0.035, 0.028, 0.14, 0.035, 0.07, 0.07, 0.07,
0.0467, 0.07, 0.0467, 0.07, 0.0467, 0.035, 0.0467, 0.07, 0.035,
0.035, 0.0467, 0.0467, 0.0467, 0.07, 0.07, 0.07, 0.07, 0.035,
0.0467, 0.0467, 0.035, 0.07), .Dim = c(6L, 5L))
bet_results <- structure(c(0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L,
1L, 1L, 0L, 1L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L,
0L), .Dim = c(6L, 5L))
bet_payoff <- structure(c(3L, 4L, 5L, 1L, 4L, 2L, 2L, 2L, 3L, 2L, 3L, 2L, 3L,
4L, 3L, 2L, 4L, 4L, 3L, 3L, 3L, 2L, 2L, 2L, 2L, 4L, 3L, 3L, 4L,
2L), .Dim = c(6L, 5L))
initial_wealth <- rep(1000, 5)
如果将赢/输结果和支付结合到单个矩阵中,可以在同一个等式中使用来计算结果,则可以简化您的问题。然后,您可以使用cumprod()
函数计算矩阵行下的累积乘积。
# combine the win/loss and the pay off to get a combined result
bet_combined <- bet_results * bet_payoff
bet_combined[bet_combined==0] <- -1
multiplier <- 1 + bet_pct_wealth * bet_combined
apply(rbind(initial_wealth, multiplier), 2, cumprod)