雀魂吧 关注:185,765贴子:3,895,009

关于“伪随机”的科普

只看楼主收藏回复

今早又看到了有吧友关于伪随机的帖子,决定来科普一下“伪随机”。内容主要根据我之前学的《计算物理》,如有说得不对的地方还请指出


IP属地:上海1楼2023-08-16 10:42回复
    随机数在很多游戏里经常被用到,例如在雀魂里可以根据随机数来生成牌山、在抽卡游戏里随机数来决定你抽卡的结果等等。最基本、最普适的随机数生成器是随机生成0~1之间均匀分布的随机数,有了这个基本工具,人们可以通过各种方法来实现你具体想实现的事情。最简单的一个例子就是比如你要模拟一个骰子的结果,那你就把这个0~1的随机数乘6然后取整。


    IP属地:上海2楼2023-08-16 10:43
    回复
      真正的随机数生成器,人们当然是无法预测下一次产生的随机数具体是多少的。但任何计算机程序(当然包括生成随机数的程序)没有什么东西是随机的,它只是严格执行人们预先设计好的流程。对于给定的输入,计算机程序每次必定能得出固定的输出(如果不固定的话说明你的电脑坏了)。也就是说对于任何计算机生成的随机数,理论上可以预测它每次产生的随机数的具体值,所以这叫做“伪随机数”。任何由计算机产生的随机数,都是“伪随机数”。


      IP属地:上海3楼2023-08-16 10:44
      回复
        计算机实现的随机数生成器,基本都是给定一个数(这个数叫做“种子”),然后对它进行一系列操作后,就能给出一个或者一系列随机数。因此随机数生成器包含了两个主要部分,一个是“种子”,另一个是生成算法(也就是那一系列“操作”)。对于种子,可以是你喜欢的任何数字,比如当前的时间、某一地区的温度、或者你自己随便在键盘上乱码的一个数。对于后续的生成算法,则是随机数生成器的核心,这个算法保证了产生的随机数的质量。


        IP属地:上海4楼2023-08-16 10:45
        回复
          上面说到随机数生成器的“质量”,是有一系列标准来评判一个随机数生成器的质量的,比如重复性、关联性、速度等等。只要质量够好,伪随机数生成器完全可以拿来正常使用,因为它在统计意义上跟真随机数没什么差别。


          IP属地:上海5楼2023-08-16 10:46
          回复
            虽然计算机生成的随机数都是“伪随机”数,但是作为不知道种子、不知道生成算法的用户来说,随机数的结果是不可预测的,因此质量够好的伪随机数完全可以正常使用。你要是有能力黑进猫粮的服务器,拿到雀魂的源代码,那你就可以预测每次开局的牌山,也可以预测你每次抽卡的结果。


            IP属地:上海6楼2023-08-16 10:46
            收起回复
              如果每次发牌的时候在牌池创建随机那么预测的抽卡结果跟抽卡模拟器没什么区别.


              IP属地:山东7楼2023-08-16 10:49
              收起回复
                这个我了解过,对普通玩家来说就是全随机,只不过这个随机是拿算法算基于一个基准数算出来的而已 主要还是玩家赢的时候从来不说运气好,一输能记一辈子


                IP属地:内蒙古来自Android客户端8楼2023-08-16 10:52
                回复
                  懂得不需要看科普,不懂得看了还是天天恶调挂嘴边


                  IP属地:美国来自iPhone客户端9楼2023-08-16 10:54
                  回复
                    所以说白了,对于麻将这种体量的游戏,牌山的顺序太大了,所谓的“伪随机”也就相当于“真随机”。所谓的“伪随机”不过是程序上的说法,可笑的是,很多人认为所谓的“伪随机”是猫粮用来控制麻将胜负的工具


                    IP属地:四川来自iPhone客户端10楼2023-08-16 10:55
                    收起回复
                      你理那人干嘛你看看他发的帖子都是啥成分的


                      IP属地:山东来自Android客户端12楼2023-08-16 10:59
                      回复
                        呃为什么我们专业选修的计算物理基本都是在学怎么matlab


                        IP属地:天津来自Android客户端13楼2023-08-16 11:07
                        收起回复
                          一般数学概念里的真随机是在计算机上目前无法实现,但只要种子数够多就可以趋近于真随机
                          而游戏里的伪随机通常指比如dota游戏里的暴击里,拥有暴击的英雄你砍一刀爆率是15%,不爆的话下一刀就是30%,以此类推
                          只要猫粮牌山生成代码没有重大漏洞,或者他没有专门设计了一套算法按照你的连胜/连败码你的手牌,那么手牌/牌山的生成就趋近于真随机,讨论这个也没有意义
                          抽卡这个我不怎么了解,如果有大量样本证实越接近150抽出货率越高,说明猫粮设有一定的保底机制,不过猫粮基础爆率设置的就比较高了,我认为是没有保底存在的


                          IP属地:上海来自iPhone客户端14楼2023-08-16 11:12
                          收起回复
                            最常见的随机数种子就是直接用当前Unix时间戳。假设雀魂的种子就是这样或者基于当前时间去获得种子,那么虽然通过种子计算随机数是伪随机,但种子本身已经是真随机了,因为玩家没法控制牌局什么时候开始


                            IP属地:福建来自Android客户端15楼2023-08-16 11:14
                            收起回复
                              理论上即便要改也很简单,直接给你起手向听数调高一点,起手宝牌数调高点,就大不一样,发牌姬搞你这种事可以说说,但即便可以动牌山给你试试发牌,还需一做套专门针对你的算法,嫌程序员头发多是吧


                              IP属地:湖南来自Android客户端16楼2023-08-16 11:18
                              收起回复