Skip to content

Commit

Permalink
model: Move random seed and random to __init__
Browse files Browse the repository at this point in the history
Given that `super().__init__()` is now necessary for user's model class `__init__()`, this simplifies the `Model` construct.
And  `model.random` can be initialized with other RNG objects (`np.random.default_rng(...)`, or any other RNG).

Prior discussion #1938 Please enter the commit message for your changes. Lines starting
  • Loading branch information
rht committed Jan 7, 2024
1 parent 0bd4429 commit ed9b5aa
Showing 1 changed file with 8 additions and 11 deletions.
19 changes: 8 additions & 11 deletions mesa/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,17 +45,6 @@ class Model:
initialize_data_collector: Sets up the data collector for the model, requiring an initialized scheduler and agents.
"""

def __new__(cls, *args: Any, **kwargs: Any) -> Any:
"""Create a new model object and instantiate its RNG automatically."""
obj = object.__new__(cls)
obj._seed = kwargs.get("seed")
if obj._seed is None:
# We explicitly specify the seed here so that we know its value in
# advance.
obj._seed = random.random() # noqa: S311
obj.random = random.Random(obj._seed)
return obj

def __init__(self, *args: Any, **kwargs: Any) -> None:
"""Create a new model. Overload this method with the actual code to
start the model. Always start with super().__init__() to initialize the
Expand All @@ -65,6 +54,14 @@ def __init__(self, *args: Any, **kwargs: Any) -> None:
self.running = True
self.schedule = None
self.current_id = 0

self._seed = kwargs.get("seed")
if self._seed is None:
# We explicitly specify the seed here so that we know its value in
# advance.
self._seed = random.random() # noqa: S311
self.random = random.Random(self._seed)

self._agents: defaultdict[type, dict] = defaultdict(dict)

# Warning flags for current experimental features. These make sure a warning is only printed once per model.
Expand Down

0 comments on commit ed9b5aa

Please sign in to comment.