Exemple #1
0
    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)