(Pseudo)Python中的随机数生成,不使用模块和时钟
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了(Pseudo)Python中的随机数生成,不使用模块和时钟,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2008字,纯文字阅读大概需要3分钟。
内容图文
![(Pseudo)Python中的随机数生成,不使用模块和时钟](/upload/InfoBanner/zyjiaocheng/818/ff2c4d8519cf4a1bb12b18050570625d.jpg)
我正在使用Python进行竞赛,我正在创建一个机器人来玩游戏.问题是,它没有安装任何c支持,所以我无法访问随机,numpy和scipy模块.
我将有大约400mb ram可用,我正在寻找一种方法来生成0到1之间的均匀随机数,以便在游戏过程中进行模拟.
请注意,我之前使用时钟时间来生成一个数字,但问题是我需要大量数字,而时钟变化不大,这将导致数字始终相同.事实上,我被限制为最多1秒,比如100k数字.
我正在考虑加载数据,但问题是机器人总会使用相同的数字.然后,我需要使用这些数字的情况略有不同.
使用Python 2.7,希望人们有一些建议.
解决方法:
您可以使用Mersenne Twister实现.我找到了this one,它是以维基百科上的伪代码为模型的.
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
"""
Based on the pseudocode in https://en.wikipedia.org/wiki/Mersenne_Twister. Generates uniformly distributed 32-bit integers in the range [0, 232 ? 1] with the MT19937 algorithm
Ya?ar Arabac? <yasar11732 et gmail nokta com>
"""
# Create a length 624 list to store the state of the generator
MT = [0 for i in xrange(624)]
index = 0
# To get last 32 bits
bitmask_1 = (2 ** 32) - 1
# To get 32. bit
bitmask_2 = 2 ** 31
# To get last 31 bits
bitmask_3 = (2 ** 31) - 1
def initialize_generator(seed):
"Initialize the generator from a seed"
global MT
global bitmask_1
MT[0] = seed
for i in xrange(1,624):
MT[i] = ((1812433253 * MT[i-1]) ^ ((MT[i-1] >> 30) + i)) & bitmask_1
def extract_number():
"""
Extract a tempered pseudorandom number based on the index-th value,
calling generate_numbers() every 624 numbers
"""
global index
global MT
if index == 0:
generate_numbers()
y = MT[index]
y ^= y >> 11
y ^= (y << 7) & 2636928640
y ^= (y << 15) & 4022730752
y ^= y >> 18
index = (index + 1) % 624
return y
def generate_numbers():
"Generate an array of 624 untempered numbers"
global MT
for i in xrange(624):
y = (MT[i] & bitmask_2) + (MT[(i + 1 ) % 624] & bitmask_3)
MT[i] = MT[(i + 397) % 624] ^ (y >> 1)
if y % 2 != 0:
MT[i] ^= 2567483615
if __name__ == "__main__":
from datetime import datetime
now = datetime.now()
initialize_generator(now.microsecond)
for i in xrange(100):
"Print 100 random numbers as an example"
print extract_number()
内容总结
以上是互联网集市为您收集整理的(Pseudo)Python中的随机数生成,不使用模块和时钟全部内容,希望文章能够帮你解决(Pseudo)Python中的随机数生成,不使用模块和时钟所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。