利润/亏损博弈中最优预期金额的算法

时间:2017-09-15 17:36:59

标签: algorithm probability

我最近提出了以下问题,

“你有一个有G绿色和B蓝色硬币的盒子。选择一个随机硬币,G给出+1的利润,蓝色给-1减去。如果你最佳地发挥预期的利润。”

我正在考虑使用蛮力算法,我考虑绿色和蓝色硬币组合的所有可能性,但我确信必须有更好的解决方案(B和G的范围从0到5000)。最佳播放意味着什么呢?这是否意味着如果我挑选所有蓝色硬币然后我会继续玩,直到所有绿色硬币也被挑选?如果是这样,那么这意味着我不应该考虑绿色和蓝色硬币的所有可能性?

3 个答案:

答案 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%的硬币是绿色的。根据你的估计,在这一点上不值得玩,所以你停下来。