前言:永远不要和一个傻逼辩论,因为他会想办法把你的水平拉到和他一样,然后用他丰富的经验打败你。
其实这句话把“傻逼”换成任何人都是对的。有的人其实完全不明白讨论的内容是什么,他们只是觉得自己对问题的理解是对的,然后就义无反顾的冲上去“科普”一番。实际上,他们也没说错,但是说的和主题完全没关系。
比如说,我们说煮鸡蛋比炒鸡蛋省油,他非要插一句“煎鸡蛋不放油怎么煎”。其实他也没说错,问题是这毫无意义。
类比到伪随机这个问题上来说,本来我们要明白的问题是“概率叠加算法”和“简单随机算法”在等期望前提下结果序列的区别,大神们却强行要科普“计算机能做出来的都是伪随机”,甚至有一个大神提出“抓阄算法”,麻烦您自己联系冰蛙改机制去好吧?
首先,我们先要明确此次改动中所谓的“伪随机”是何物。
信息技术系或计算机系的学生会告诉你,计算机里没有伪随机,所谓的随机是利用一个种子套上一个公式生成的,所以我们可以根据第一个值推测下一个值。这tm还用你科普?如果所有人都不知道生成随机数的公式和种子的获取方式,这tm和真随机有什么区别?
言归正传,我们明确了“如何使用计算机生成随机数”不是我们的讨论重点,我们如何利用生成的随机数来完成对一个概率的描述才是我们要讨论的重点。
我们用计算机的“伪随机”创造了一个1-100之间的整数,其中每个整数出现的概率是均等的。现在,我们想着大炮的暴击率是25%,我们该如何利用这个1-100?
最简单的想法自然是,随机到1-25的时候判定为暴击,随机到26-100的时候判定不暴击。这就是所谓的“真随机”。如果一定要纠结于“计算机创造不出真随机”的话,请转到上一段。
问题是,这种算法会导致一种情况,那就是很可能连续暴击。这种情况下,平地三连爆的概率是1.56%,没到概率学上小概率事件的判定标准,对面脸好自己甩键盘是很正常的。
为了防止这一情况发生,我们采取概率叠加算法。原理如下:假如上一刀暴击了,那么下一刀判定1-8(实际应为8.475%,举例为整数)暴击;假如上一刀没暴击,那么下一刀的判定范围比上一刀大8。例如,自你上次暴击开始,连续3刀没暴击,那你下一刀判定1-32暴击。尽管8.475%看上去比25%少了太多,但经过期望计算后,平均暴击率与真实值出入很小。但是,这种情况大大缓解了连续暴击的威慑,使得三连爆的几率降低为0.18%,扔键盘的概率更小了。这就是所谓的“概率叠加算法”,dota2里的“伪随机”。
至于为什么称这种算法为伪随机,因为尽管两种算法都要用到基于计算机的一个随机数,概率叠加算法又将前面一次实验的结果作为参数。同时,基于计算机的伪随机数很难找到规律,但基于前一次实验结果的伪随机数规律性非常明显,这就是两种算法的区别,以及为什么我们要称后一种算法为“伪随机”而不是前一种。
至于实战中攒暴击这一说,冰蛙一定不傻,在某些条件,例如经过多少秒后或移动多少距离后计数器重置,来降低“攒暴击”对游戏的影响。当然,这段话只是基于自己的猜测,不必当真。
伪随机是否影响竞技性?肯定是不影响的。你觉得斧王断兵没怎么转所以不敢A他了,但在他没转之前谁也不知道结果是什么,所以显然是没有影响的,基于后验概率的讨论本身就是把问题引向了不同的角度。
总结:伪随机减少了游戏中极端事件的出现频率,能够给玩家更好的游戏体验