为啥这些随机数会慢慢趋向负值?

Posted

技术标签:

【中文标题】为啥这些随机数会慢慢趋向负值?【英文标题】:Why are these Random Numbers slowly gravitating towards a negative value?为什么这些随机数会慢慢趋向负值? 【发布时间】:2013-02-28 05:19:24 【问题描述】:

该程序应该执行以下操作:

    初始化值网格,“ActualGridValues”,(X 行 X Y 列)等于 0。 创建另一个值网格,“RandomGridValues”,(X 行 X Y 列),将网格中的每个单元格定义为等于 -Z 到 Z 范围内的 N 个随机数的平均值。 将 RandomGridValues 中的数字添加到 ActualGridValues 中的相应单元格。 对于 ActualGridValues 中的每个单元格,它还会添加相邻单元格的值。 无限重复步骤 2-4。

结果是随机结构在网格内合并。高正值的分组会影响附近的单元格并导致它们偏高,而低负值的分组会做同样的事情但偏低。

所有单元格中所有值的和积应该为零。尽管存在高偏态和低偏态数的局部组,但在足够大的样本量下,所有单元格的总数应该为零。

问题在于,在 1000 次迭代之后,这些值始终为负数。你有结构和本地化的高点和低点,但总值总是偏向负数。 (这意味着随着时间的推移,整个网格变得只有负数)。

每次运行模拟时,值都会出现负偏斜。有什么想法吗?

编辑:我已将问题归结为以下功能。 RandomGridValue 中所有数字的平均值几乎总是为负。

//For every cell value, this function generates a string of random numbers between -RandMax/2 and +RandMax/2. It then takes the average of all of these numbers. It assigns that value to a cell in the RandomGridValue array. 

function AddChaos() 
     for (var l = 0; l < GridX; l++) 
         for (var m = 0; m < GridY; m++) 
             var RandomGrid = 0;
             for (var n = 0; n < RandNums; n++) 
                 RandomGrid = RandomGrid + Math.random() * RandMax * 2 - RandMax;
             
             RandomGridValue[l][m] = RandomGrid / RandNums;
         
     
   

【问题讨论】:

我发现这个问题很有趣,所以我粗略地搜索了一下,发现了这个:***.com/questions/3956478/understanding-randomness。似乎将随机数相乘可能会给结果带来偏差。我认为这值得研究。那篇文章是关于将两个随机数相乘,而在您的代码中看起来您只是在缩放它,所以我不确定它是否会产生完全相同的效果。这是另一个帖子:***.com/questions/11383242/…。 这种偏差正是这个程序想要捕捉的。但是,它应该使分布偏向 两个 端点,而不是一个特定的端点。 如果你想对 [-RandMax,RandMax] 中的 #RandNums 随机值求和,你需要这样做 RandomGrid += (Math.random()*RandMax - 2*RandMax); - 否则你要么得到所有正值,要么得到所有负值,具体取决于RandMax的标志 @user2161457 我以为您试图消除结果中的偏差。我提供了这些链接,以便您了解是什么导致偏斜,从而避免偏斜。 @AaronBlenkush 好吧,我正在努力避免单向偏向一个标志。应该发生的是双向倾斜,其中 50% 的值是“RandMax/2”,50% 的值是“-RandMax/2”,平均值为 0。正在发生的事情是我们看到的更多“-RandMax/2” 【参考方案1】:

由于 javascript 实现的浮点标准,用十进制值进行算术运算至少可以说是错误的......

一种解决方法是通过乘以 100 将小数转换为整数,然后进行数学运算然后除以 100。

这只有在您最多有 2 位小数时才有效。如果您需要比这更高的精度,我建议您使用 Javascript 以外的语言作为该部分。

【讨论】:

好答案。我不需要超过 2 位小数的精度。我会试试这个,看看它是否能解决它。

以上是关于为啥这些随机数会慢慢趋向负值?的主要内容,如果未能解决你的问题,请参考以下文章

随机森林变量重要性排序时的影响为负值怎么办

为啥这些随机标记出现在每个 recyclerview 和 viewpager 项目中?

C语言问题求解! 为啥会输出随机数

为啥程序流控制随机执行

为啥我的 TSQL SELECT 命令会吐出随机数据?

为啥django-q定时任务会随机延迟?