Source code for rlberry.seeding.seeding

import numpy as np
import rlberry.check_packages as check_packages
from rlberry.seeding.seeder import Seeder

if check_packages.TORCH_INSTALLED:
    import torch


[docs]def set_external_seed(seeder): """ Set seeds of external libraries. To do: Check (torch seeding): https://github.com/pytorch/pytorch/issues/7068#issuecomment-487907668 Parameters --------- seeder: seeding.Seeder or int Integer or Seeder object from which to generate random seeds. Examples -------- >>> from rlberry.seeding import set_external_seed >>> set_external_seed(seeder) """ if np.issubdtype(type(seeder), np.integer): seeder = Seeder(seeder) # seed torch if check_packages.TORCH_INSTALLED: torch.manual_seed(seeder.seed_seq.generate_state(1, dtype=np.uint32)[0])
[docs]def safe_reseed(obj, seeder, reseed_spaces=True): """ Calls obj.reseed(seed_seq) method if available; If a obj.seed() method is available, call obj.seed(seed_val), where seed_val is generated by the seeder. Otherwise, does nothing. Parameters ---------- obj : object Object to be reseeded. seeder: :class:`~rlberry.seeding.seeder.Seeder` Seeder object from which to generate random seeds. reseed_spaces: bool, default = True. If False, do not try to reseed observation_space and action_space (if they exist as attributes of `obj`). Returns ------- True if reseeding was done, False otherwise. """ reseeded = False try: obj.reseed(seeder) reseeded = True except AttributeError: seed_val = seeder.rng.integers(2**32).item() try: obj.seed(seed_val) reseeded = True except AttributeError: try: obj.reset(seed=seed_val) reseeded = True except AttributeError: reseeded = False # check if the object has observation and action spaces to be reseeded. if reseed_spaces: try: safe_reseed(obj.observation_space, seeder) safe_reseed(obj.action_space, seeder) except AttributeError: pass return reseeded