python中噪⾳是什么意思_Python中的随机噪声函数
⾸先,如果你想知道噪声(x)对同⼀个x总是返回相同的值,不管怎样,即使它从未被调⽤过,那么你根本就不能使⽤随机性。⼀个好的哈希函数是唯⼀的可能。在
但是,如果您只需要能够恢复以前的状态,该状态由以前探索过的所有点的值组成(从未探索过的点在保存和加载后可能会与您没有退出的情况不同……但是如果没有访问多个Universe,怎么会有⼈知道呢?),并且您不希望存储所有这些点,那么重新⽣成它们可能是合理的。在
但让我们后退⼀步。你想要⼀个类似哈希函数的东西。你能⽤散列函数吗?在
我可以想象hashlib中的算法太慢了(md5可能是最快的,但要全部测试),但如果没有实际测试,我不会拒绝它们。在
可能zlib.adler32(或32)的“随机周期”太短,但我不会拒绝它(除了hash),⽽不考虑它是否⾜够好。因此,即使是hash加上⼀个像样的固定端混合函数也可能⾜够好(⾄少在64位系统上)。在
Python没有现成的“介于”md5和“adler32”之间的东西。但是,您可以到PyPI模块或数百种其他哈希算法的源代码。因此,如果您熟悉任何听起来不错的特定哈希算法,那么⼤多数哈希算法都很简单,您可能可以编写代码,例如,使⽤xor折叠的FNV hash⽐查看备选⽅案所花的时间要短。在
你也可以在游戏中保存⼀堆“随机存储”的⽂件。在
如果你已经⽤尽了所有的可能性,你真的需要更多的随机性,⽽不是⼀个⾜够快的散列函数和任意的盐可以给你,那么:
听起来你已经需要存储⼀个⽤户浏览过的点的列表了(因为你怎么知道你还需要恢复哪些点呢?)。顺序并不重要。所以,你可以按照探索的顺序来存储它们。这意味着您可以确定地重新⽣成值(只需迭代列表)。这意味着你可以⽤@delnan的建议来回答你的问题。在
但是,seed不是这样做的⽅法。不能保证每次运⾏、Python版本、机器等都将RNG置于相同的状态。为此,您需要setstate:要保存,请调⽤state(),并对结果进⾏pickle和stash。在
要加载、读取和取消拾取状态,并调⽤random.setstate(state)。在
有关详细信息,请参见the docs。在
如果您使⽤的是⼀个random.Random实例,那么它是完全相同的,除了您必须先构造⼀个random.Random,然后才能对其调⽤setstate。在
这可以保证在程序运⾏期间、跨机器运⾏等情况下⼯作,即使是使⽤更新版本的Python。但是,并不
random在python中的意思是保证可以使⽤Python的旧版本。(也就是说,如果⽤户⽤Python2.6保存游戏,然后尝试⽤2.5加载,则状态将不兼容。我相信只有2.6版和2.3版会有问题,但当然不能保证将来不会有其他版本的版本。)我建议保存Python版本,如果他们降级了,会显⽰⼀条警告:“这个保存⽂件需要Python 2.6或更⾼版本。你有Python2.5。负载可能会失败。是否继续?”在
这只对random.Random和random模块本⾝有保证(因为顶级模块函数只使⽤⼀个隐藏的random.Random)。特别
是,random.SystemRandom被明确地记录为不起作⽤。在
实际上,您也可以直接pickle⼀个random.Random,因为状态被pickle进⼊。好像是那样的如果要⼯作,或者酸洗⼀个Random对象的意义是什么?它确实有效。但实际上它并没有被证明有效,所以为了安全起见,我还是坚持酸洗。在
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论