1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- """
- Copied and adapted from https://github.com/mila-iqia/babyai.
- Levels described in the Baby AI ICLR 2019 submission.
- The instructions are a synthesis of those from `PutNext`, `Open`, `GoTo`, and `Pickup`.
- """
- from __future__ import annotations
- from minigrid.envs.babyai.core.levelgen import LevelGen
- class Synth(LevelGen):
- """
- Union of all instructions from PutNext, Open, Goto and PickUp. The agent
- may need to move objects around. The agent may have to unlock the door,
- but only if it is explicitly referred by the instruction.
- Competencies: Maze, Unblock, Unlock, GoTo, PickUp, PutNext, Open
- """
- def __init__(self, room_size=8, num_rows=3, num_cols=3, num_dists=18, **kwargs):
- # We add many distractors to increase the probability
- # of ambiguous locations within the same room
- super().__init__(
- room_size=room_size,
- num_rows=num_rows,
- num_cols=num_cols,
- num_dists=num_dists,
- instr_kinds=["action"],
- locations=False,
- unblocking=True,
- implicit_unlock=False,
- **kwargs,
- )
- class SynthS5R2(Synth):
- def __init__(self, **kwargs):
- super().__init__(room_size=5, num_rows=2, num_cols=2, num_dists=7, **kwargs)
- class SynthLoc(LevelGen):
- """
- Like Synth, but a significant share of object descriptions involves
- location language like in PickUpLoc. No implicit unlocking.
- Competencies: Maze, Unblock, Unlock, GoTo, PickUp, PutNext, Open, Loc
- """
- def __init__(self, **kwargs):
- # We add many distractors to increase the probability
- # of ambiguous locations within the same room
- super().__init__(
- instr_kinds=["action"],
- locations=True,
- unblocking=True,
- implicit_unlock=False,
- **kwargs,
- )
- class SynthSeq(LevelGen):
- """
- Like SynthLoc, but now with multiple commands, combined just like in GoToSeq.
- No implicit unlocking.
- Competencies: Maze, Unblock, Unlock, GoTo, PickUp, PutNext, Open, Loc, Seq
- """
- def __init__(self, **kwargs):
- # We add many distractors to increase the probability
- # of ambiguous locations within the same room
- super().__init__(
- locations=True, unblocking=True, implicit_unlock=False, **kwargs
- )
- class MiniBossLevel(LevelGen):
- def __init__(self, **kwargs):
- super().__init__(
- num_cols=2,
- num_rows=2,
- room_size=5,
- num_dists=7,
- locked_room_prob=0.25,
- **kwargs,
- )
- class BossLevel(LevelGen):
- def __init__(self, **kwargs):
- super().__init__(**kwargs)
- class BossLevelNoUnlock(LevelGen):
- def __init__(self, **kwargs):
- super().__init__(locked_room_prob=0, implicit_unlock=False, **kwargs)
|