我有一个机器人玩的游戏程序。为简单起见,游戏有 2 个按钮——“赢”和“再试一次”。要获胜,机器人必须简单地按下“获胜”按钮。
游戏包含一个倒数计时器,它从 10 开始并运行到 0,每秒滴答一次。在计时器的每个滴答声中,机器人都会选择两个按钮中的一个。当计时器为 10 时,机器人点击获胜的机会非常小。随着计时器接近 0,机器人点击“获胜”按钮的机会增加。当然,机器人可能根本不会点击获胜按钮。
我最终要寻找的是机器人在大约 90% 的时间内点击“获胜”,而这些获胜点击的权重更接近计时器为 0。
我对概率进行了一些研究(绝对新手),我的理解是,每次滴答时的概率总和应该达到 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%)。
谁能告诉我我做错了什么?提前致谢。