我最近提出了以下问题,
“你有一个有G绿色和B蓝色硬币的盒子。选择一个随机硬币,G给出+1的利润,蓝色给-1减去。如果你最佳地发挥预期的利润。”
我正在考虑使用蛮力算法,我考虑绿色和蓝色硬币组合的所有可能性,但我确信必须有更好的解决方案(B和G的范围从0到5000)。最佳播放意味着什么呢?这是否意味着如果我挑选所有蓝色硬币然后我会继续玩,直到所有绿色硬币也被挑选?如果是这样,那么这意味着我不应该考虑绿色和蓝色硬币的所有可能性?
答案 0 :(得分:3)
"显而易见"答案是每当绿色硬币多于蓝色硬币时播放。实际上,这是错误的。例如,如果有999个绿色硬币和1000个蓝色硬币,那么这是一个获得预期利润的策略:
Take 2 coins
If GG -- stop with a profit of 2
if BG or GB -- stop with a profit of 0
if BB -- take all the remaining coins for a profit of -1
由于第一种和最后一种可能性都以接近25%的概率发生,因此您的整体预期约为0.25 * 2 - 0.25 * 1 = 0.25
在一个极端的例子中,这只是一个简单的策略,表明问题并不像最初看起来那么简单。
一般来说,g
绿币和b
蓝币的预期由递归关系给出:
E(g, 0) = g
E(0, b) = 0
E(g, b) = max(0, g(E(g-1, b) + 1)/(b+g) + b(E(g, b-1) - 1)/(b+g))
最后一行的最大值出现是因为如果要播放它,那么你最好停止。
这些递归关系可以使用O(gb)时间内的动态编程来解决。
from fractions import Fraction as F
def gb(G, B):
E = [[F(0, 1)] * (B+1) for _ in xrange(G+1)]
for g in xrange(G+1):
E[g][0] = F(g, 1)
for b in xrange(1, B+1):
for g in xrange(1, G+1):
E[g][b] = max(0, (g * (E[g-1][b]+1) + b * (E[g][b-1]-1)) * F(1, (b+g)))
for row in E:
for v in row:
print '%5.2f' % v,
print
print
return E[G][B]
print gb(8, 10)
输出:
0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
1.00 0.50 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
2.00 1.33 0.67 0.20 0.00 0.00 0.00 0.00 0.00 0.00 0.00
3.00 2.25 1.50 0.85 0.34 0.00 0.00 0.00 0.00 0.00 0.00
4.00 3.20 2.40 1.66 1.00 0.44 0.07 0.00 0.00 0.00 0.00
5.00 4.17 3.33 2.54 1.79 1.12 0.55 0.15 0.00 0.00 0.00
6.00 5.14 4.29 3.45 2.66 1.91 1.23 0.66 0.23 0.00 0.00
7.00 6.12 5.25 4.39 3.56 2.76 2.01 1.34 0.75 0.30 0.00
8.00 7.11 6.22 5.35 4.49 3.66 2.86 2.11 1.43 0.84 0.36
7793/21879
从这里你可以看到8个绿色和10个蓝色硬币(EV = 7793 / 21879~ = 0.36)的预期是积极的,你甚至有2个绿色和3个蓝色硬币的正面预期(EV = 0.2) )
答案 1 :(得分:0)
这个答案错了;请参阅Paul Hankin关于反例和正确分析的答案。我在这里留下这个答案作为我们所有人的学习范例。
假设您的选择只是停止挑选硬币,只要G> B.那部分很简单。如果你从G< B,那么你永远不会开始绘画,你的收益是0.对于G = B,任何策略都不会给你带来数学上的好处;那里的收益也是0。
对于预期的奖励,请分两步进行:
(1)任何绘制序列的预期值。递归地执行此操作,计算在第一次绘制时获得绿色或蓝色的机会,然后是新状态(G-1,B)或(G,B-1)的预期值。您将很快看到任何给定绘图数字的预期值(例如第3次绘制的所有可能性)与原始绘图相同。
因此,任何平局的预期值为 e =(G-B)/(G + B)。您的整体预期值为 e * d ,其中d是您选择的抽奖数量。
(2)预期抽奖人数是多少?在G = B之前你期望抽出多少次?我会把这作为学生的练习,但请注意以前递归的做法。您可能会发现将游戏状态描述为(额外的,总计)更容易,其中额外= G-B 和总计= G + B 。
说明性练习:给定G = 4,B = 2,你在前两次抽奖(然后停止比赛)中抽出GG的几率是多少?从那里获得了什么收益?这与每次抽奖的(4-2)/(4 + 2)优势相比如何?
答案 2 :(得分:0)
简单直观的答案:
你应该从估计蓝色和绿色硬币的总数开始。每次选择后,您将更新此估算值。如果你估计在任何一点你都应该停止蓝色硬币而不是绿色硬币。
示例:
你开始挑选一枚硬币。它的绿色让你估计100%的硬币是绿色的。你选择一个蓝色,所以你估计50%的硬币是绿色的。你选择另一个蓝色硬币,所以你估计有33%的硬币是绿色的。根据你的估计,在这一点上不值得玩,所以你停下来。