fourroomqa.py 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. from gym_minigrid.minigrid import *
  2. from gym_minigrid.register import register
  3. """
  4. class Room:
  5. def __init__(self,
  6. top,
  7. size,
  8. entryDoorPos,
  9. exitDoorPos
  10. ):
  11. self.top = top
  12. self.size = size
  13. self.entryDoorPos = entryDoorPos
  14. self.exitDoorPos = exitDoorPos
  15. """
  16. class FourRoomQAEnv(MiniGridEnv):
  17. """
  18. Environment to experiment with embodied question answering
  19. https://arxiv.org/abs/1711.11543
  20. """
  21. # TODO: define actions
  22. def __init__(self, size=16):
  23. assert size >= 8
  24. super(FourRoomQAEnv, self).__init__(gridSize=size, maxSteps=8*size)
  25. # TODO: self.actions
  26. # TODO: self.action_space
  27. def _genGrid(self, width, height):
  28. grid = super(FourRoomQAEnv, self)._genGrid(width, height)
  29. # TODO: work in progress
  30. """
  31. # Create a vertical splitting wall
  32. splitIdx = self._randInt(2, gridSz-3)
  33. for i in range(0, gridSz):
  34. grid.set(splitIdx, i, Wall())
  35. # Place a door in the wall
  36. doorIdx = self._randInt(1, gridSz-2)
  37. grid.set(splitIdx, doorIdx, Door('yellow'))
  38. # Place a key on the left side
  39. #keyIdx = self._randInt(1 + gridSz // 2, gridSz-2)
  40. keyIdx = gridSz-2
  41. grid.set(1, keyIdx, Key('yellow'))
  42. """
  43. return grid
  44. register(
  45. id='MiniGrid-FourRoomQA-v0',
  46. entry_point='gym_minigrid.envs:FourRoomQAEnv'
  47. )