大数跨境

用人脑生成等概率随机数,困扰人类30万年的问题解决了 | 附“源代码”

用人脑生成等概率随机数,困扰人类30万年的问题解决了 | 附“源代码” 量子位
2019-07-19
5
导读:如何去掉人类对某些数字的偏好

人类真的能随机选数吗?揭秘“人脑随机数生成器”

从7的偏好到真正的随机:如何修正人类的选择偏差

让一个人从1到10中随机选择一个数字,每个数被选中的概率会是均等的10%吗?实际上,人类的选择远非随机。一项针对8500名学生的调查显示,接近30%的人倾向于选择“7”,而位于两端的“1”和“10”则被冷落,其中“10”的选择率仅1.9%[k]

这种偏好源于心理因素:人们会认为1和10过于极端,而7常被视为“幸运数字”。正是这些潜意识影响了所谓的“随机”选择[k]

相比之下,计算机生成的伪随机数(如Numpy的np.random)能更接近真正的均匀分布,凸显出“人类随机函数”human.random的局限性[k]

如何将人类选择变为真正随机?

要修正人类的非均匀分布,核心思路是重新分配高概率数字的部分选择到低概率数字上。这可通过线性规划建模实现:定义变量xi,j表示将数字i调整为j的比例,在保证概率守恒的前提下,最大化保持不变的比例xi,i之和[k]

最终目标是使每个数字的出现概率趋近10%。通过计算得出调整方案,例如:28.1%的“7”应被重新映射为“10”,20.7%的“7”转为“1”[k]

人脑随机数生成器:原理与实现

基于上述理论,可构建一个“人脑随机数生成器”算法。其核心逻辑是:当某人给出一个高频数字(如5、7、8)时,再询问第二个人的数字,根据组合结果进行映射转换,从而逼近均匀分布[k]

向一个人问得1~10之间的随机整数n1;

if n1=5
    then 再向另一个人问得一个随机整数n2;
       if n2=5 (概率12.2%)
           then 返回随机数 2;
       if n2=10 (概率1.9%)
           then 返回随机数 4;
       else 返回随机数 5;

if n1=7
    then 再向另一个人问得一个随机整数n2;
       if n2=2或5(概率20.7%)
           then 返回随机数 1;
       if n2=8或9 (概率16.2%)
           then 返回随机数 9;
       if n2=7(概率28.1%)
           then 返回随机数 10
       else 返回随机数 7;

if n1=8
   then 再向另一个人问得一个随机整数n2;
       if n2=2 (概率8.5%)
           then 返回随机数 1;
       else 返回随机数 8;

else 返回随机数 n1;

该方法通过条件映射有效修正人类选择偏差,理论上可生成接近均匀分布的随机数,前提是拥有足够大的样本群体(如原研究中的8500人)[k]

以上算法思路及代码源自博客:
https://torvaney.github.io/projects/human-rng

【声明】内容源于网络
0
0
量子位
各类跨境出海行业相关资讯
内容 14977
粉丝 0
量子位 各类跨境出海行业相关资讯
总阅读172.4k
粉丝0
内容15.0k