非常感谢提供思路。用R写了一个公式(我不太会python不过R语言应该和python有点像;代码废写的公式很难看,见谅……),可以计算特定红黑牌数下的收益。
ExpBen = function(redn,blackn){
v = matrix(NA,redn+1,blackn+1)
rownames(v) = c(0:redn)
colnames(v) = c(0:blackn)
for (r in 0:redn){
if (r == 0) {
v[r+1,] = 0
} else {
for (b in 0:blackn){
if (b == 0) {
v[r+1,b+1] = r
} else {
p = (r/(r+b)*(1+v[r,b+1]) + b/(r+b)*(-1+v[r+1,b]))
if (p > 0){
v[r+1,b+1] = p
} else {
for (b2 in b:blackn){
v[r+1,b2+1] = 0
}
break
}
}
}
}
}
return(list("prob"=v[redn+1,blackn+1], "mat"=v))
}
可以看到最终收益和收益矩阵,例如红牌6张黑牌9张的情况最终收益为0(应该弃牌);矩阵中每行0之前为STOP的临界值,如当红牌4张时黑牌6张以上则应STOP。
ExpBen(6,9)
$prob
[1] 0
$mat
0 1 2 3 4 5 6 7 8 9
0 0 0.000000 0.0000000 0.000000 0.0000000 0.0000000 0.00000000 0.0000000 0.0000000 0
1 1 0.500000 0.0000000 0.000000 0.0000000 0.0000000 0.00000000 0.0000000 0.0000000 0
2 2 1.333333 0.6666667 0.200000 0.0000000 0.0000000 0.00000000 0.0000000 0.0000000 0
3 3 2.250000 1.5000000 0.850000 0.3428571 0.0000000 0.00000000 0.0000000 0.0000000 0
4 4 3.200000 2.4000000 1.657143 1.0000000 0.4444444 0.06666667 0.0000000 0.0000000 0
5 5 4.166667 3.3333333 2.535714 1.7936508 1.1190476 0.54978355 0.1540404 0.0000000 0
6 6 5.142857 4.2857143 3.452381 2.6571429 1.9090909 1.22943723 0.6561772 0.2321012 0
各26张的情况
ExpBen(26,26)$prob
2.624476