1

我正在为我的一门课解决一个问题。问题是这样的:一个人从 0 美元开始,掷一个 N 面骰子(N 的范围可以从 1 到 30),然后根据他们掷出的骰子面来赢钱。N面骰子的X面(一个)导致该人输掉所有钱(当前余额)并结束游戏;例如,如果骰子是 [0,0,0,1,1,1,1],一个人如果掷出 1 将获得 1 美元,如果掷出 2 将获得 2 美元,或者如果掷出 3 将获得 3 美元,但他们会输如果他们掷出 4、5、6 或 7,则一切皆有可能。

这个 N 面骰子问题的期望值是多少?我尝试了值迭代,但似乎无法正确处理。

所以对于这个骰子 [1,1,1,0,0,0,0],我们的第一个状态(1 掷)期望值为 1/7*(4)+1/7*(5)+1/7* (6)+1/7*(7) = 3.1428

对于价值迭代,接下来我们要计算状态4(余额=$4)、状态5(余额=$5)、状态6(余额=$6)、状态7(余额=$7)的值

V(s) = Max_actions [Sum_probabilities[R(s)+V(s']]

V(4) = Max($4 {退出游戏}, 1/7*(4+4)+1/7*(4+5)+1/7*(4+6)+1/7*(4 +7) {继续播放}) -> 5.428

V(5) = Max($5 {退出游戏}, 1/7*(5+4)+1/7*(5+5)+1/7*(5+6)+1/7*(5 +7){继续播放}) -> 6

V(6) = Max($6 {退出游戏}, 1/7*(6+4)+1/7*(6+5)+1/7*(6+6)+1/7*(6 +7){继续播放}) -> 6.57

V(7) = Max($7 {退出游戏}, 1/7*(7+4)+1/7*(7+5)+1/7*(7+6)+1/7*(7 +7){继续播放}) -> 7.14

现在这些 V(4)、V(5)、V(6) 和 V(7) 将分支到它们的下一个状态。因此 V(4) 将变为 V(8)、V(9)、V(10)、V(11),依此类推。

V(8) ($8 当前< $7.74 预期), V(9) ($9 当前<$8.28 预期), V(10)($10 当前<$8.85 预期), V(11)($11 当前<$9.42 预期), V( 12)(当前 12 美元<预期 10 美元),V(13)(当前 11 美元<预期 10.57 美元),V(14)(当前 14 美元 <预期 11.14 美元)。

因此,这表明 V(8)、V(9)、V(10)、V(11)、V(12)、V(13)、V(14) 是终端状态 --> V(4), V(5)、V(6)、V(7)不需要改变。

最后,我们重新计算 V(0) 的值,因为 V(4)、V(5)、V(6) 和 V(7) 的值发生了变化 --> V(0) = 1/7 * V(4)+1/7* V(5)+1/7* V(6)+1/7* V(7) => 3.59 ... 这是本场比赛的最终预期奖励。

这有意义吗?我不是在寻找解决问题的代码,只是关于这种方法是否正确的一些建议。

谢谢

根据以下评论进行编辑,以使帖子更简洁。

4

1 回答 1

0

是的,您的方法很复杂,但基本上是正确的。预期的奖金是3 + 29/49 = 3.591836734693877551...

通常,如果预期收益超过预期损失,则继续滚动。

如果你y有钱,预期的损失是y * X / N

预期奖金为avg(value of dice roll).

我建议使用动态编程方法来提高效率。

于 2021-09-10T19:08:51.493 回答