You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
import stormpy.core
class Simulator: """
Base class for simulators. """
def __init__(self, seed=None): self._seed = seed
def step(self, action=None): raise NotImplementedError("Abstract superclass")
def restart(self): raise NotImplementedError("Abstract superclass")
class SparseSimulator(Simulator): """
Simulator on top of sparse models. """
def __init__(self, model, seed=None): super().__init__(seed) self._model = model self._engine = stormpy.core._DiscreteTimeSparseModelSimulatorDouble(model) if seed is not None: self._engine.set_seed(seed)
def step(self, action=None): if action is None: if self._model.is_nondeterministic_model: raise RuntimeError("Must specify an action in nondeterministic models") check = self._engine.step(0) assert(check) else: if action >= self._model.get_nondeterministic_choices(): raise RuntimeError(f"Only {self._model.get_nondeterministic_choices()} actions available") check = self._engine.step(action) assert(check) return self._engine.get_current_state()
def restart(self): self._engine.reset_to_initial_state()
def create_simulator(model, seed = None): """
Factory method for creating a simulator.
:param model: Some form of model :param seed: A seed for reproducibility. If None (default), the seed is internally generated. :return: A simulator that can simulate on top of this model """
if isinstance(model, stormpy.storage._ModelBase): if model.is_sparse_model: return SparseSimulator(model, seed) else: raise NotImplementedError("Currently, we only support simulators for sparse models.")
|