在 类 的函数中生成伪随机数

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 的实例。