数学吧 关注:943,602贴子:9,473,760

论“伪随机”

只看楼主收藏回复

互联网上(尤其是游戏领域)经常出现针对“伪随机”的声讨,但是讨论着讨论着容易出现讨论双方乃至看客都互相不理解的场景,笔者对此非常感兴趣,于是对何为“伪随机”,有几种“伪随机”进行了研究:
1. 随机数算法局限产生的“伪随机”
问题来源:随机数生成算法是用来产生随机数的算法,理论上所有程序中有随机成分的场景的底层均是通过随机数生成来实现的,具体的随机数生成原理过于复杂,但许多随机数生成算法是通过一个随机数“种子”来生成随机数的,如果“种子”一样,则随机数生成算法生成的随机数会每次都相同(第一次学习C语言的朋友可能经历过,C语言的rand()函数如果不通过srand去更改随机数种子则每次调用产生的随机数都是一样的),一般采用当前的时间(或再经过一些运算)进行随机数的生成,而许多随机数生成算法支持生成多个不同的随机数,通过算法特性保证多个随机数之间满足真正随机数的统计特征(如均匀性、独立性等),一般的程序中采用的随机数都是通过这类算法进行生成的。但是这类算法存在一定的缺陷,如算法本质是循环周期极长的序列,生成较长序列时可能会存在一定的规律性,可能导致随机数的生成可以被预测(尽管这在一般的程序场景下几乎不可能)。
实际问题:一般而言,使用这种“伪随机”来代替完全随机的“真随机”没有任何问题,游戏玩家或程序的使用者无需对这种“伪随机”产生担心,即便或许你的抽卡随机数序列是由你的uid决定的(这意味着你抽卡的结果在一开始就已经确定好的(参考《炉石传说》回档事件中证明账号抽取卡包的稀有度在回档前后并未改变)),但是对于每个玩家而言仍是公平且未知的,不存在游戏性上的问题。
解决方法:一些特定场景下可能会使用某些专业硬件通过捕捉物理噪声点来实现无法预测的“真随机”,但成本高昂效率低下且在大多数应用场景下并无必要。
2. 暴击补偿或抽卡保底导致的“伪随机”
问题来源:对于一般玩家而言,概率这种东西理解起来比较困难,如一个角色的暴击率是20%,那么许多玩家认为连续攻击5次应该必出一次暴击,但事实上连续攻击5次不暴击的概率仍有0.8^5=32.768%之多,很不符合许多玩家的直觉,连续10次不暴击的概率都仍有近11%,如果游戏的玩家足够多,攻击次数足够多的情况下,连续50次、连续100次不暴击都是可能会发生的,但真的遇到这种情况的玩家多半不会觉得是自己运气差,而是认为游戏暴击机制出现了问题。为了提高游戏玩家的体验,许多游戏都有“暴击补偿”机制,其原理是通过修改概率算法,在攻击未造成暴击时提高下次暴击的概率,且可以叠加,这样一来可以让暴击的出现更符合玩家的直觉。而抽卡保底也是差不多的原理,有保底的抽卡的概率并非每次都相同,而是一条在抽数上升时概率会变高的曲线,《原神》在72抽左右最容易出货是有原因的,72抽附近抽到五星的概率确实比之前高不少,而能错过多次高概率抽卡达到90抽才出货的概率比第一抽就出还低。
实际问题:根据算法不同,为了保证总体概率符合预期,前几次随机的概率可能会低于标定值,但平均下来往往对玩家是有利的(实际概率略大于标定概率),暴击补偿和保底机制降低了随机的标准差,实际上降低了玩家之间的欧非差距,如果不设保底机制,那在玩家基数大的场景下1000抽都不出五星都是正常的(当然也与国家相关法律法规有相关性)。
解决方法:去除该机制即可,本身就是额外添加的机制,但是去除后只会导致运气差的玩家下限更低。
3. 固定随机数种子产生的“伪随机”
问题来源:如前文所述,随机数生成算法需要一个“种子”,而许多单机游戏(如《杀戮尖塔》)会在全局使用同一个随机数“种子”,并将其标明出来,重开游戏时可以手动输入种子来进行一把随机数完全相同的,相同操作下游戏内的随机事件等完全相同的游戏进行复盘。
实际问题:这种“伪随机”是一种很好的单机游戏机制,可以让玩家多次复盘寻找出路,也可以分享自己的对局给其他人进行体验。但也有案例,《炉石传说》之前出现过因为某些原因导致两局对局的随机数完全一致,牌堆顺序、发现的卡牌种类两局都完全一样的事件,这就是不应该产生的问题了。
解决方法:单机游戏无需解决,这是游戏的一种功能;如非故意实现则可能属于程序问题(bug),需要修复。
4. 程序出错/官方作弊产生的恶意“伪随机”
问题来源:有时因为程序错误产生了完全一样的结果的随机数,或是有明显规律的随机数,或者实际概率与标定概率不同,甚至官方在程序中恶意判断某些场景人为增加或降低概率(如某些游戏中的“红利”、“仓检”或者“智能匹配”)。这些都属于不应出现的恶意“伪随机”。
实际问题:恶性时间在游戏史上还是有不少案例的,有时是程序出错,有时是故意降低概率被氪金大佬用大数据验证发现,有时是大量对局验证概率存在明显问题。但是许多时候只是玩家的阴谋论或者幸存者偏差,很多时候玩家会记得自己运气差的时候,并加深印象,却忽略了运气好的时候,反复强化运气差的记忆,并产生出游戏概率有问题,一定是“伪随机”的想法,又因为对伪随机概念不清,与游戏中实际存在的第1、2种“伪随机”进行混淆,认为官方恶意降低概率、有作弊行为、或是“针对自己”。多数情况下只是幸存者偏差导致的错觉,大数据验证下并无问题,许多人只是不相信低概率事件会轮到自己身上。但确实也不排除存在恶意修改概率的可能性,但需要实证,也不要与前三种“伪随机”混淆大肆批判游戏存在“伪随机”,前三种“伪随机”对玩家而言并无害处,是正常游戏的机制。
解决方法:如果大量发现游戏可能存在恶意修改概率的情况,需要进行大数据验证,如果事实存在问题,可以通过官方渠道进行举报,阴谋论并无意义,也不要与正常的前三种“伪随机”进行混淆。
结论:一般而言,对于玩家有影响的是第二种和第四种伪随机,而针对第二种的暴击补偿和抽卡保底,应该认识到这是对玩家有利的平衡性保证,而第四种恶意修改概率的行为是需要抵制的,但大多数场景下并不是真的有概率恶意调整,只是玩家遭遇了小概率事件,不能接受导致的。分清认识每一种“伪随机”,理清讨论的实际内容,不至于讨论时驴唇不对马嘴。


IP属地:北京1楼2024-08-21 15:18回复
    没啥问题,游戏使用足够了,可以用一定的触发机制更改随机数种子,比如同时间绑定,现在争议最大的是线性同余法具有周期性


    IP属地:湖南来自Android客户端2楼2024-08-21 15:25
    回复
      2026-06-09 04:33:44
      广告
      不感兴趣
      开通SVIP免广告
      似ai


      IP属地:辽宁来自Android客户端6楼2024-08-21 22:26
      收起回复
        其实就两种情况:
        1,算法生成的伪随机。
        2,人为设置的伪随机(其实就是保证一定程度的均匀分布)


        IP属地:四川来自Android客户端8楼2024-08-22 01:21
        回复
          可以使用高质量随机数,如梅森旋转法


          IP属地:广东来自Android客户端9楼2024-08-22 08:24
          回复
            就是算法机制加人工干预,算法太过随机就得让它不随机,反过来算法不随机就得引入随机量让他随机


            IP属地:山东来自Android客户端10楼2024-08-22 08:32
            回复
              某天上五年级的儿子问我,为什么播放器中的音乐播放不会连续放同一首,理论上来说随机播放的话就是会出现连续播放同一首的情况。我和他说这叫伪随机


              IP属地:浙江来自Android客户端11楼2024-08-22 09:18
              收起回复
                某三字页游打boss,最开始通关概率为零,每通关失败一次增加10%的概率。结果最后有人发现概率叠到100%了也还是会失败,概率到100%才能稳过


                IP属地:北京来自iPhone客户端12楼2024-08-22 11:06
                回复
                  2026-06-09 04:27:44
                  广告
                  不感兴趣
                  开通SVIP免广告
                  3


                  IP属地:江苏来自iPhone客户端13楼2024-08-22 11:14
                  回复
                    就是把随机数的生成和随机分布搞混了。大部分人讨论的是随机分布。


                    IP属地:山东来自iPhone客户端14楼2024-08-22 12:53
                    回复
                      只有1叫伪随机,在客观条件限制下用随机数尽可能实现一个类似随机的效果。2那种叫非随机,那玩意和随机都出了五服了。


                      IP属地:山东来自iPhone客户端15楼2024-08-22 14:48
                      收起回复
                        说得好,每次说暴击保底之类的机制,我说真随机和伪随机不一样,总有人要跳出来说计算机无法达到真随机


                        IP属地:上海来自Android客户端16楼2024-08-22 16:28
                        回复
                          不思议迷宫的101序列测序,不就是利用伪随机预测何时获取什么,这游戏还能sl,先测试获取序列,然后用受伤之类的推序列,然后sl出需要的东西


                          IP属地:山东来自Android客户端17楼2024-08-22 18:51
                          回复
                            第一次听到伪随机这个词是说war3的随机机制,纸面上15%的几率到了实际判定时第一下可能只有10%,然后每次不中概率都会递增,直到中了又回归10%的概率。以这种方式保证概率技能的收益更多地分布在居中的区间。后面这个词被滥用成“计算机没有真正的随机”的意思,基本就是不懂装懂的人太多了


                            IP属地:上海来自iPhone客户端18楼2024-08-23 13:15
                            回复