真随机数和伪随机数


3楼猫 发布时间:2024-03-05 22:32:24 作者:jch3601212 Language

在游戏开发中,随机数生成器(Random Number Generator, RNG)是一个非常重要的组件,用于创建各种随机性的元素,包括但不限于:地图生成:在一些游戏中,地图是动态生成的,随机数生成器可以用来确定地形、地貌、资源分布等,以确保每次游戏的地图都是独一无二的。敌人生成:游戏中的敌人、怪物或者其他对手的位置、属性、行为等可以通过随机数来决定,使得每次游戏的对战体验都有所不同。物品掉落:在角色扮演游戏(RPG)等类型的游戏中,随机数生成器可以用来决定敌人掉落的物品、装备等,增加游戏的可玩性和挑战性。事件触发:一些游戏中会有各种随机事件发生,如天气变化、特殊事件触发等,随机数生成器可以决定这些事件何时发生以及具体的效果。玩家体验:随机数也可以用来增加玩家的体验多样性,比如在一些游戏中,NPC 的对话内容、交易价格等可以通过随机数生成,使得每次游戏的交互都有所不同。在实际应用中,可以使用两种类型的随机数生成器:真随机数生成器和伪随机数生成器。真随机数生成器(TRNG):真随机数是通过物理过程生成的,比如量子现象、热噪声等。TRNG 通常基于硬件设备,如硬件随机数发生器(HRNG),其输出结果是完全不可预测的,并且在理论上是不可重复的。伪随机数生成器(PRNG):伪随机数是通过算法生成的,其输出结果是由初始种子(seed)确定的,因此在给定相同的种子的情况下,PRNG 会产生相同的序列。虽然伪随机数并不是真正的随机数,但在大多数情况下,它们足够随机以满足游戏开发的需求。在实际开发中,开发者需要根据游戏的需求和性能要求选择合适的随机数生成器。例如,在对安全性要求较高的游戏中,可以选择使用硬件随机数生成器;而对于大多数普通游戏,伪随机数生成器通常是更常见的选择,因为它们易于实现并且能够提供足够的随机性。
伪随机数的实现比较简单
Python 中的 random 模块使用的是伪随机数生成器(PRNG),主要基于梅森旋转算法(Mersenne Twister)。
梅森旋转算法是一种高质量的伪随机数生成器,它在生成随机数时具有良好的性能和统计特性。该算法的原理如下:
  1. 种子生成:在使用随机数生成器之前,需要提供一个种子(seed),它可以是任何整数。如果不指定种子,默认使用当前系统时间作为种子,这样可以保证每次运行程序时,生成的随机数序列都是不同的。
  2. 伪随机数生成:一旦有了种子,随机数生成器就会根据该种子按照特定的算法生成一个随机数序列。梅森旋转算法采用了一个长周期(2^19937 - 1)的线性同余发生器,该算法的周期非常长,意味着在不重复的情况下可以生成大量的随机数。
  3. 随机数提取:在需要随机数的时候,随机数生成器会从生成的随机数序列中提取一个随机数返回。每次提取都会影响下一次的结果,因此每个随机数都是独立且随机的。
需要注意的是,由于梅森旋转算法是确定性的,因此在给定相同的种子的情况下,生成的随机数序列是相同的。这在某些情况下可能是有用的,例如在调试时需要重现问题。但在一般情况下,为了确保随机性,建议使用不同的种子。
总的来说,Python 中的 random
模块提供了一个方便而高效的工具,用于生成各种类型的随机数,基于梅森旋转算法的伪随机数生成器保证了生成的随机数具有良好的质量和统计特性。
很多伪随机数发生器的种子会取系统时间,也怪不得会在网上看到一些说法:例如每天什么时刻在游戏地图的哪个地方做装备,出极品概率高,哈哈。
真随机数发生器的实现则需要借助特定的芯片。如果是高端服务器,则会在服务器的CPU内置真随机数发生器,真随机数发生器通过集成电路内部专门设计的TRNG电路,采集芯片内晶体管的热噪声、或者使用混沌电路、还可以使用数字电路的亚稳态现象来产生真随机数。这些现象目前还不存在被建模的可能,没这个能力。。。
如果是一般的服务器,或者个人电脑想要使用真随机数发生器,就需要借助外置的使用专用TRNG芯片的硬件真随机数发生器设备了。有USB接口的也有PCIE接口的,这个取决于你需要多快的速度,一般USB接口的最多也能到240M比特每秒的速度,对于一般的游戏应用完全够了。别问我为什么知道,因为我就是做真随机数发生器芯片的,哈哈哈哈。

© 2022 3楼猫 下载APP 站点地图 广告合作:asmrly666@gmail.com