Farama-Foundation / Minigrid

Simple and easily configurable grid world environments for reinforcement learning
https://minigrid.farama.org/
Other
2.09k stars 604 forks source link

Possible bug when generating non-square DoorKey environments. #427

Open rbankosegger opened 5 months ago

rbankosegger commented 5 months ago

Consider the lines

doorIdx = self._rand_int(1, width - 2)
self.put_obj(Door("yellow", is_locked=True), splitIdx, doorIdx)

From:

https://github.com/Farama-Foundation/Minigrid/blame/617e4908e20fd08e4e135421cd47d52018a3148c/minigrid/envs/doorkey.py#L94

The variable doorIdx determines the y-coordinate of the door, the sampling of which should depend on the grid height, not its width. In situations where width > height, the door might be placed outside of the grid dimension.

Suggested fix: Replace by

doorIdx = self._rand_int(1, height - 2)
pseudo-rnd-thoughts commented 5 months ago

Could you provide an example image for a given seed with and without the fix

rbankosegger commented 5 months ago

Here is an example. I believe this bug cannot occur "in the wild" because width=height for all gym-registered environments. But it might become an issue if someone decides to publish a non-square environment of this type.

from minigrid.envs.doorkey import DoorKeyEnv
env = DoorKeyEnv(render_mode='human', size=6)
env.reset(seed=1)
env._gen_grid(6,4)
env.render()

import time
time.sleep(100)

minigrid

pseudo-rnd-thoughts commented 5 months ago

Ahh, that makes sense. Could you make a PR with this fix?

rbankosegger commented 5 months ago

Here it is: https://github.com/Farama-Foundation/Minigrid/pull/429