Skip to content

Commit

Permalink
model: Ensure the seed is initialized with current timestamp when it …
Browse files Browse the repository at this point in the history
…is None
  • Loading branch information
rht committed Sep 21, 2023
1 parent 3dbabfe commit b45569f
Showing 1 changed file with 10 additions and 1 deletion.
11 changes: 10 additions & 1 deletion mesa/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
# Remove this __future__ import once the oldest supported Python is 3.10
from __future__ import annotations

import datetime
import random

# mypy
Expand All @@ -21,7 +22,15 @@ class Model:
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", None)
obj._seed = kwargs.get("seed")
if obj._seed is None:
# We explicitly specify the seed here so that we know its value in
# advance. This value matches random.Random's default seed, which
# is the current timestamp. Note: datetime.now().timestamp() is
# more cross-platform than using time.time(), and ensures the
# precisions is microsecond.
current_timestamp = datetime.datetime.now(datetime.timezone.utc).timestamp()
obj._seed = current_timestamp
obj.random = random.Random(obj._seed)
return obj

Expand Down

0 comments on commit b45569f

Please sign in to comment.