From b2692289b8019e3fee756dc877a1d4a9f7e8cc77 Mon Sep 17 00:00:00 2001 From: krig Date: Tue, 10 Dec 2024 11:12:06 +0300 Subject: [PATCH] deterministic fix --- crafter/engine.py | 5 ++++- crafter/env.py | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/crafter/engine.py b/crafter/engine.py index 7932f26..4859be2 100644 --- a/crafter/engine.py +++ b/crafter/engine.py @@ -206,7 +206,10 @@ def _tint(self, canvas, color, amount): return (1 - amount) * canvas + amount * color def _noise(self, canvas, amount, stddev): - noise = self._world.random.uniform(32, 127, canvas.shape[:2])[..., None] + state = self._world.random.get_state() + random = np.random.RandomState() + random.set_state(state) + noise = random.uniform(32, 127, canvas.shape[:2])[..., None] mask = amount * self._vignette(canvas.shape, stddev)[..., None] return (1 - mask) * canvas + mask * noise diff --git a/crafter/env.py b/crafter/env.py index e0d8e7b..8105575 100644 --- a/crafter/env.py +++ b/crafter/env.py @@ -160,6 +160,7 @@ def _balance_object( xmin, xmax, ymin, ymax = chunk random = self._world.random creatures = [obj for obj in objs if isinstance(obj, cls)] + creatures.sort(key=(lambda x: tuple(x.pos))) mask = self._world.mask(*chunk, material) target_min, target_max = target_fn(len(creatures), mask.sum()) if len(creatures) < int(target_min) and random.uniform() < spawn_prob: