我有一个由机器人玩的游戏程序。为了简单起见,这款游戏有两个按钮--“赢”和“再试”。要想赢,机器人必须简单地按下“胜利”按钮。
游戏涉及倒计时计时器,从10开始,运行到0,每秒钟滴答一次。在计时器的每一个滴答声中,机器人从两个按钮中挑选一个。当定时器在10,机器人点击胜利的机会是很小的。当定时器接近0时,机器人点击"win“按钮的几率就会增加。当然,机器人根本不可能点击win按钮。
我最后要找的是,机器人点击“胜利”的90%左右的时间,这些胜利点击被加权接近定时器是0。
我对概率(绝对新手)做了一些研究,我的理解是,为了得到我想要的结果,每个滴答的概率之和应该达到.90。示例:
countdownTimerTickNumber | probabilityOfClickingWin
====================================================
10 | 0
9 | 0.0001
8 | 0.005
7 | 0.01
6 | 0.02
5 | 0.04
4 | 0.08
3 | 0.1
2 | 0.15
1 | 0.2
0 | 0.294
----------------------------------
Total probabilityOfClickingWin over all ticks: .9下面是一些伪代码,说明我如何使用上表中的概率来确定机器人单击哪个按钮。它在每一个滴答中被调用:
function bool doClickWin(probabilityOfClickingWin)
{
if (probabilityOfClickingWin >= new Random().NextDouble())
return true;
return false;
}然而,如果我多次运行我的程序,我会发现机器人点击“胜利”的时间的实际百分比远低于90% (约60%)。
有人能告诉我我做错了什么吗?提前谢谢。
发布于 2013-10-18 07:42:39
概率计算比你想象的要复杂得多。获胜的可能性是
P(win on 0th tick) + P(win on 1st tick) + ... + P(win on 10th tick)我们称之为概率p(0) .p(11)。然后
P(win on 0th tick) = p(0)
P(win on 1st tick) = (1-p(0)) * p(1)
P(win on 2nd tick) = (1-p(0)) * (1-p(1)) * p(2)等等,在每一个滴答中,你在那个滴答中获胜的概率就是你在之前的任何一个滴答中没有赢的概率,乘以现在获胜的概率。
考虑到你在帖子中给出的数字,我认为你的机器人应该能在63.17%的时间内获胜(我不知道你为什么会看到大约30%的错误--这会是你程序中的其他地方的错误吗?)
使用以下数字,您应该观察到总体成功率约为90%。
0 0
1 0.0068
2 0.0113
3 0.0188
4 0.0314
5 0.0524
6 0.0875
7 0.1459
8 0.2433
9 0.4059
10 0.6771编辑
我是怎么算出这些数字的?反复试验。但是我们可以发明一种程序,给出任何获胜概率,为每一个滴答生成一组合适的概率。
假设总赢概率是Q,所以您想
P(Win on 0th tick) + ... + P(Win on 10th tick) = Q假设我们不希望在第一次得分时获胜,在那之后任何一次获胜的机会都会线性增加。因此,概率之和必须是Q,并且在滴答i中获胜的概率与i成正比。因此
P(Win on ith tick) = const * i因此
c * 0 + c * 1 + c * 2 + ... + c * 10 = Q
=> 55 * c = Q
=> c = Q/55这给了我们
P(Win on 0th tick) = 0
P(Win on 1st tick) = Q/55
P(Win on 2nd tick) = 2*Q/55等等,现在您使用这些来确定每个p(i)使用公式在顶部的帖子。我们有
p(0) = P(win on 0th tick) = 0
p(1) = P(win on 1st tick) / (1-p(0)) = Q/55
p(2) = P(win on 2nd tick) / (1-p(0)) / (1-p(1)) = 2*(Q/55) / (1-Q/55)下面是一个计算概率的Matlab例程;将其转化为C#或您正在使用的任何东西应该不难。
N = 10;
Q = 0.9;
p = zeros(N+1,1);
for i = 1:N
p(i+1) = i * Q/(0.5*N*(N+1)) / prod(1-p(1:i));
end给出了这个结果
0 0
1 0.0164
2 0.0333
3 0.0516
4 0.0726
5 0.0978
6 0.1301
7 0.1745
8 0.2416
9 0.3584
10 0.6207https://stackoverflow.com/questions/19443187
复制相似问题