def testSharedRandomState(self): env = MockEnv(action_dim=1, observation_dim=1, run_mode='multiprocess') initial_rand_obj = copy.deepcopy(env._rand_obj_) initial_values = initial_rand_obj.uniform(-1, +1, 3) env.start() for _ in range(3): env.step(0) updated_rand_obj = np.random.RandomState() updated_rand_obj.set_state(utils.get_random_state_from_array(env._shared_rstate_array_)) safe_final_values = updated_rand_obj.uniform(-1, +1, 3) unsafe_final_values = env._rand_obj_.uniform(-1, +1, 3) env.step(0) env.close() assert np.all(initial_values == unsafe_final_values) assert np.all(initial_values != safe_final_values) assert np.all(safe_final_values == env._uniform_array_)
def test_random_state_array(self): rand_obj = np.random.RandomState(1) rand_state = rand_obj.get_state() original_uniform_values = rand_obj.uniform(-1, 1, 100) original_normal_values = rand_obj.randn(100) rand_state_array_type, rand_state_array_size, rand_state_array = get_random_state_array(rand_state) shared_rand_array = np.frombuffer(Array('b', rand_state_array_size).get_obj(), dtype=rand_state_array_type) np.copyto(shared_rand_array, np.frombuffer(rand_state_array, dtype=rand_state_array_type)) new_rand_obj = np.random.RandomState() new_rand_obj.set_state(get_random_state_from_array(shared_rand_array)) new_uniform_values = new_rand_obj.uniform(-1, 1, 100) new_normal_values = new_rand_obj.randn(100) assert np.all(original_uniform_values == new_uniform_values) assert np.all(original_normal_values == new_normal_values)