Algorithm 如何编程函数以某种概率返回值?

Algorithm 如何编程函数以某种概率返回值?,algorithm,language-agnostic,probability,Algorithm,Language Agnostic,Probability,这个问题是在我参加国际足联比赛时产生的 因此,他们编写了一个复杂的函数,其中包括射击技能、距离、射击功率等所有因素,以计算射击命中目标的概率。他们是如何根据这种可能性来编程实现目标的 换句话说,像函数X()一样,它返回189%和011%的概率。如何编程,使其在100次试验中返回1(大约)89次?在0和1之间生成一个随机数,如果该数字小于所需的概率(0.89),则返回true) 例如,在: [13]中的from random import random 在[14]中:VAL=[random()

这个问题是在我参加国际足联比赛时产生的

因此,他们编写了一个复杂的函数,其中包括射击技能、距离、射击功率等所有因素,以计算射击命中目标的概率。他们是如何根据这种可能性来编程实现目标的

换句话说,像函数X()一样,它返回189%和011%的概率。如何编程,使其在100次试验中返回1(大约)89次?

0
1
之间生成一个随机数,如果该数字小于所需的概率(
0.89
),则返回
true

例如,在:

[13]中的
from random import random
在[14]中:VAL=[random()<0.89,对于范围(10000)内的i)
In[15]:总和(VAL)
Out[15]:8956

在这种情况下,10000个布尔结果中有8956个是
true
。如果我们重复这个实验,这个数字将在8900左右变化。

我不是100%确定,但我有一个方法可以实现:


生成一个随机数(0到100之间)。如果数字是89或大于返回1,则返回0。

如果您有一个随机数生成器,则您可以执行以下操作:

bool return_true_89_out_of_100() {
   double random_n = rand(); // returns random between 0 and 89
   return (random_n < 0.89);
}
bool return\u true\u 89\u out\u of\u 100(){
double random_n=rand();//返回0到89之间的随机值
回报率(随机<0.89);
}

您可以通过对CPU时钟的低位进行采样或一些数学技巧来生成粗略的随机数。

您被标记为语言不可知论者,但答案取决于您可用的随机数函数。此外,准确度可能取决于你的生成器离真正的随机性有多近(通常它们没有那么近)


至于随机数函数,通常有两种——一种生成0到1之间的数,另一种生成m到n之间的数。每个都可以很容易地得出一个百分比。

这是而不是在国际足联或其他视频游戏中如何确定目标。它们没有一个函数,这个函数表示,有一定的概率,射击成功或失败

相反,他们模拟一个球被踢进球门

球会有一些速度(基于“射门能力”)和一些轨迹角度(基于球员瞄准的位置,以及一些基于角色“射门技能”的变化)。然后他们允许物理-和守门员的人工智能,如果有-接管,并计算为一个点,只有当球物理进入目标


当然仍然存在随机性,但是没有一个单一的变量决定一次射击是否成功。

谢谢。我在考虑随机数和模运算符。我只是觉得事情会这么简单。:)+1提到随机数必须均匀分布。