何时适可而止?
最近看到一个有趣的问题:
我们可以连续抛一枚均匀的硬币,并且随时可停下,在停下后可获得的回报为(正面出现次数/抛硬币的次数)。如果希望获得的回报越大越好,我们应该采取什么样的停止策略?
在第一次抛硬币时,如果出现正面时立即停止,此时获得一个最大的回报1,如果出现反面,则应该选择继续抛。假设前
次抛硬币出现了
次正面时最后能获取的期望回报值为
,利用动态规划的思想容易列出方程

但要解上面的方程可不是那么容易。事实上,它们的精确值还没有人知道。注意到由于一维随机游走的常返性,对任意的
和
都有
。利用这个边界条件可以求出一些近似解,我用下面的Matlab跑了一下:
N = 100000;
f = max(0, 0:1/N:1);
for n = N-1:-1:0
f(1:n+1) = max((0:n)/n, (f(1:(n+1))+f(2:(n+2)))/2);
end
f = f(1);
将边界设为第100000枚硬币,算出来从最开始抛时的期望回报大约为0.79289。由于我的破计算机速度以及Matlab的效率问题,我这里很难再提高它的精确性,但这里有人将边界提高到了67108864,计算出来的结果为0.79295350640770。
如果只想知道该在什么时候停止呢?精确的规则也没人知道,Larry A. Shepp在论文Explicit solutions to some problems of optimal stopping中证明了抛的硬币次数
足够多时,应该等到正面数为
时停止。
这个问题,和以前的最佳约会策略一样,都是说如何基于当前的已知信息做决策,是在现实生活中不断遇到的,比如在赌场赌博,到底赌到什么时候该收手,上面答案可做一点参考。
请教一下,为什么那个式子里面不是 (f(n + 1, k) + f(n + 1, k + 1) )/2
k-1是因为什么?
Sorry,笔误~
这个纯粹学习一下…………
一个月前我在校内和blog上提出过这个问题,是根据遇到的一个问题简化抽象出来的,看来不是首创哈
我那个时候用C写了一个跟本文完全相同的算法,只算了6000个点,结果大概是0.7924,不过我把决策都记下来了。其中会有些比较有趣的结论,比如扔3次其中2次正面的话还是不应该停下来,感觉挺反直觉的。
p = max(0, -1:1/N:1);
这句什么意思,为什么初始值是这么设定的呢
这是Matlab的写法,意思是
,这个为文章中提到的边界条件。
我是问为什么是这样的边界条件
多谢
Sorry我原来那里写得比较乱,还有一个笔误,
的边界是
,原来被写成了
。这个
的边界是因为一维随机游走的常返性。
Matlab程序也比较混乱,我将它修改了一下,你看先现在是不是清楚些
杜野This problem is very similar to the discrete version of pricing the American Put Option and the optimal stopping time concept there. The main difference is that the American option(not a perpetual one) has a natural boundary condition; however, this problem does not.
[...] 阅微堂 中也提到过这个问题。 Ps2: [...]