当您要引入随机性时,这是一个常见问题,但同时您希望您的实验紧贴预期的概率分布,并且不能/不想依靠大数定律。< / p>
假设您编程的硬币的正面/反面概率为50-50。如果将其模拟100次,则很可能会得到接近预期的50-50(二进制分布以50-50为中心)的东西。
但是,如果您希望对任意数量的实验重复进行相似的确定性,那该怎么办。
我们的一个客户问了我们这个::
我们可能还需要对某些随机性添加一些限制(例如,如果刺激的空间位置是完全随机的,则程序可能会在某些位置呈现太多刺激,而在其他位置则没有太多刺激。应该对位置进行同等采样,因此更多的是改组而不是随机替换的数组。
所以他们希望可以控制随机性。
答案 0 :(得分:1)
除了实现细节(数组与其他方法)之外,我们客户问题的通缉结果是以下:::
在N个潜在位置中的每一个中,总是具有接近于刺激物1 / N的距离,但是以随机(难以预测)的方式做到这一点。
这在游戏中很普遍(分发对象,角色,属性等)时,我会想像很多其他应用程序。
我处理此问题的首选方法是根据实验的进展情况动态加权预期的概率。这有效地使我们远离了独立绘制的变量。
p [i]是固定的,由设计提供。 N [i]是累加-每次发生时,将N [i]加1。
w [i]由
给出w[i] = CalculateWeight(p[i], N[i], N, W_Max)
{
if (N == 0) return 1;
if (N[i] == 0) return W_Max;
intended = p[i] * N
current = N[i]
return intended / current;
}
P [i]由
给出P[i] = p[i] * w[i]
然后我们将p_c [i]计算为
p_c[i] = P[i] / sum(P[i])
然后我们用p_c [i]而不是p [i]进行随机实验(采样)的下一个迭代,以得出结果i。
主要缺点是您为了控制可预测性而进行控制。连续四尾后,很有可能会看到一个头。
注1 ::如果实验结果与预期结果相符,或者偏向发生的次数少于预期(多)的结果(偏离),则所描述的方法将在任何步骤提供接近原始值的分布。
注2 ::您可以引入“控制”参数c并添加一个额外的步骤。
p_c2[i] = c * p_c[i] + (1-c) * p[i]
对于c = 1,这默认为上述方法,对于c = 0,它默认为原始概率(独立绘制的变量)。