在 类 的函数中生成伪随机数
Generating pseudo-random number within a classes's function
我正在尝试制作一个 q table。
但是当我创建我的 q table 时,我注意到我的所有值都是相同的,即使我更改了 random.seed 并使用了 randint 的多个变体,例如 np.random.uniform 和 random.uniform.
我的代码如下
import os, time, random
start = time.time()
class space_info:
SIZE = 10
class blob():
value = None
q_table = {}
def init(self):
SIZE = space_info.SIZE
for i in range(-SIZE+1, SIZE):
for ii in range(-SIZE+1, SIZE):
for iii in range(-SIZE+1, SIZE):
for iiii in range(-SIZE+1, SIZE):
random.seed(time.time()*1000000)
self.q_table[((i, ii), (iii, iiii))] = [random.uniform(-5, 0) for i in range(4)]
os.system('clear')
x = blob()
x.init()
z = blob()
z.init()
if (z.q_table[((-9, -2), (3, 9))]) == (x.q_table[((-9, -2), (3, 9))]):
print("WE FAILED ):")
print(z.q_table[((-9, -2), (3, 9))])
print(x.q_table[((-9, -2), (3, 9))])
else:
print("YES")
如何为我的 q_table 获取新号码?
变量 q_table
属于 class blob,而不是 class blob 的实例。
您可以通过 id(x.q_table) == id(z.q_table)
进行测试。如果这是真的,则意味着两者在内存中位于同一位置。
class blob():
def __init__(self):
self.value = None
self.q_table = {}
# in case you don't want to call init explicitly
# self.init()
def init(self):
...
我保留了 init
功能。
__init__
函数是 class 现在应该用来创建 blob 的新实例的函数。请注意,q_table
现在是 self.q_table
,表示它属于称为 self
的对象,即 class blob 的实例。
我正在尝试制作一个 q table。 但是当我创建我的 q table 时,我注意到我的所有值都是相同的,即使我更改了 random.seed 并使用了 randint 的多个变体,例如 np.random.uniform 和 random.uniform. 我的代码如下
import os, time, random
start = time.time()
class space_info:
SIZE = 10
class blob():
value = None
q_table = {}
def init(self):
SIZE = space_info.SIZE
for i in range(-SIZE+1, SIZE):
for ii in range(-SIZE+1, SIZE):
for iii in range(-SIZE+1, SIZE):
for iiii in range(-SIZE+1, SIZE):
random.seed(time.time()*1000000)
self.q_table[((i, ii), (iii, iiii))] = [random.uniform(-5, 0) for i in range(4)]
os.system('clear')
x = blob()
x.init()
z = blob()
z.init()
if (z.q_table[((-9, -2), (3, 9))]) == (x.q_table[((-9, -2), (3, 9))]):
print("WE FAILED ):")
print(z.q_table[((-9, -2), (3, 9))])
print(x.q_table[((-9, -2), (3, 9))])
else:
print("YES")
如何为我的 q_table 获取新号码?
变量 q_table
属于 class blob,而不是 class blob 的实例。
您可以通过 id(x.q_table) == id(z.q_table)
进行测试。如果这是真的,则意味着两者在内存中位于同一位置。
class blob():
def __init__(self):
self.value = None
self.q_table = {}
# in case you don't want to call init explicitly
# self.init()
def init(self):
...
我保留了 init
功能。
__init__
函数是 class 现在应该用来创建 blob 的新实例的函数。请注意,q_table
现在是 self.q_table
,表示它属于称为 self
的对象,即 class blob 的实例。