123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596 |
- <!doctype html>
- <html class="no-js" lang="en" data-content_root="../../../">
- <head><meta charset="utf-8"/>
- <meta name="viewport" content="width=device-width,initial-scale=1"/>
- <meta name="color-scheme" content="light dark">
- <meta name="description" content="Minigrid contains simple and easily configurable grid world environments to conduct Reinforcement Learning research. This library was previously known as gym-minigrid.">
- <meta property="og:title" content="MiniGrid Documentation" />
- <meta property="og:type" content="website" />
- <meta property="og:description" content="Minigrid contains simple and easily configurable grid world environments to conduct Reinforcement Learning research. This library was previously known as gym-minigrid." />
- <meta property="og:url" content="https://minigrid.farama.org/_modules/minigrid/wrappers.html" /><meta property="og:image" content="https://minigrid.farama.org//_static/img/minigrid-github.png" /><meta name="twitter:card" content="summary_large_image"><link rel="index" title="Index" href="../../../genindex/" /><link rel="search" title="Search" href="../../../search/" />
- <link rel="canonical" href="https://minigrid.farama.org/_modules/minigrid/wrappers.html" />
- <link rel="shortcut icon" href="../../../_static/minigrid-favicon.png"/><!-- Generated with Sphinx 7.2.6 and Furo 2023.08.19.dev1 -->
- <title>minigrid.wrappers - MiniGrid Documentation</title>
- <link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=a746c00c" />
- <link rel="stylesheet" type="text/css" href="../../../_static/styles/furo.css?v=3e7f4c72" />
- <link rel="stylesheet" type="text/css" href="../../../_static/styles/furo-extensions.css?v=49cbaffd" />
-
-
- <style>
- body {
- --color-code-background: #f8f8f8;
- --color-code-foreground: black;
-
- }
- @media not print {
- body[data-theme="dark"] {
- --color-code-background: #202020;
- --color-code-foreground: #d0d0d0;
-
- }
- @media (prefers-color-scheme: dark) {
- body:not([data-theme="light"]) {
- --color-code-background: #202020;
- --color-code-foreground: #d0d0d0;
-
- }
- }
- }
- </style></head>
- <body>
- <header class="farama-header" aria-label="Farama header">
- <div class="farama-header__container">
- <div class="farama-header__left--mobile">
- <label class="nav-overlay-icon" for="__navigation">
- <div class="visually-hidden">Toggle site navigation sidebar</div>
- <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
- <defs></defs>
- <line x1="0.5" y1="4" x2="23.5" y2="4"></line>
- <line x1="0.232" y1="12" x2="23.5" y2="12"></line>
- <line x1="0.232" y1="20" x2="23.5" y2="20"></line>
- </svg>
- </label>
- </div>
- <div class="farama-header__left farama-header__center--mobile">
- <a href="../../../">
- <img class="farama-header__logo only-light" src="../../../_static/img/minigrid.svg" alt="Light Logo"/>
- <img class="farama-header__logo only-dark" src="../../../_static/img/minigrid-white.svg" alt="Dark Logo"/>
- <span class="farama-header__title">MiniGrid Documentation</span>
- </a>
- </div>
- <div class="farama-header__right">
- <div class="farama-header-menu">
- <button class="farama-header-menu__btn" aria-label="Open Farama Menu" aria-expanded="false" aria-haspopup="true" aria-controls="farama-menu">
- <img class="farama-black-logo-invert" src="../../../_static/img/farama-logo-header.svg">
- <svg viewBox="0 0 24 24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
- <polyline style="stroke-linecap: round; stroke-linejoin: round; fill: none; stroke-width: 2px;" points="1 7 12 18 23 7"></polyline>
- </svg>
- </button>
- <div class="farama-header-menu-container farama-hidden" aria-hidden="true" id="farama-menu">
- <div class="farama-header-menu__header">
- <a href="https://farama.org">
- <img class="farama-header-menu__logo farama-white-logo-invert" src="../../../_static/img/farama_solid_white.svg" alt="Farama Foundation logo">
- <span>Farama Foundation</span>
- </a>
- <div class="farama-header-menu-header__right">
- <button id="farama-close-menu">
- <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor"
- stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon-close">
- <line x1="3" y1="21" x2="21" y2="3"></line>
- <line x1="3" y1="3" x2="21" y2="21"></line>
- </svg>
- </button>
- </div>
- </div>
- <div class="farama-header-menu__body">
- <!-- Response from farama.org/api/projects.json -->
- </div>
- </div>
- </div>
- </div>
- </div>
- </header>
-
- <script>
- document.body.dataset.theme = localStorage.getItem("theme") || "auto";
- </script>
-
- <svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
- <symbol id="svg-toc" viewBox="0 0 24 24">
- <title>Contents</title>
- <svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
- <path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
- </svg>
- </symbol>
- <symbol id="svg-menu" viewBox="0 0 24 24">
- <title>Menu</title>
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
- stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
- <line x1="3" y1="12" x2="21" y2="12"></line>
- <line x1="3" y1="6" x2="21" y2="6"></line>
- <line x1="3" y1="18" x2="21" y2="18"></line>
- </svg>
- </symbol>
- <symbol id="svg-arrow-right" viewBox="0 0 24 24">
- <title>Expand</title>
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
- stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
- <polyline points="9 18 15 12 9 6"></polyline>
- </svg>
- </symbol>
- <symbol id="svg-sun" viewBox="0 0 24 24">
- <title>Light mode</title>
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
- stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
- <circle cx="12" cy="12" r="5"></circle>
- <line x1="12" y1="1" x2="12" y2="3"></line>
- <line x1="12" y1="21" x2="12" y2="23"></line>
- <line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
- <line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
- <line x1="1" y1="12" x2="3" y2="12"></line>
- <line x1="21" y1="12" x2="23" y2="12"></line>
- <line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
- <line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
- </svg>
- </symbol>
- <symbol id="svg-moon" viewBox="0 0 24 24">
- <title>Dark mode</title>
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
- stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
- <path stroke="none" d="M0 0h24v24H0z" fill="none" />
- <path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
- </svg>
- </symbol>
- <symbol id="svg-sun-half" viewBox="0 0 24 24">
- <title>Auto light/dark mode</title>
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
- stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
- <path stroke="none" d="M0 0h24v24H0z" fill="none"/>
- <circle cx="12" cy="12" r="9" />
- <path d="M13 12h5" />
- <path d="M13 15h4" />
- <path d="M13 18h1" />
- <path d="M13 9h4" />
- <path d="M13 6h1" />
- </svg>
- </symbol>
- </svg>
- <input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
- <input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
- <label class="overlay sidebar-overlay" for="__navigation">
- <div class="visually-hidden">Hide navigation sidebar</div>
- </label>
- <label class="overlay toc-overlay" for="__toc">
- <div class="visually-hidden">Hide table of contents sidebar</div>
- </label>
- <div class="page">
- <!--<header class="mobile-header">
- <div class="header-left">
- <label class="nav-overlay-icon" for="__navigation">
- <div class="visually-hidden">Toggle site navigation sidebar</div>
- <i class="icon"><svg><use href="#svg-menu"></use></svg></i>
- </label>
- </div>
- <div class="header-center">
- <a href="../../../"><div class="brand">MiniGrid Documentation</div></a>
- </div>
- <div class="header-right">
- <div class="theme-toggle-container theme-toggle-header">
- <button class="theme-toggle">
- <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
- <svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
- <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
- <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
- </button>
- </div>
- <label class="toc-overlay-icon toc-header-icon no-toc" for="__toc">
- <div class="visually-hidden">Toggle table of contents sidebar</div>
- <i class="icon"><svg><use href="#svg-toc"></use></svg></i>
- </label>
- </div>
- </header>-->
- <aside class="sidebar-drawer">
- <div class="sidebar-container">
-
- <div class="sidebar-sticky"><a class="farama-sidebar__title" href="../../../">
- <img class="farama-header__logo only-light" src="../../../_static/img/minigrid.svg" alt="Light Logo"/>
- <img class="farama-header__logo only-dark" src="../../../_static/img/minigrid-white.svg" alt="Dark Logo"/>
- <span class="farama-header__title">MiniGrid Documentation</span>
- </a><form class="sidebar-search-container" method="get" action="../../../search/" role="search">
- <input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
- <input type="hidden" name="check_keywords" value="yes">
- <input type="hidden" name="area" value="default">
- </form>
- <div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
- <p class="caption" role="heading"><span class="caption-text">Introduction</span></p>
- <ul>
- <li class="toctree-l1"><a class="reference internal" href="../../../content/basic_usage/">Basic Usage</a></li>
- <li class="toctree-l1"><a class="reference internal" href="../../../content/basic_usage/#installation">Installation</a></li>
- <li class="toctree-l1"><a class="reference internal" href="../../../content/publications/">List of Publications</a></li>
- <li class="toctree-l1"><a class="reference internal" href="../../../content/create_env_tutorial/">Tutorial on Creating Environments</a></li>
- <li class="toctree-l1"><a class="reference internal" href="../../../content/training/">Training Minigrid Environments</a></li>
- </ul>
- <p class="caption" role="heading"><span class="caption-text">Wrappers</span></p>
- <ul>
- <li class="toctree-l1 has-children"><a class="reference internal" href="../../../api/wrapper/">Wrapper</a><input class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><div class="visually-hidden">Toggle navigation of Wrapper</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
- <li class="toctree-l2"><a class="reference internal" href="../../../api/wrappers/">Action Bonus</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../api/wrappers/#dict-observation-space">Dict Observation Space</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../api/wrappers/#direction-obs">Direction Obs</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../api/wrappers/#flatobs">FlatObs</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../api/wrappers/#fully-obs">Fully Obs</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../api/wrappers/#image-observation">Image Observation</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../api/wrappers/#no-death">No Death</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../api/wrappers/#observation">Observation</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../api/wrappers/#one-hot-partial-obs">One Hot Partial Obs</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../api/wrappers/#reseed">Reseed</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../api/wrappers/#rgb-img-obs">RGB Img Obs</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../api/wrappers/#rgb-partial-img-obs">RGB Partial Img Obs</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../api/wrappers/#position-bonus">Position Bonus</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../api/wrappers/#stochastic-action">Stochastic Action</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../api/wrappers/#symbolic-obs">Symbolic Obs</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../api/wrappers/#view-size">View Size</a></li>
- </ul>
- </li>
- </ul>
- <p class="caption" role="heading"><span class="caption-text">Environments</span></p>
- <ul>
- <li class="toctree-l1 has-children"><a class="reference internal" href="../../../environments/minigrid/">Minigrid Environments</a><input class="toctree-checkbox" id="toctree-checkbox-2" name="toctree-checkbox-2" role="switch" type="checkbox"/><label for="toctree-checkbox-2"><div class="visually-hidden">Toggle navigation of Minigrid Environments</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/minigrid/BlockedUnlockPickupEnv/">Blocked Unlock Pickup</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/minigrid/CrossingEnv/">Crossing</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/minigrid/DistShiftEnv/">Dist Shift</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/minigrid/DoorKeyEnv/">Door Key</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/minigrid/DynamicObstaclesEnv/">Dynamic Obstacles</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/minigrid/EmptyEnv/">Empty</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/minigrid/FetchEnv/">Fetch</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/minigrid/FourRoomsEnv/">Four Rooms</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/minigrid/GoToDoorEnv/">Go To Door</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/minigrid/GoToObjectEnv/">Go To Object</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/minigrid/KeyCorridorEnv/">Key Corridor</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/minigrid/LavaGapEnv/">Lava Gap</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/minigrid/LockedRoomEnv/">Locked Room</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/minigrid/MemoryEnv/">Memory</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/minigrid/MultiRoomEnv/">Multi Room</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/minigrid/ObstructedMaze_1Dlhb/">Obstructed Maze Dlhb</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/minigrid/ObstructedMaze_Full/">Obstructed Maze Full</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/minigrid/PlaygroundEnv/">Playground</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/minigrid/PutNearEnv/">Put Near</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/minigrid/RedBlueDoorEnv/">Red Blue Door</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/minigrid/UnlockEnv/">Unlock</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/minigrid/UnlockPickupEnv/">Unlock Pickup</a></li>
- </ul>
- </li>
- <li class="toctree-l1 has-children"><a class="reference internal" href="../../../environments/babyai/">BabyAI Environments</a><input class="toctree-checkbox" id="toctree-checkbox-3" name="toctree-checkbox-3" role="switch" type="checkbox"/><label for="toctree-checkbox-3"><div class="visually-hidden">Toggle navigation of BabyAI Environments</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/babyai/GoToRedBallGrey/">Go To Red Ball Grey</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/babyai/GoToRedBall/">Go To Red Ball</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/babyai/GoToRedBallNoDists/">Go To Red Ball No Dists</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/babyai/GoToObj/">Go To Obj</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/babyai/GoToLocal/">Go To Local</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/babyai/GoTo/">Go To</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/babyai/GoToImpUnlock/">Go To Imp Unlock</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/babyai/GoToSeq/">Go To Seq</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/babyai/GoToRedBlueBall/">Go To Red Blue Ball</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/babyai/GoToDoor/">Go To Door</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/babyai/GoToObjDoor/">Go To Obj Door</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/babyai/Open/">Open</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/babyai/OpenRedDoor/">Open Red Door</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/babyai/OpenDoor/">Open Door</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/babyai/OpenTwoDoors/">Open Two Doors</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/babyai/OpenDoorsOrder/">Open Doors Order</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/babyai/Pickup/">Pickup</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/babyai/UnblockPickup/">Unblock Pickup</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/babyai/PickupLoc/">Pickup Loc</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/babyai/PickupDist/">Pickup Dist</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/babyai/PickupAbove/">Pickup Above</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/babyai/PutNextLocal/">Put Next Local</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/babyai/PutNext/">Put Next</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/babyai/Unlock/">Unlock</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/babyai/UnlockLocal/">Unlock Local</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/babyai/KeyInBox/">Key In Box</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/babyai/UnlockPickup/">Unlock Pickup</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/babyai/BlockedUnlockPickup/">Blocked Unlock Pickup</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/babyai/UnlockToUnlock/">Unlock To Unlock</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/babyai/ActionObjDoor/">Action Obj Door</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/babyai/FindObjS5/">Find Obj</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/babyai/KeyCorridor/">Key Corridor</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/babyai/OneRoomS8/">One Room</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/babyai/MoveTwoAcross/">Move Two Across</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/babyai/Synth/">Synth</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/babyai/SynthLoc/">Synth Loc</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/babyai/SynthSeq/">Synth Seq</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/babyai/MiniBossLevel/">Mini Boss Level</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/babyai/BossLevel/">Boss Level</a></li>
- <li class="toctree-l2"><a class="reference internal" href="../../../environments/babyai/BossLevelNoUnlock/">Boss Level No Unlock</a></li>
- </ul>
- </li>
- </ul>
- <p class="caption" role="heading"><span class="caption-text">Development</span></p>
- <ul>
- <li class="toctree-l1"><a class="reference internal" href="../../../release_notes/">Release Notes</a></li>
- <li class="toctree-l1"><a class="reference external" href="https://github.com/Farama-Foundation/MiniGrid">Github</a></li>
- </ul>
- </div>
- </div>
- </div>
-
- </div>
- </aside>
- <div class="main-container">
-
-
- <div class="main">
- <div class="content">
- <div class="article-container">
- <a href="#" class="back-to-top muted-link">
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
- <path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
- </svg>
- <span>Back to top</span>
- </a>
- <div class="content-icon-container"><div class="theme-toggle-container theme-toggle-content">
- <button class="theme-toggle" title="Toggle color theme">
- <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
- <svg class="theme-icon-when-auto">
- <use href="#svg-sun-half"></use>
- </svg>
- <svg class="theme-icon-when-dark">
- <use href="#svg-moon"></use>
- </svg>
- <svg class="theme-icon-when-light">
- <use href="#svg-sun"></use>
- </svg>
- </button>
- </div>
- <label class="toc-overlay-icon toc-content-icon no-toc" for="__toc">
- <div class="visually-hidden">Toggle table of contents sidebar</div>
- <i class="icon"><svg>
- <use href="#svg-toc"></use>
- </svg></i>
- </label>
- </div>
- <article role="main">
-
- <h1>Source code for minigrid.wrappers</h1><div class="highlight"><pre>
- <span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">annotations</span>
- <span class="kn">import</span> <span class="nn">math</span>
- <span class="kn">import</span> <span class="nn">operator</span>
- <span class="kn">from</span> <span class="nn">functools</span> <span class="kn">import</span> <span class="n">reduce</span>
- <span class="kn">from</span> <span class="nn">typing</span> <span class="kn">import</span> <span class="n">Any</span>
- <span class="kn">import</span> <span class="nn">gymnasium</span> <span class="k">as</span> <span class="nn">gym</span>
- <span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
- <span class="kn">from</span> <span class="nn">gymnasium</span> <span class="kn">import</span> <span class="n">logger</span><span class="p">,</span> <span class="n">spaces</span>
- <span class="kn">from</span> <span class="nn">gymnasium.core</span> <span class="kn">import</span> <span class="n">ActionWrapper</span><span class="p">,</span> <span class="n">ObservationWrapper</span><span class="p">,</span> <span class="n">ObsType</span><span class="p">,</span> <span class="n">Wrapper</span>
- <span class="kn">from</span> <span class="nn">minigrid.core.constants</span> <span class="kn">import</span> <span class="n">COLOR_TO_IDX</span><span class="p">,</span> <span class="n">OBJECT_TO_IDX</span><span class="p">,</span> <span class="n">STATE_TO_IDX</span>
- <span class="kn">from</span> <span class="nn">minigrid.core.world_object</span> <span class="kn">import</span> <span class="n">Goal</span>
- <div class="viewcode-block" id="ReseedWrapper">
- <a class="viewcode-back" href="../../../api/wrappers/#minigrid.wrappers.ReseedWrapper">[docs]</a>
- <span class="k">class</span> <span class="nc">ReseedWrapper</span><span class="p">(</span><span class="n">Wrapper</span><span class="p">):</span>
- <span class="w"> </span><span class="sd">"""</span>
- <span class="sd"> Wrapper to always regenerate an environment with the same set of seeds.</span>
- <span class="sd"> This can be used to force an environment to always keep the same</span>
- <span class="sd"> configuration when reset.</span>
- <span class="sd"> Example:</span>
- <span class="sd"> >>> import minigrid</span>
- <span class="sd"> >>> import gymnasium as gym</span>
- <span class="sd"> >>> from minigrid.wrappers import ReseedWrapper</span>
- <span class="sd"> >>> env = gym.make("MiniGrid-Empty-5x5-v0")</span>
- <span class="sd"> >>> _ = env.reset(seed=123)</span>
- <span class="sd"> >>> [env.np_random.integers(10) for i in range(10)]</span>
- <span class="sd"> [0, 6, 5, 0, 9, 2, 2, 1, 3, 1]</span>
- <span class="sd"> >>> env = ReseedWrapper(env, seeds=[0, 1], seed_idx=0)</span>
- <span class="sd"> >>> _, _ = env.reset()</span>
- <span class="sd"> >>> [env.np_random.integers(10) for i in range(10)]</span>
- <span class="sd"> [8, 6, 5, 2, 3, 0, 0, 0, 1, 8]</span>
- <span class="sd"> >>> _, _ = env.reset()</span>
- <span class="sd"> >>> [env.np_random.integers(10) for i in range(10)]</span>
- <span class="sd"> [4, 5, 7, 9, 0, 1, 8, 9, 2, 3]</span>
- <span class="sd"> >>> _, _ = env.reset()</span>
- <span class="sd"> >>> [env.np_random.integers(10) for i in range(10)]</span>
- <span class="sd"> [8, 6, 5, 2, 3, 0, 0, 0, 1, 8]</span>
- <span class="sd"> >>> _, _ = env.reset()</span>
- <span class="sd"> >>> [env.np_random.integers(10) for i in range(10)]</span>
- <span class="sd"> [4, 5, 7, 9, 0, 1, 8, 9, 2, 3]</span>
- <span class="sd"> """</span>
- <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">env</span><span class="p">,</span> <span class="n">seeds</span><span class="o">=</span><span class="p">(</span><span class="mi">0</span><span class="p">,),</span> <span class="n">seed_idx</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
- <span class="w"> </span><span class="sd">"""A wrapper that always regenerate an environment with the same set of seeds.</span>
- <span class="sd"> Args:</span>
- <span class="sd"> env: The environment to apply the wrapper</span>
- <span class="sd"> seeds: A list of seed to be applied to the env</span>
- <span class="sd"> seed_idx: Index of the initial seed in seeds</span>
- <span class="sd"> """</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">seeds</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">seeds</span><span class="p">)</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">seed_idx</span> <span class="o">=</span> <span class="n">seed_idx</span>
- <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">env</span><span class="p">)</span>
- <span class="k">def</span> <span class="nf">reset</span><span class="p">(</span>
- <span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="p">,</span> <span class="n">seed</span><span class="p">:</span> <span class="nb">int</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">options</span><span class="p">:</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span>
- <span class="p">)</span> <span class="o">-></span> <span class="nb">tuple</span><span class="p">[</span><span class="n">ObsType</span><span class="p">,</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]]:</span>
- <span class="k">if</span> <span class="n">seed</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
- <span class="n">logger</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span>
- <span class="s2">"A seed has been passed to `ReseedWrapper.reset` which is ignored."</span>
- <span class="p">)</span>
- <span class="n">seed</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seeds</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">seed_idx</span><span class="p">]</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">seed_idx</span> <span class="o">=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">seed_idx</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">%</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">seeds</span><span class="p">)</span>
- <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="o">.</span><span class="n">reset</span><span class="p">(</span><span class="n">seed</span><span class="o">=</span><span class="n">seed</span><span class="p">,</span> <span class="n">options</span><span class="o">=</span><span class="n">options</span><span class="p">)</span></div>
- <div class="viewcode-block" id="ActionBonus">
- <a class="viewcode-back" href="../../../api/wrappers/#minigrid.wrappers.ActionBonus">[docs]</a>
- <span class="k">class</span> <span class="nc">ActionBonus</span><span class="p">(</span><span class="n">gym</span><span class="o">.</span><span class="n">Wrapper</span><span class="p">):</span>
- <span class="w"> </span><span class="sd">"""</span>
- <span class="sd"> Wrapper which adds an exploration bonus.</span>
- <span class="sd"> This is a reward to encourage exploration of less</span>
- <span class="sd"> visited (state,action) pairs.</span>
- <span class="sd"> Example:</span>
- <span class="sd"> >>> import gymnasium as gym</span>
- <span class="sd"> >>> from minigrid.wrappers import ActionBonus</span>
- <span class="sd"> >>> env = gym.make("MiniGrid-Empty-5x5-v0")</span>
- <span class="sd"> >>> _, _ = env.reset(seed=0)</span>
- <span class="sd"> >>> _, reward, _, _, _ = env.step(1)</span>
- <span class="sd"> >>> print(reward)</span>
- <span class="sd"> 0</span>
- <span class="sd"> >>> _, reward, _, _, _ = env.step(1)</span>
- <span class="sd"> >>> print(reward)</span>
- <span class="sd"> 0</span>
- <span class="sd"> >>> env_bonus = ActionBonus(env)</span>
- <span class="sd"> >>> _, _ = env_bonus.reset(seed=0)</span>
- <span class="sd"> >>> _, reward, _, _, _ = env_bonus.step(1)</span>
- <span class="sd"> >>> print(reward)</span>
- <span class="sd"> 1.0</span>
- <span class="sd"> >>> _, reward, _, _, _ = env_bonus.step(1)</span>
- <span class="sd"> >>> print(reward)</span>
- <span class="sd"> 1.0</span>
- <span class="sd"> """</span>
- <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">env</span><span class="p">):</span>
- <span class="w"> </span><span class="sd">"""A wrapper that adds an exploration bonus to less visited (state,action) pairs.</span>
- <span class="sd"> Args:</span>
- <span class="sd"> env: The environment to apply the wrapper</span>
- <span class="sd"> """</span>
- <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">env</span><span class="p">)</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">counts</span> <span class="o">=</span> <span class="p">{}</span>
- <span class="k">def</span> <span class="nf">step</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">action</span><span class="p">):</span>
- <span class="w"> </span><span class="sd">"""Steps through the environment with `action`."""</span>
- <span class="n">obs</span><span class="p">,</span> <span class="n">reward</span><span class="p">,</span> <span class="n">terminated</span><span class="p">,</span> <span class="n">truncated</span><span class="p">,</span> <span class="n">info</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="o">.</span><span class="n">step</span><span class="p">(</span><span class="n">action</span><span class="p">)</span>
- <span class="n">env</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">unwrapped</span>
- <span class="n">tup</span> <span class="o">=</span> <span class="p">(</span><span class="nb">tuple</span><span class="p">(</span><span class="n">env</span><span class="o">.</span><span class="n">agent_pos</span><span class="p">),</span> <span class="n">env</span><span class="o">.</span><span class="n">agent_dir</span><span class="p">,</span> <span class="n">action</span><span class="p">)</span>
- <span class="c1"># Get the count for this (s,a) pair</span>
- <span class="n">pre_count</span> <span class="o">=</span> <span class="mi">0</span>
- <span class="k">if</span> <span class="n">tup</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">counts</span><span class="p">:</span>
- <span class="n">pre_count</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">counts</span><span class="p">[</span><span class="n">tup</span><span class="p">]</span>
- <span class="c1"># Update the count for this (s,a) pair</span>
- <span class="n">new_count</span> <span class="o">=</span> <span class="n">pre_count</span> <span class="o">+</span> <span class="mi">1</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">counts</span><span class="p">[</span><span class="n">tup</span><span class="p">]</span> <span class="o">=</span> <span class="n">new_count</span>
- <span class="n">bonus</span> <span class="o">=</span> <span class="mi">1</span> <span class="o">/</span> <span class="n">math</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">new_count</span><span class="p">)</span>
- <span class="n">reward</span> <span class="o">+=</span> <span class="n">bonus</span>
- <span class="k">return</span> <span class="n">obs</span><span class="p">,</span> <span class="n">reward</span><span class="p">,</span> <span class="n">terminated</span><span class="p">,</span> <span class="n">truncated</span><span class="p">,</span> <span class="n">info</span></div>
- <div class="viewcode-block" id="PositionBonus">
- <a class="viewcode-back" href="../../../api/wrappers/#minigrid.wrappers.PositionBonus">[docs]</a>
- <span class="k">class</span> <span class="nc">PositionBonus</span><span class="p">(</span><span class="n">Wrapper</span><span class="p">):</span>
- <span class="w"> </span><span class="sd">"""</span>
- <span class="sd"> Adds an exploration bonus based on which positions</span>
- <span class="sd"> are visited on the grid.</span>
- <span class="sd"> Note:</span>
- <span class="sd"> This wrapper was previously called ``StateBonus``.</span>
- <span class="sd"> Example:</span>
- <span class="sd"> >>> import gymnasium as gym</span>
- <span class="sd"> >>> from minigrid.wrappers import PositionBonus</span>
- <span class="sd"> >>> env = gym.make("MiniGrid-Empty-5x5-v0")</span>
- <span class="sd"> >>> _, _ = env.reset(seed=0)</span>
- <span class="sd"> >>> _, reward, _, _, _ = env.step(1)</span>
- <span class="sd"> >>> print(reward)</span>
- <span class="sd"> 0</span>
- <span class="sd"> >>> _, reward, _, _, _ = env.step(1)</span>
- <span class="sd"> >>> print(reward)</span>
- <span class="sd"> 0</span>
- <span class="sd"> >>> env_bonus = PositionBonus(env)</span>
- <span class="sd"> >>> obs, _ = env_bonus.reset(seed=0)</span>
- <span class="sd"> >>> obs, reward, terminated, truncated, info = env_bonus.step(1)</span>
- <span class="sd"> >>> print(reward)</span>
- <span class="sd"> 1.0</span>
- <span class="sd"> >>> obs, reward, terminated, truncated, info = env_bonus.step(1)</span>
- <span class="sd"> >>> print(reward)</span>
- <span class="sd"> 0.7071067811865475</span>
- <span class="sd"> """</span>
- <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">env</span><span class="p">):</span>
- <span class="w"> </span><span class="sd">"""A wrapper that adds an exploration bonus to less visited positions.</span>
- <span class="sd"> Args:</span>
- <span class="sd"> env: The environment to apply the wrapper</span>
- <span class="sd"> """</span>
- <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">env</span><span class="p">)</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">counts</span> <span class="o">=</span> <span class="p">{}</span>
- <span class="k">def</span> <span class="nf">step</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">action</span><span class="p">):</span>
- <span class="w"> </span><span class="sd">"""Steps through the environment with `action`."""</span>
- <span class="n">obs</span><span class="p">,</span> <span class="n">reward</span><span class="p">,</span> <span class="n">terminated</span><span class="p">,</span> <span class="n">truncated</span><span class="p">,</span> <span class="n">info</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="o">.</span><span class="n">step</span><span class="p">(</span><span class="n">action</span><span class="p">)</span>
- <span class="c1"># Tuple based on which we index the counts</span>
- <span class="c1"># We use the position after an update</span>
- <span class="n">env</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">unwrapped</span>
- <span class="n">tup</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">env</span><span class="o">.</span><span class="n">agent_pos</span><span class="p">)</span>
- <span class="c1"># Get the count for this key</span>
- <span class="n">pre_count</span> <span class="o">=</span> <span class="mi">0</span>
- <span class="k">if</span> <span class="n">tup</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">counts</span><span class="p">:</span>
- <span class="n">pre_count</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">counts</span><span class="p">[</span><span class="n">tup</span><span class="p">]</span>
- <span class="c1"># Update the count for this key</span>
- <span class="n">new_count</span> <span class="o">=</span> <span class="n">pre_count</span> <span class="o">+</span> <span class="mi">1</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">counts</span><span class="p">[</span><span class="n">tup</span><span class="p">]</span> <span class="o">=</span> <span class="n">new_count</span>
- <span class="n">bonus</span> <span class="o">=</span> <span class="mi">1</span> <span class="o">/</span> <span class="n">math</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">new_count</span><span class="p">)</span>
- <span class="n">reward</span> <span class="o">+=</span> <span class="n">bonus</span>
- <span class="k">return</span> <span class="n">obs</span><span class="p">,</span> <span class="n">reward</span><span class="p">,</span> <span class="n">terminated</span><span class="p">,</span> <span class="n">truncated</span><span class="p">,</span> <span class="n">info</span></div>
- <div class="viewcode-block" id="ImgObsWrapper">
- <a class="viewcode-back" href="../../../api/wrappers/#minigrid.wrappers.ImgObsWrapper">[docs]</a>
- <span class="k">class</span> <span class="nc">ImgObsWrapper</span><span class="p">(</span><span class="n">ObservationWrapper</span><span class="p">):</span>
- <span class="w"> </span><span class="sd">"""</span>
- <span class="sd"> Use the image as the only observation output, no language/mission.</span>
- <span class="sd"> Example:</span>
- <span class="sd"> >>> import gymnasium as gym</span>
- <span class="sd"> >>> from minigrid.wrappers import ImgObsWrapper</span>
- <span class="sd"> >>> env = gym.make("MiniGrid-Empty-5x5-v0")</span>
- <span class="sd"> >>> obs, _ = env.reset()</span>
- <span class="sd"> >>> obs.keys()</span>
- <span class="sd"> dict_keys(['image', 'direction', 'mission'])</span>
- <span class="sd"> >>> env = ImgObsWrapper(env)</span>
- <span class="sd"> >>> obs, _ = env.reset()</span>
- <span class="sd"> >>> obs.shape</span>
- <span class="sd"> (7, 7, 3)</span>
- <span class="sd"> """</span>
- <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">env</span><span class="p">):</span>
- <span class="w"> </span><span class="sd">"""A wrapper that makes image the only observation.</span>
- <span class="sd"> Args:</span>
- <span class="sd"> env: The environment to apply the wrapper</span>
- <span class="sd"> """</span>
- <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">env</span><span class="p">)</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">observation_space</span> <span class="o">=</span> <span class="n">env</span><span class="o">.</span><span class="n">observation_space</span><span class="o">.</span><span class="n">spaces</span><span class="p">[</span><span class="s2">"image"</span><span class="p">]</span>
- <span class="k">def</span> <span class="nf">observation</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obs</span><span class="p">):</span>
- <span class="k">return</span> <span class="n">obs</span><span class="p">[</span><span class="s2">"image"</span><span class="p">]</span></div>
- <div class="viewcode-block" id="OneHotPartialObsWrapper">
- <a class="viewcode-back" href="../../../api/wrappers/#minigrid.wrappers.OneHotPartialObsWrapper">[docs]</a>
- <span class="k">class</span> <span class="nc">OneHotPartialObsWrapper</span><span class="p">(</span><span class="n">ObservationWrapper</span><span class="p">):</span>
- <span class="w"> </span><span class="sd">"""</span>
- <span class="sd"> Wrapper to get a one-hot encoding of a partially observable</span>
- <span class="sd"> agent view as observation.</span>
- <span class="sd"> Example:</span>
- <span class="sd"> >>> import gymnasium as gym</span>
- <span class="sd"> >>> from minigrid.wrappers import OneHotPartialObsWrapper</span>
- <span class="sd"> >>> env = gym.make("MiniGrid-Empty-5x5-v0")</span>
- <span class="sd"> >>> obs, _ = env.reset()</span>
- <span class="sd"> >>> obs["image"][0, :, :]</span>
- <span class="sd"> array([[2, 5, 0],</span>
- <span class="sd"> [2, 5, 0],</span>
- <span class="sd"> [2, 5, 0],</span>
- <span class="sd"> [2, 5, 0],</span>
- <span class="sd"> [2, 5, 0],</span>
- <span class="sd"> [2, 5, 0],</span>
- <span class="sd"> [2, 5, 0]], dtype=uint8)</span>
- <span class="sd"> >>> env = OneHotPartialObsWrapper(env)</span>
- <span class="sd"> >>> obs, _ = env.reset()</span>
- <span class="sd"> >>> obs["image"][0, :, :]</span>
- <span class="sd"> array([[0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0],</span>
- <span class="sd"> [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0],</span>
- <span class="sd"> [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0],</span>
- <span class="sd"> [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0],</span>
- <span class="sd"> [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0],</span>
- <span class="sd"> [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0],</span>
- <span class="sd"> [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0]],</span>
- <span class="sd"> dtype=uint8)</span>
- <span class="sd"> """</span>
- <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">env</span><span class="p">,</span> <span class="n">tile_size</span><span class="o">=</span><span class="mi">8</span><span class="p">):</span>
- <span class="w"> </span><span class="sd">"""A wrapper that makes the image observation a one-hot encoding of a partially observable agent view.</span>
- <span class="sd"> Args:</span>
- <span class="sd"> env: The environment to apply the wrapper</span>
- <span class="sd"> """</span>
- <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">env</span><span class="p">)</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">tile_size</span> <span class="o">=</span> <span class="n">tile_size</span>
- <span class="n">obs_shape</span> <span class="o">=</span> <span class="n">env</span><span class="o">.</span><span class="n">observation_space</span><span class="p">[</span><span class="s2">"image"</span><span class="p">]</span><span class="o">.</span><span class="n">shape</span>
- <span class="c1"># Number of bits per cell</span>
- <span class="n">num_bits</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">OBJECT_TO_IDX</span><span class="p">)</span> <span class="o">+</span> <span class="nb">len</span><span class="p">(</span><span class="n">COLOR_TO_IDX</span><span class="p">)</span> <span class="o">+</span> <span class="nb">len</span><span class="p">(</span><span class="n">STATE_TO_IDX</span><span class="p">)</span>
- <span class="n">new_image_space</span> <span class="o">=</span> <span class="n">spaces</span><span class="o">.</span><span class="n">Box</span><span class="p">(</span>
- <span class="n">low</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">high</span><span class="o">=</span><span class="mi">255</span><span class="p">,</span> <span class="n">shape</span><span class="o">=</span><span class="p">(</span><span class="n">obs_shape</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">obs_shape</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">num_bits</span><span class="p">),</span> <span class="n">dtype</span><span class="o">=</span><span class="s2">"uint8"</span>
- <span class="p">)</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">observation_space</span> <span class="o">=</span> <span class="n">spaces</span><span class="o">.</span><span class="n">Dict</span><span class="p">(</span>
- <span class="p">{</span><span class="o">**</span><span class="bp">self</span><span class="o">.</span><span class="n">observation_space</span><span class="o">.</span><span class="n">spaces</span><span class="p">,</span> <span class="s2">"image"</span><span class="p">:</span> <span class="n">new_image_space</span><span class="p">}</span>
- <span class="p">)</span>
- <span class="k">def</span> <span class="nf">observation</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obs</span><span class="p">):</span>
- <span class="n">img</span> <span class="o">=</span> <span class="n">obs</span><span class="p">[</span><span class="s2">"image"</span><span class="p">]</span>
- <span class="n">out</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">observation_space</span><span class="o">.</span><span class="n">spaces</span><span class="p">[</span><span class="s2">"image"</span><span class="p">]</span><span class="o">.</span><span class="n">shape</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="s2">"uint8"</span><span class="p">)</span>
- <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">img</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]):</span>
- <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">img</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">1</span><span class="p">]):</span>
- <span class="nb">type</span> <span class="o">=</span> <span class="n">img</span><span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">,</span> <span class="mi">0</span><span class="p">]</span>
- <span class="n">color</span> <span class="o">=</span> <span class="n">img</span><span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">,</span> <span class="mi">1</span><span class="p">]</span>
- <span class="n">state</span> <span class="o">=</span> <span class="n">img</span><span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">,</span> <span class="mi">2</span><span class="p">]</span>
- <span class="n">out</span><span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">,</span> <span class="nb">type</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span>
- <span class="n">out</span><span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">OBJECT_TO_IDX</span><span class="p">)</span> <span class="o">+</span> <span class="n">color</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span>
- <span class="n">out</span><span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">OBJECT_TO_IDX</span><span class="p">)</span> <span class="o">+</span> <span class="nb">len</span><span class="p">(</span><span class="n">COLOR_TO_IDX</span><span class="p">)</span> <span class="o">+</span> <span class="n">state</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span>
- <span class="k">return</span> <span class="p">{</span><span class="o">**</span><span class="n">obs</span><span class="p">,</span> <span class="s2">"image"</span><span class="p">:</span> <span class="n">out</span><span class="p">}</span></div>
- <div class="viewcode-block" id="RGBImgObsWrapper">
- <a class="viewcode-back" href="../../../api/wrappers/#minigrid.wrappers.RGBImgObsWrapper">[docs]</a>
- <span class="k">class</span> <span class="nc">RGBImgObsWrapper</span><span class="p">(</span><span class="n">ObservationWrapper</span><span class="p">):</span>
- <span class="w"> </span><span class="sd">"""</span>
- <span class="sd"> Wrapper to use fully observable RGB image as observation,</span>
- <span class="sd"> This can be used to have the agent to solve the gridworld in pixel space.</span>
- <span class="sd"> Example:</span>
- <span class="sd"> >>> import gymnasium as gym</span>
- <span class="sd"> >>> import matplotlib.pyplot as plt</span>
- <span class="sd"> >>> from minigrid.wrappers import RGBImgObsWrapper</span>
- <span class="sd"> >>> env = gym.make("MiniGrid-Empty-5x5-v0")</span>
- <span class="sd"> >>> obs, _ = env.reset()</span>
- <span class="sd"> >>> plt.imshow(obs['image']) # doctest: +SKIP</span>
- <span class="sd"> </span>
- <span class="sd"> >>> env = RGBImgObsWrapper(env)</span>
- <span class="sd"> >>> obs, _ = env.reset()</span>
- <span class="sd"> >>> plt.imshow(obs['image']) # doctest: +SKIP</span>
- <span class="sd"> </span>
- <span class="sd"> """</span>
- <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">env</span><span class="p">,</span> <span class="n">tile_size</span><span class="o">=</span><span class="mi">8</span><span class="p">):</span>
- <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">env</span><span class="p">)</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">tile_size</span> <span class="o">=</span> <span class="n">tile_size</span>
- <span class="n">new_image_space</span> <span class="o">=</span> <span class="n">spaces</span><span class="o">.</span><span class="n">Box</span><span class="p">(</span>
- <span class="n">low</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
- <span class="n">high</span><span class="o">=</span><span class="mi">255</span><span class="p">,</span>
- <span class="n">shape</span><span class="o">=</span><span class="p">(</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">unwrapped</span><span class="o">.</span><span class="n">width</span> <span class="o">*</span> <span class="n">tile_size</span><span class="p">,</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">unwrapped</span><span class="o">.</span><span class="n">height</span> <span class="o">*</span> <span class="n">tile_size</span><span class="p">,</span>
- <span class="mi">3</span><span class="p">,</span>
- <span class="p">),</span>
- <span class="n">dtype</span><span class="o">=</span><span class="s2">"uint8"</span><span class="p">,</span>
- <span class="p">)</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">observation_space</span> <span class="o">=</span> <span class="n">spaces</span><span class="o">.</span><span class="n">Dict</span><span class="p">(</span>
- <span class="p">{</span><span class="o">**</span><span class="bp">self</span><span class="o">.</span><span class="n">observation_space</span><span class="o">.</span><span class="n">spaces</span><span class="p">,</span> <span class="s2">"image"</span><span class="p">:</span> <span class="n">new_image_space</span><span class="p">}</span>
- <span class="p">)</span>
- <span class="k">def</span> <span class="nf">observation</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obs</span><span class="p">):</span>
- <span class="n">rgb_img</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_frame</span><span class="p">(</span>
- <span class="n">highlight</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">unwrapped</span><span class="o">.</span><span class="n">highlight</span><span class="p">,</span> <span class="n">tile_size</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">tile_size</span>
- <span class="p">)</span>
- <span class="k">return</span> <span class="p">{</span><span class="o">**</span><span class="n">obs</span><span class="p">,</span> <span class="s2">"image"</span><span class="p">:</span> <span class="n">rgb_img</span><span class="p">}</span></div>
- <div class="viewcode-block" id="RGBImgPartialObsWrapper">
- <a class="viewcode-back" href="../../../api/wrappers/#minigrid.wrappers.RGBImgPartialObsWrapper">[docs]</a>
- <span class="k">class</span> <span class="nc">RGBImgPartialObsWrapper</span><span class="p">(</span><span class="n">ObservationWrapper</span><span class="p">):</span>
- <span class="w"> </span><span class="sd">"""</span>
- <span class="sd"> Wrapper to use partially observable RGB image as observation.</span>
- <span class="sd"> This can be used to have the agent to solve the gridworld in pixel space.</span>
- <span class="sd"> Example:</span>
- <span class="sd"> >>> import gymnasium as gym</span>
- <span class="sd"> >>> import matplotlib.pyplot as plt</span>
- <span class="sd"> >>> from minigrid.wrappers import RGBImgObsWrapper, RGBImgPartialObsWrapper</span>
- <span class="sd"> >>> env = gym.make("MiniGrid-LavaCrossingS11N5-v0")</span>
- <span class="sd"> >>> obs, _ = env.reset()</span>
- <span class="sd"> >>> plt.imshow(obs["image"]) # doctest: +SKIP</span>
- <span class="sd"> </span>
- <span class="sd"> >>> env_obs = RGBImgObsWrapper(env)</span>
- <span class="sd"> >>> obs, _ = env_obs.reset()</span>
- <span class="sd"> >>> plt.imshow(obs["image"]) # doctest: +SKIP</span>
- <span class="sd"> </span>
- <span class="sd"> >>> env_obs = RGBImgPartialObsWrapper(env)</span>
- <span class="sd"> >>> obs, _ = env_obs.reset()</span>
- <span class="sd"> >>> plt.imshow(obs["image"]) # doctest: +SKIP</span>
- <span class="sd"> </span>
- <span class="sd"> """</span>
- <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">env</span><span class="p">,</span> <span class="n">tile_size</span><span class="o">=</span><span class="mi">8</span><span class="p">):</span>
- <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">env</span><span class="p">)</span>
- <span class="c1"># Rendering attributes for observations</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">tile_size</span> <span class="o">=</span> <span class="n">tile_size</span>
- <span class="n">obs_shape</span> <span class="o">=</span> <span class="n">env</span><span class="o">.</span><span class="n">observation_space</span><span class="o">.</span><span class="n">spaces</span><span class="p">[</span><span class="s2">"image"</span><span class="p">]</span><span class="o">.</span><span class="n">shape</span>
- <span class="n">new_image_space</span> <span class="o">=</span> <span class="n">spaces</span><span class="o">.</span><span class="n">Box</span><span class="p">(</span>
- <span class="n">low</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
- <span class="n">high</span><span class="o">=</span><span class="mi">255</span><span class="p">,</span>
- <span class="n">shape</span><span class="o">=</span><span class="p">(</span><span class="n">obs_shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">*</span> <span class="n">tile_size</span><span class="p">,</span> <span class="n">obs_shape</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">*</span> <span class="n">tile_size</span><span class="p">,</span> <span class="mi">3</span><span class="p">),</span>
- <span class="n">dtype</span><span class="o">=</span><span class="s2">"uint8"</span><span class="p">,</span>
- <span class="p">)</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">observation_space</span> <span class="o">=</span> <span class="n">spaces</span><span class="o">.</span><span class="n">Dict</span><span class="p">(</span>
- <span class="p">{</span><span class="o">**</span><span class="bp">self</span><span class="o">.</span><span class="n">observation_space</span><span class="o">.</span><span class="n">spaces</span><span class="p">,</span> <span class="s2">"image"</span><span class="p">:</span> <span class="n">new_image_space</span><span class="p">}</span>
- <span class="p">)</span>
- <span class="k">def</span> <span class="nf">observation</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obs</span><span class="p">):</span>
- <span class="n">rgb_img_partial</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_frame</span><span class="p">(</span><span class="n">tile_size</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">tile_size</span><span class="p">,</span> <span class="n">agent_pov</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
- <span class="k">return</span> <span class="p">{</span><span class="o">**</span><span class="n">obs</span><span class="p">,</span> <span class="s2">"image"</span><span class="p">:</span> <span class="n">rgb_img_partial</span><span class="p">}</span></div>
- <div class="viewcode-block" id="FullyObsWrapper">
- <a class="viewcode-back" href="../../../api/wrappers/#minigrid.wrappers.FullyObsWrapper">[docs]</a>
- <span class="k">class</span> <span class="nc">FullyObsWrapper</span><span class="p">(</span><span class="n">ObservationWrapper</span><span class="p">):</span>
- <span class="w"> </span><span class="sd">"""</span>
- <span class="sd"> Fully observable gridworld using a compact grid encoding instead of the agent view.</span>
- <span class="sd"> Example:</span>
- <span class="sd"> >>> import gymnasium as gym</span>
- <span class="sd"> >>> import matplotlib.pyplot as plt</span>
- <span class="sd"> >>> from minigrid.wrappers import FullyObsWrapper</span>
- <span class="sd"> >>> env = gym.make("MiniGrid-LavaCrossingS11N5-v0")</span>
- <span class="sd"> >>> obs, _ = env.reset()</span>
- <span class="sd"> >>> obs['image'].shape</span>
- <span class="sd"> (7, 7, 3)</span>
- <span class="sd"> >>> env_obs = FullyObsWrapper(env)</span>
- <span class="sd"> >>> obs, _ = env_obs.reset()</span>
- <span class="sd"> >>> obs['image'].shape</span>
- <span class="sd"> (11, 11, 3)</span>
- <span class="sd"> """</span>
- <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">env</span><span class="p">):</span>
- <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">env</span><span class="p">)</span>
- <span class="n">new_image_space</span> <span class="o">=</span> <span class="n">spaces</span><span class="o">.</span><span class="n">Box</span><span class="p">(</span>
- <span class="n">low</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
- <span class="n">high</span><span class="o">=</span><span class="mi">255</span><span class="p">,</span>
- <span class="n">shape</span><span class="o">=</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="o">.</span><span class="n">width</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="o">.</span><span class="n">height</span><span class="p">,</span> <span class="mi">3</span><span class="p">),</span> <span class="c1"># number of cells</span>
- <span class="n">dtype</span><span class="o">=</span><span class="s2">"uint8"</span><span class="p">,</span>
- <span class="p">)</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">observation_space</span> <span class="o">=</span> <span class="n">spaces</span><span class="o">.</span><span class="n">Dict</span><span class="p">(</span>
- <span class="p">{</span><span class="o">**</span><span class="bp">self</span><span class="o">.</span><span class="n">observation_space</span><span class="o">.</span><span class="n">spaces</span><span class="p">,</span> <span class="s2">"image"</span><span class="p">:</span> <span class="n">new_image_space</span><span class="p">}</span>
- <span class="p">)</span>
- <span class="k">def</span> <span class="nf">observation</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obs</span><span class="p">):</span>
- <span class="n">env</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">unwrapped</span>
- <span class="n">full_grid</span> <span class="o">=</span> <span class="n">env</span><span class="o">.</span><span class="n">grid</span><span class="o">.</span><span class="n">encode</span><span class="p">()</span>
- <span class="n">full_grid</span><span class="p">[</span><span class="n">env</span><span class="o">.</span><span class="n">agent_pos</span><span class="p">[</span><span class="mi">0</span><span class="p">]][</span><span class="n">env</span><span class="o">.</span><span class="n">agent_pos</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span>
- <span class="p">[</span><span class="n">OBJECT_TO_IDX</span><span class="p">[</span><span class="s2">"agent"</span><span class="p">],</span> <span class="n">COLOR_TO_IDX</span><span class="p">[</span><span class="s2">"red"</span><span class="p">],</span> <span class="n">env</span><span class="o">.</span><span class="n">agent_dir</span><span class="p">]</span>
- <span class="p">)</span>
- <span class="k">return</span> <span class="p">{</span><span class="o">**</span><span class="n">obs</span><span class="p">,</span> <span class="s2">"image"</span><span class="p">:</span> <span class="n">full_grid</span><span class="p">}</span></div>
- <div class="viewcode-block" id="DictObservationSpaceWrapper">
- <a class="viewcode-back" href="../../../api/wrappers/#minigrid.wrappers.DictObservationSpaceWrapper">[docs]</a>
- <span class="k">class</span> <span class="nc">DictObservationSpaceWrapper</span><span class="p">(</span><span class="n">ObservationWrapper</span><span class="p">):</span>
- <span class="w"> </span><span class="sd">"""</span>
- <span class="sd"> Transforms the observation space (that has a textual component) to a fully numerical observation space,</span>
- <span class="sd"> where the textual instructions are replaced by arrays representing the indices of each word in a fixed vocabulary.</span>
- <span class="sd"> This wrapper is not applicable to BabyAI environments, given that these have their own language component.</span>
- <span class="sd"> Example:</span>
- <span class="sd"> >>> import gymnasium as gym</span>
- <span class="sd"> >>> import matplotlib.pyplot as plt</span>
- <span class="sd"> >>> from minigrid.wrappers import DictObservationSpaceWrapper</span>
- <span class="sd"> >>> env = gym.make("MiniGrid-LavaCrossingS11N5-v0")</span>
- <span class="sd"> >>> obs, _ = env.reset()</span>
- <span class="sd"> >>> obs['mission']</span>
- <span class="sd"> 'avoid the lava and get to the green goal square'</span>
- <span class="sd"> >>> env_obs = DictObservationSpaceWrapper(env)</span>
- <span class="sd"> >>> obs, _ = env_obs.reset()</span>
- <span class="sd"> >>> obs['mission'][:10]</span>
- <span class="sd"> [19, 31, 17, 36, 20, 38, 31, 2, 15, 35]</span>
- <span class="sd"> """</span>
- <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">env</span><span class="p">,</span> <span class="n">max_words_in_mission</span><span class="o">=</span><span class="mi">50</span><span class="p">,</span> <span class="n">word_dict</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
- <span class="w"> </span><span class="sd">"""</span>
- <span class="sd"> max_words_in_mission is the length of the array to represent a mission, value 0 for missing words</span>
- <span class="sd"> word_dict is a dictionary of words to use (keys=words, values=indices from 1 to < max_words_in_mission),</span>
- <span class="sd"> if None, use the Minigrid language</span>
- <span class="sd"> """</span>
- <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">env</span><span class="p">)</span>
- <span class="k">if</span> <span class="n">word_dict</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
- <span class="n">word_dict</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_minigrid_words</span><span class="p">()</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">max_words_in_mission</span> <span class="o">=</span> <span class="n">max_words_in_mission</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">word_dict</span> <span class="o">=</span> <span class="n">word_dict</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">observation_space</span> <span class="o">=</span> <span class="n">spaces</span><span class="o">.</span><span class="n">Dict</span><span class="p">(</span>
- <span class="p">{</span>
- <span class="s2">"image"</span><span class="p">:</span> <span class="n">env</span><span class="o">.</span><span class="n">observation_space</span><span class="p">[</span><span class="s2">"image"</span><span class="p">],</span>
- <span class="s2">"direction"</span><span class="p">:</span> <span class="n">spaces</span><span class="o">.</span><span class="n">Discrete</span><span class="p">(</span><span class="mi">4</span><span class="p">),</span>
- <span class="s2">"mission"</span><span class="p">:</span> <span class="n">spaces</span><span class="o">.</span><span class="n">MultiDiscrete</span><span class="p">(</span>
- <span class="p">[</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">word_dict</span><span class="o">.</span><span class="n">keys</span><span class="p">())]</span> <span class="o">*</span> <span class="n">max_words_in_mission</span>
- <span class="p">),</span>
- <span class="p">}</span>
- <span class="p">)</span>
- <span class="nd">@staticmethod</span>
- <span class="k">def</span> <span class="nf">get_minigrid_words</span><span class="p">():</span>
- <span class="n">colors</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"red"</span><span class="p">,</span> <span class="s2">"green"</span><span class="p">,</span> <span class="s2">"blue"</span><span class="p">,</span> <span class="s2">"yellow"</span><span class="p">,</span> <span class="s2">"purple"</span><span class="p">,</span> <span class="s2">"grey"</span><span class="p">]</span>
- <span class="n">objects</span> <span class="o">=</span> <span class="p">[</span>
- <span class="s2">"unseen"</span><span class="p">,</span>
- <span class="s2">"empty"</span><span class="p">,</span>
- <span class="s2">"wall"</span><span class="p">,</span>
- <span class="s2">"floor"</span><span class="p">,</span>
- <span class="s2">"box"</span><span class="p">,</span>
- <span class="s2">"key"</span><span class="p">,</span>
- <span class="s2">"ball"</span><span class="p">,</span>
- <span class="s2">"door"</span><span class="p">,</span>
- <span class="s2">"goal"</span><span class="p">,</span>
- <span class="s2">"agent"</span><span class="p">,</span>
- <span class="s2">"lava"</span><span class="p">,</span>
- <span class="p">]</span>
- <span class="n">verbs</span> <span class="o">=</span> <span class="p">[</span>
- <span class="s2">"pick"</span><span class="p">,</span>
- <span class="s2">"avoid"</span><span class="p">,</span>
- <span class="s2">"get"</span><span class="p">,</span>
- <span class="s2">"find"</span><span class="p">,</span>
- <span class="s2">"put"</span><span class="p">,</span>
- <span class="s2">"use"</span><span class="p">,</span>
- <span class="s2">"open"</span><span class="p">,</span>
- <span class="s2">"go"</span><span class="p">,</span>
- <span class="s2">"fetch"</span><span class="p">,</span>
- <span class="s2">"reach"</span><span class="p">,</span>
- <span class="s2">"unlock"</span><span class="p">,</span>
- <span class="s2">"traverse"</span><span class="p">,</span>
- <span class="p">]</span>
- <span class="n">extra_words</span> <span class="o">=</span> <span class="p">[</span>
- <span class="s2">"up"</span><span class="p">,</span>
- <span class="s2">"the"</span><span class="p">,</span>
- <span class="s2">"a"</span><span class="p">,</span>
- <span class="s2">"at"</span><span class="p">,</span>
- <span class="s2">","</span><span class="p">,</span>
- <span class="s2">"square"</span><span class="p">,</span>
- <span class="s2">"and"</span><span class="p">,</span>
- <span class="s2">"then"</span><span class="p">,</span>
- <span class="s2">"to"</span><span class="p">,</span>
- <span class="s2">"of"</span><span class="p">,</span>
- <span class="s2">"rooms"</span><span class="p">,</span>
- <span class="s2">"near"</span><span class="p">,</span>
- <span class="s2">"opening"</span><span class="p">,</span>
- <span class="s2">"must"</span><span class="p">,</span>
- <span class="s2">"you"</span><span class="p">,</span>
- <span class="s2">"matching"</span><span class="p">,</span>
- <span class="s2">"end"</span><span class="p">,</span>
- <span class="s2">"hallway"</span><span class="p">,</span>
- <span class="s2">"object"</span><span class="p">,</span>
- <span class="s2">"from"</span><span class="p">,</span>
- <span class="s2">"room"</span><span class="p">,</span>
- <span class="s2">"maze"</span><span class="p">,</span>
- <span class="p">]</span>
- <span class="n">all_words</span> <span class="o">=</span> <span class="n">colors</span> <span class="o">+</span> <span class="n">objects</span> <span class="o">+</span> <span class="n">verbs</span> <span class="o">+</span> <span class="n">extra_words</span>
- <span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">all_words</span><span class="p">)</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">all_words</span><span class="p">))</span>
- <span class="k">return</span> <span class="p">{</span><span class="n">word</span><span class="p">:</span> <span class="n">i</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">word</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">all_words</span><span class="p">)}</span>
- <span class="k">def</span> <span class="nf">string_to_indices</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">string</span><span class="p">,</span> <span class="n">offset</span><span class="o">=</span><span class="mi">1</span><span class="p">):</span>
- <span class="w"> </span><span class="sd">"""</span>
- <span class="sd"> Convert a string to a list of indices.</span>
- <span class="sd"> """</span>
- <span class="n">indices</span> <span class="o">=</span> <span class="p">[]</span>
- <span class="c1"># adding space before and after commas</span>
- <span class="n">string</span> <span class="o">=</span> <span class="n">string</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">","</span><span class="p">,</span> <span class="s2">" , "</span><span class="p">)</span>
- <span class="k">for</span> <span class="n">word</span> <span class="ow">in</span> <span class="n">string</span><span class="o">.</span><span class="n">split</span><span class="p">():</span>
- <span class="k">if</span> <span class="n">word</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">word_dict</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
- <span class="n">indices</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">word_dict</span><span class="p">[</span><span class="n">word</span><span class="p">]</span> <span class="o">+</span> <span class="n">offset</span><span class="p">)</span>
- <span class="k">else</span><span class="p">:</span>
- <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Unknown word: </span><span class="si">{</span><span class="n">word</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
- <span class="k">return</span> <span class="n">indices</span>
- <span class="k">def</span> <span class="nf">observation</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obs</span><span class="p">):</span>
- <span class="n">obs</span><span class="p">[</span><span class="s2">"mission"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">string_to_indices</span><span class="p">(</span><span class="n">obs</span><span class="p">[</span><span class="s2">"mission"</span><span class="p">])</span>
- <span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">obs</span><span class="p">[</span><span class="s2">"mission"</span><span class="p">])</span> <span class="o"><</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_words_in_mission</span>
- <span class="n">obs</span><span class="p">[</span><span class="s2">"mission"</span><span class="p">]</span> <span class="o">+=</span> <span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">*</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">max_words_in_mission</span> <span class="o">-</span> <span class="nb">len</span><span class="p">(</span><span class="n">obs</span><span class="p">[</span><span class="s2">"mission"</span><span class="p">]))</span>
- <span class="k">return</span> <span class="n">obs</span></div>
- <div class="viewcode-block" id="FlatObsWrapper">
- <a class="viewcode-back" href="../../../api/wrappers/#minigrid.wrappers.FlatObsWrapper">[docs]</a>
- <span class="k">class</span> <span class="nc">FlatObsWrapper</span><span class="p">(</span><span class="n">ObservationWrapper</span><span class="p">):</span>
- <span class="w"> </span><span class="sd">"""</span>
- <span class="sd"> Encode mission strings using a one-hot scheme,</span>
- <span class="sd"> and combine these with observed images into one flat array.</span>
- <span class="sd"> This wrapper is not applicable to BabyAI environments, given that these have their own language component.</span>
- <span class="sd"> Example:</span>
- <span class="sd"> >>> import gymnasium as gym</span>
- <span class="sd"> >>> import matplotlib.pyplot as plt</span>
- <span class="sd"> >>> from minigrid.wrappers import FlatObsWrapper</span>
- <span class="sd"> >>> env = gym.make("MiniGrid-LavaCrossingS11N5-v0")</span>
- <span class="sd"> >>> env_obs = FlatObsWrapper(env)</span>
- <span class="sd"> >>> obs, _ = env_obs.reset()</span>
- <span class="sd"> >>> obs.shape</span>
- <span class="sd"> (2835,)</span>
- <span class="sd"> """</span>
- <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">env</span><span class="p">,</span> <span class="n">maxStrLen</span><span class="o">=</span><span class="mi">96</span><span class="p">):</span>
- <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">env</span><span class="p">)</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">maxStrLen</span> <span class="o">=</span> <span class="n">maxStrLen</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">numCharCodes</span> <span class="o">=</span> <span class="mi">28</span>
- <span class="n">imgSpace</span> <span class="o">=</span> <span class="n">env</span><span class="o">.</span><span class="n">observation_space</span><span class="o">.</span><span class="n">spaces</span><span class="p">[</span><span class="s2">"image"</span><span class="p">]</span>
- <span class="n">imgSize</span> <span class="o">=</span> <span class="n">reduce</span><span class="p">(</span><span class="n">operator</span><span class="o">.</span><span class="n">mul</span><span class="p">,</span> <span class="n">imgSpace</span><span class="o">.</span><span class="n">shape</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">observation_space</span> <span class="o">=</span> <span class="n">spaces</span><span class="o">.</span><span class="n">Box</span><span class="p">(</span>
- <span class="n">low</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
- <span class="n">high</span><span class="o">=</span><span class="mi">255</span><span class="p">,</span>
- <span class="n">shape</span><span class="o">=</span><span class="p">(</span><span class="n">imgSize</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">numCharCodes</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">maxStrLen</span><span class="p">,),</span>
- <span class="n">dtype</span><span class="o">=</span><span class="s2">"uint8"</span><span class="p">,</span>
- <span class="p">)</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">cachedStr</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="kc">None</span>
- <span class="k">def</span> <span class="nf">observation</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obs</span><span class="p">):</span>
- <span class="n">image</span> <span class="o">=</span> <span class="n">obs</span><span class="p">[</span><span class="s2">"image"</span><span class="p">]</span>
- <span class="n">mission</span> <span class="o">=</span> <span class="n">obs</span><span class="p">[</span><span class="s2">"mission"</span><span class="p">]</span>
- <span class="c1"># Cache the last-encoded mission string</span>
- <span class="k">if</span> <span class="n">mission</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">cachedStr</span><span class="p">:</span>
- <span class="k">assert</span> <span class="p">(</span>
- <span class="nb">len</span><span class="p">(</span><span class="n">mission</span><span class="p">)</span> <span class="o"><=</span> <span class="bp">self</span><span class="o">.</span><span class="n">maxStrLen</span>
- <span class="p">),</span> <span class="sa">f</span><span class="s2">"mission string too long (</span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">mission</span><span class="p">)</span><span class="si">}</span><span class="s2"> chars)"</span>
- <span class="n">mission</span> <span class="o">=</span> <span class="n">mission</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
- <span class="n">strArray</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span>
- <span class="n">shape</span><span class="o">=</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">maxStrLen</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">numCharCodes</span><span class="p">),</span> <span class="n">dtype</span><span class="o">=</span><span class="s2">"float32"</span>
- <span class="p">)</span>
- <span class="k">for</span> <span class="n">idx</span><span class="p">,</span> <span class="n">ch</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">mission</span><span class="p">):</span>
- <span class="k">if</span> <span class="n">ch</span> <span class="o">>=</span> <span class="s2">"a"</span> <span class="ow">and</span> <span class="n">ch</span> <span class="o"><=</span> <span class="s2">"z"</span><span class="p">:</span>
- <span class="n">chNo</span> <span class="o">=</span> <span class="nb">ord</span><span class="p">(</span><span class="n">ch</span><span class="p">)</span> <span class="o">-</span> <span class="nb">ord</span><span class="p">(</span><span class="s2">"a"</span><span class="p">)</span>
- <span class="k">elif</span> <span class="n">ch</span> <span class="o">==</span> <span class="s2">" "</span><span class="p">:</span>
- <span class="n">chNo</span> <span class="o">=</span> <span class="nb">ord</span><span class="p">(</span><span class="s2">"z"</span><span class="p">)</span> <span class="o">-</span> <span class="nb">ord</span><span class="p">(</span><span class="s2">"a"</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span>
- <span class="k">elif</span> <span class="n">ch</span> <span class="o">==</span> <span class="s2">","</span><span class="p">:</span>
- <span class="n">chNo</span> <span class="o">=</span> <span class="nb">ord</span><span class="p">(</span><span class="s2">"z"</span><span class="p">)</span> <span class="o">-</span> <span class="nb">ord</span><span class="p">(</span><span class="s2">"a"</span><span class="p">)</span> <span class="o">+</span> <span class="mi">2</span>
- <span class="k">else</span><span class="p">:</span>
- <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
- <span class="sa">f</span><span class="s2">"Character </span><span class="si">{</span><span class="n">ch</span><span class="si">}</span><span class="s2"> is not available in mission string."</span>
- <span class="p">)</span>
- <span class="k">assert</span> <span class="n">chNo</span> <span class="o"><</span> <span class="bp">self</span><span class="o">.</span><span class="n">numCharCodes</span><span class="p">,</span> <span class="s2">"</span><span class="si">%s</span><span class="s2"> : </span><span class="si">%d</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">ch</span><span class="p">,</span> <span class="n">chNo</span><span class="p">)</span>
- <span class="n">strArray</span><span class="p">[</span><span class="n">idx</span><span class="p">,</span> <span class="n">chNo</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">cachedStr</span> <span class="o">=</span> <span class="n">mission</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">cachedArray</span> <span class="o">=</span> <span class="n">strArray</span>
- <span class="n">obs</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">((</span><span class="n">image</span><span class="o">.</span><span class="n">flatten</span><span class="p">(),</span> <span class="bp">self</span><span class="o">.</span><span class="n">cachedArray</span><span class="o">.</span><span class="n">flatten</span><span class="p">()))</span>
- <span class="k">return</span> <span class="n">obs</span></div>
- <div class="viewcode-block" id="ViewSizeWrapper">
- <a class="viewcode-back" href="../../../api/wrappers/#minigrid.wrappers.ViewSizeWrapper">[docs]</a>
- <span class="k">class</span> <span class="nc">ViewSizeWrapper</span><span class="p">(</span><span class="n">ObservationWrapper</span><span class="p">):</span>
- <span class="w"> </span><span class="sd">"""</span>
- <span class="sd"> Wrapper to customize the agent field of view size.</span>
- <span class="sd"> This cannot be used with fully observable wrappers.</span>
- <span class="sd"> Example:</span>
- <span class="sd"> >>> import gymnasium as gym</span>
- <span class="sd"> >>> from minigrid.wrappers import ViewSizeWrapper</span>
- <span class="sd"> >>> env = gym.make("MiniGrid-LavaCrossingS11N5-v0")</span>
- <span class="sd"> >>> obs, _ = env.reset()</span>
- <span class="sd"> >>> obs['image'].shape</span>
- <span class="sd"> (7, 7, 3)</span>
- <span class="sd"> >>> env_obs = ViewSizeWrapper(env, agent_view_size=5)</span>
- <span class="sd"> >>> obs, _ = env_obs.reset()</span>
- <span class="sd"> >>> obs['image'].shape</span>
- <span class="sd"> (5, 5, 3)</span>
- <span class="sd"> """</span>
- <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">env</span><span class="p">,</span> <span class="n">agent_view_size</span><span class="o">=</span><span class="mi">7</span><span class="p">):</span>
- <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">env</span><span class="p">)</span>
- <span class="k">assert</span> <span class="n">agent_view_size</span> <span class="o">%</span> <span class="mi">2</span> <span class="o">==</span> <span class="mi">1</span>
- <span class="k">assert</span> <span class="n">agent_view_size</span> <span class="o">>=</span> <span class="mi">3</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">agent_view_size</span> <span class="o">=</span> <span class="n">agent_view_size</span>
- <span class="c1"># Compute observation space with specified view size</span>
- <span class="n">new_image_space</span> <span class="o">=</span> <span class="n">gym</span><span class="o">.</span><span class="n">spaces</span><span class="o">.</span><span class="n">Box</span><span class="p">(</span>
- <span class="n">low</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">high</span><span class="o">=</span><span class="mi">255</span><span class="p">,</span> <span class="n">shape</span><span class="o">=</span><span class="p">(</span><span class="n">agent_view_size</span><span class="p">,</span> <span class="n">agent_view_size</span><span class="p">,</span> <span class="mi">3</span><span class="p">),</span> <span class="n">dtype</span><span class="o">=</span><span class="s2">"uint8"</span>
- <span class="p">)</span>
- <span class="c1"># Override the environment's observation spaceexit</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">observation_space</span> <span class="o">=</span> <span class="n">spaces</span><span class="o">.</span><span class="n">Dict</span><span class="p">(</span>
- <span class="p">{</span><span class="o">**</span><span class="bp">self</span><span class="o">.</span><span class="n">observation_space</span><span class="o">.</span><span class="n">spaces</span><span class="p">,</span> <span class="s2">"image"</span><span class="p">:</span> <span class="n">new_image_space</span><span class="p">}</span>
- <span class="p">)</span>
- <span class="k">def</span> <span class="nf">observation</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obs</span><span class="p">):</span>
- <span class="n">env</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">unwrapped</span>
- <span class="n">grid</span><span class="p">,</span> <span class="n">vis_mask</span> <span class="o">=</span> <span class="n">env</span><span class="o">.</span><span class="n">gen_obs_grid</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">agent_view_size</span><span class="p">)</span>
- <span class="c1"># Encode the partially observable view into a numpy array</span>
- <span class="n">image</span> <span class="o">=</span> <span class="n">grid</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="n">vis_mask</span><span class="p">)</span>
- <span class="k">return</span> <span class="p">{</span><span class="o">**</span><span class="n">obs</span><span class="p">,</span> <span class="s2">"image"</span><span class="p">:</span> <span class="n">image</span><span class="p">}</span></div>
- <div class="viewcode-block" id="DirectionObsWrapper">
- <a class="viewcode-back" href="../../../api/wrappers/#minigrid.wrappers.DirectionObsWrapper">[docs]</a>
- <span class="k">class</span> <span class="nc">DirectionObsWrapper</span><span class="p">(</span><span class="n">ObservationWrapper</span><span class="p">):</span>
- <span class="w"> </span><span class="sd">"""</span>
- <span class="sd"> Provides the slope/angular direction to the goal with the observations as modeled by (y2 - y2 )/( x2 - x1)</span>
- <span class="sd"> type = {slope , angle}</span>
- <span class="sd"> Example:</span>
- <span class="sd"> >>> import gymnasium as gym</span>
- <span class="sd"> >>> import matplotlib.pyplot as plt</span>
- <span class="sd"> >>> from minigrid.wrappers import DirectionObsWrapper</span>
- <span class="sd"> >>> env = gym.make("MiniGrid-LavaCrossingS11N5-v0")</span>
- <span class="sd"> >>> env_obs = DirectionObsWrapper(env, type="slope")</span>
- <span class="sd"> >>> obs, _ = env_obs.reset()</span>
- <span class="sd"> >>> obs['goal_direction']</span>
- <span class="sd"> 1.0</span>
- <span class="sd"> """</span>
- <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">env</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s2">"slope"</span><span class="p">):</span>
- <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">env</span><span class="p">)</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">goal_position</span><span class="p">:</span> <span class="nb">tuple</span> <span class="o">=</span> <span class="kc">None</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="nb">type</span>
- <span class="k">def</span> <span class="nf">reset</span><span class="p">(</span>
- <span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="p">,</span> <span class="n">seed</span><span class="p">:</span> <span class="nb">int</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">options</span><span class="p">:</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span>
- <span class="p">)</span> <span class="o">-></span> <span class="nb">tuple</span><span class="p">[</span><span class="n">ObsType</span><span class="p">,</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]]:</span>
- <span class="n">obs</span><span class="p">,</span> <span class="n">info</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
- <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">goal_position</span><span class="p">:</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">goal_position</span> <span class="o">=</span> <span class="p">[</span>
- <span class="n">x</span> <span class="k">for</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">grid</span><span class="o">.</span><span class="n">grid</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">y</span><span class="p">,</span> <span class="n">Goal</span><span class="p">)</span>
- <span class="p">]</span>
- <span class="c1"># in case there are multiple goals , needs to be handled for other env types</span>
- <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">goal_position</span><span class="p">)</span> <span class="o">>=</span> <span class="mi">1</span><span class="p">:</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">goal_position</span> <span class="o">=</span> <span class="p">(</span>
- <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">goal_position</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">/</span> <span class="bp">self</span><span class="o">.</span><span class="n">height</span><span class="p">),</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">goal_position</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">width</span><span class="p">,</span>
- <span class="p">)</span>
- <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">observation</span><span class="p">(</span><span class="n">obs</span><span class="p">),</span> <span class="n">info</span>
- <span class="k">def</span> <span class="nf">observation</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obs</span><span class="p">):</span>
- <span class="n">slope</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">divide</span><span class="p">(</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">goal_position</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">agent_pos</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">goal_position</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">agent_pos</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
- <span class="p">)</span>
- <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">type</span> <span class="o">==</span> <span class="s2">"angle"</span><span class="p">:</span>
- <span class="n">obs</span><span class="p">[</span><span class="s2">"goal_direction"</span><span class="p">]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arctan</span><span class="p">(</span><span class="n">slope</span><span class="p">)</span>
- <span class="k">else</span><span class="p">:</span>
- <span class="n">obs</span><span class="p">[</span><span class="s2">"goal_direction"</span><span class="p">]</span> <span class="o">=</span> <span class="n">slope</span>
- <span class="k">return</span> <span class="n">obs</span></div>
- <div class="viewcode-block" id="SymbolicObsWrapper">
- <a class="viewcode-back" href="../../../api/wrappers/#minigrid.wrappers.SymbolicObsWrapper">[docs]</a>
- <span class="k">class</span> <span class="nc">SymbolicObsWrapper</span><span class="p">(</span><span class="n">ObservationWrapper</span><span class="p">):</span>
- <span class="w"> </span><span class="sd">"""</span>
- <span class="sd"> Fully observable grid with a symbolic state representation.</span>
- <span class="sd"> The symbol is a triple of (X, Y, IDX), where X and Y are</span>
- <span class="sd"> the coordinates on the grid, and IDX is the id of the object.</span>
- <span class="sd"> Example:</span>
- <span class="sd"> >>> import gymnasium as gym</span>
- <span class="sd"> >>> from minigrid.wrappers import SymbolicObsWrapper</span>
- <span class="sd"> >>> env = gym.make("MiniGrid-LavaCrossingS11N5-v0")</span>
- <span class="sd"> >>> obs, _ = env.reset()</span>
- <span class="sd"> >>> obs['image'].shape</span>
- <span class="sd"> (7, 7, 3)</span>
- <span class="sd"> >>> env_obs = SymbolicObsWrapper(env)</span>
- <span class="sd"> >>> obs, _ = env_obs.reset()</span>
- <span class="sd"> >>> obs['image'].shape</span>
- <span class="sd"> (11, 11, 3)</span>
- <span class="sd"> """</span>
- <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">env</span><span class="p">):</span>
- <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">env</span><span class="p">)</span>
- <span class="n">new_image_space</span> <span class="o">=</span> <span class="n">spaces</span><span class="o">.</span><span class="n">Box</span><span class="p">(</span>
- <span class="n">low</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
- <span class="n">high</span><span class="o">=</span><span class="nb">max</span><span class="p">(</span><span class="n">OBJECT_TO_IDX</span><span class="o">.</span><span class="n">values</span><span class="p">()),</span>
- <span class="n">shape</span><span class="o">=</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="o">.</span><span class="n">width</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="o">.</span><span class="n">height</span><span class="p">,</span> <span class="mi">3</span><span class="p">),</span> <span class="c1"># number of cells</span>
- <span class="n">dtype</span><span class="o">=</span><span class="s2">"uint8"</span><span class="p">,</span>
- <span class="p">)</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">observation_space</span> <span class="o">=</span> <span class="n">spaces</span><span class="o">.</span><span class="n">Dict</span><span class="p">(</span>
- <span class="p">{</span><span class="o">**</span><span class="bp">self</span><span class="o">.</span><span class="n">observation_space</span><span class="o">.</span><span class="n">spaces</span><span class="p">,</span> <span class="s2">"image"</span><span class="p">:</span> <span class="n">new_image_space</span><span class="p">}</span>
- <span class="p">)</span>
- <span class="k">def</span> <span class="nf">observation</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obs</span><span class="p">):</span>
- <span class="n">objects</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span>
- <span class="p">[</span><span class="n">OBJECT_TO_IDX</span><span class="p">[</span><span class="n">o</span><span class="o">.</span><span class="n">type</span><span class="p">]</span> <span class="k">if</span> <span class="n">o</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="o">-</span><span class="mi">1</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid</span><span class="o">.</span><span class="n">grid</span><span class="p">]</span>
- <span class="p">)</span>
- <span class="n">agent_pos</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="o">.</span><span class="n">agent_pos</span>
- <span class="n">ncol</span><span class="p">,</span> <span class="n">nrow</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">width</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">height</span>
- <span class="n">grid</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">mgrid</span><span class="p">[:</span><span class="n">ncol</span><span class="p">,</span> <span class="p">:</span><span class="n">nrow</span><span class="p">]</span>
- <span class="n">_objects</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">transpose</span><span class="p">(</span><span class="n">objects</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">nrow</span><span class="p">,</span> <span class="n">ncol</span><span class="p">),</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
- <span class="n">grid</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">([</span><span class="n">grid</span><span class="p">,</span> <span class="n">_objects</span><span class="p">])</span>
- <span class="n">grid</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">transpose</span><span class="p">(</span><span class="n">grid</span><span class="p">,</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
- <span class="n">grid</span><span class="p">[</span><span class="n">agent_pos</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">agent_pos</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="n">OBJECT_TO_IDX</span><span class="p">[</span><span class="s2">"agent"</span><span class="p">]</span>
- <span class="n">obs</span><span class="p">[</span><span class="s2">"image"</span><span class="p">]</span> <span class="o">=</span> <span class="n">grid</span>
- <span class="k">return</span> <span class="n">obs</span></div>
- <div class="viewcode-block" id="StochasticActionWrapper">
- <a class="viewcode-back" href="../../../api/wrappers/#minigrid.wrappers.StochasticActionWrapper">[docs]</a>
- <span class="k">class</span> <span class="nc">StochasticActionWrapper</span><span class="p">(</span><span class="n">ActionWrapper</span><span class="p">):</span>
- <span class="w"> </span><span class="sd">"""</span>
- <span class="sd"> Add stochasticity to the actions</span>
- <span class="sd"> If a random action is provided, it is returned with probability `1 - prob`.</span>
- <span class="sd"> Else, a random action is sampled from the action space.</span>
- <span class="sd"> """</span>
- <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">env</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">prob</span><span class="o">=</span><span class="mf">0.9</span><span class="p">,</span> <span class="n">random_action</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
- <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">env</span><span class="p">)</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">prob</span> <span class="o">=</span> <span class="n">prob</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">random_action</span> <span class="o">=</span> <span class="n">random_action</span>
- <span class="k">def</span> <span class="nf">action</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">action</span><span class="p">):</span>
- <span class="w"> </span><span class="sd">""" """</span>
- <span class="k">if</span> <span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">uniform</span><span class="p">()</span> <span class="o"><</span> <span class="bp">self</span><span class="o">.</span><span class="n">prob</span><span class="p">:</span>
- <span class="k">return</span> <span class="n">action</span>
- <span class="k">else</span><span class="p">:</span>
- <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">random_action</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
- <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">np_random</span><span class="o">.</span><span class="n">integers</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">high</span><span class="o">=</span><span class="mi">6</span><span class="p">)</span>
- <span class="k">else</span><span class="p">:</span>
- <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">random_action</span></div>
- <div class="viewcode-block" id="NoDeath">
- <a class="viewcode-back" href="../../../api/wrappers/#minigrid.wrappers.NoDeath">[docs]</a>
- <span class="k">class</span> <span class="nc">NoDeath</span><span class="p">(</span><span class="n">Wrapper</span><span class="p">):</span>
- <span class="w"> </span><span class="sd">"""</span>
- <span class="sd"> Wrapper to prevent death in specific cells (e.g., lava cells).</span>
- <span class="sd"> Instead of dying, the agent will receive a negative reward.</span>
- <span class="sd"> Example:</span>
- <span class="sd"> >>> import gymnasium as gym</span>
- <span class="sd"> >>> from minigrid.wrappers import NoDeath</span>
- <span class="sd"> >>></span>
- <span class="sd"> >>> env = gym.make("MiniGrid-LavaCrossingS9N1-v0")</span>
- <span class="sd"> >>> _, _ = env.reset(seed=2)</span>
- <span class="sd"> >>> _, _, _, _, _ = env.step(1)</span>
- <span class="sd"> >>> _, reward, term, *_ = env.step(2)</span>
- <span class="sd"> >>> reward, term</span>
- <span class="sd"> (0, True)</span>
- <span class="sd"> >>></span>
- <span class="sd"> >>> env = NoDeath(env, no_death_types=("lava",), death_cost=-1.0)</span>
- <span class="sd"> >>> _, _ = env.reset(seed=2)</span>
- <span class="sd"> >>> _, _, _, _, _ = env.step(1)</span>
- <span class="sd"> >>> _, reward, term, *_ = env.step(2)</span>
- <span class="sd"> >>> reward, term</span>
- <span class="sd"> (-1.0, False)</span>
- <span class="sd"> >>></span>
- <span class="sd"> >>></span>
- <span class="sd"> >>> env = gym.make("MiniGrid-Dynamic-Obstacles-5x5-v0")</span>
- <span class="sd"> >>> _, _ = env.reset(seed=2)</span>
- <span class="sd"> >>> _, reward, term, *_ = env.step(2)</span>
- <span class="sd"> >>> reward, term</span>
- <span class="sd"> (-1, True)</span>
- <span class="sd"> >>></span>
- <span class="sd"> >>> env = NoDeath(env, no_death_types=("ball",), death_cost=-1.0)</span>
- <span class="sd"> >>> _, _ = env.reset(seed=2)</span>
- <span class="sd"> >>> _, reward, term, *_ = env.step(2)</span>
- <span class="sd"> >>> reward, term</span>
- <span class="sd"> (-2.0, False)</span>
- <span class="sd"> """</span>
- <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">env</span><span class="p">,</span> <span class="n">no_death_types</span><span class="p">:</span> <span class="nb">tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="o">...</span><span class="p">],</span> <span class="n">death_cost</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">):</span>
- <span class="w"> </span><span class="sd">"""A wrapper to prevent death in specific cells.</span>
- <span class="sd"> Args:</span>
- <span class="sd"> env: The environment to apply the wrapper</span>
- <span class="sd"> no_death_types: List of strings to identify death cells</span>
- <span class="sd"> death_cost: The negative reward received in death cells</span>
- <span class="sd"> """</span>
- <span class="k">assert</span> <span class="s2">"goal"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">no_death_types</span><span class="p">,</span> <span class="s2">"goal cannot be a death cell"</span>
- <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">env</span><span class="p">)</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">death_cost</span> <span class="o">=</span> <span class="n">death_cost</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">no_death_types</span> <span class="o">=</span> <span class="n">no_death_types</span>
- <span class="k">def</span> <span class="nf">step</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">action</span><span class="p">):</span>
- <span class="c1"># In Dynamic-Obstacles, obstacles move after the agent moves,</span>
- <span class="c1"># so we need to check for collision before self.env.step()</span>
- <span class="n">front_cell</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">front_pos</span><span class="p">)</span>
- <span class="n">going_to_death</span> <span class="o">=</span> <span class="p">(</span>
- <span class="n">action</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">actions</span><span class="o">.</span><span class="n">forward</span>
- <span class="ow">and</span> <span class="n">front_cell</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
- <span class="ow">and</span> <span class="n">front_cell</span><span class="o">.</span><span class="n">type</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">no_death_types</span>
- <span class="p">)</span>
- <span class="n">obs</span><span class="p">,</span> <span class="n">reward</span><span class="p">,</span> <span class="n">terminated</span><span class="p">,</span> <span class="n">truncated</span><span class="p">,</span> <span class="n">info</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="o">.</span><span class="n">step</span><span class="p">(</span><span class="n">action</span><span class="p">)</span>
- <span class="c1"># We also check if the agent stays in death cells (e.g., lava)</span>
- <span class="c1"># without moving</span>
- <span class="n">current_cell</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">agent_pos</span><span class="p">)</span>
- <span class="n">in_death</span> <span class="o">=</span> <span class="n">current_cell</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">current_cell</span><span class="o">.</span><span class="n">type</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">no_death_types</span>
- <span class="k">if</span> <span class="n">terminated</span> <span class="ow">and</span> <span class="p">(</span><span class="n">going_to_death</span> <span class="ow">or</span> <span class="n">in_death</span><span class="p">):</span>
- <span class="n">terminated</span> <span class="o">=</span> <span class="kc">False</span>
- <span class="n">reward</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">death_cost</span>
- <span class="k">return</span> <span class="n">obs</span><span class="p">,</span> <span class="n">reward</span><span class="p">,</span> <span class="n">terminated</span><span class="p">,</span> <span class="n">truncated</span><span class="p">,</span> <span class="n">info</span></div>
- </pre></div>
- </article>
- </div>
- <footer>
-
- <div class="related-pages">
-
-
- </div>
- <div class="bottom-of-page">
- <div class="left-details">
- <div class="copyright">
- Copyright © 2023 Farama Foundation
- </div>
- <!--
- Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
-
- <a href="https://github.com/pradyunsg/furo">Furo</a>
- -->
- </div>
- <div class="right-details">
- <div class="icons">
- <a class="muted-link" href="https://github.com/Farama-Foundation/Minigrid/"
- aria-label="On GitHub">
- <svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 16 16">
- <path fill-rule="evenodd"
- d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z">
- </path>
- </svg>
- </a>
- </div>
- </div>
- </div>
-
- </footer>
- </div>
- <aside class="toc-drawer no-toc">
-
-
-
- </aside>
- </div>
- </div>
- </div>
- <script>
- const toggleMenu = () => {
- const menuBtn = document.querySelector(".farama-header-menu__btn");
- const menuContainer = document.querySelector(".farama-header-menu-container");
- if (document.querySelector(".farama-header-menu").classList.contains("active")) {
- menuBtn.setAttribute("aria-expanded", "false");
- menuContainer.setAttribute("aria-hidden", "true");
- } else {
- menuBtn.setAttribute("aria-expanded", "true");
- menuContainer.setAttribute("aria-hidden", "false");
- }
- document.querySelector(".farama-header-menu").classList.toggle("active");
- }
- document.querySelector(".farama-header-menu__btn").addEventListener("click", toggleMenu);
- document.getElementById("farama-close-menu").addEventListener("click", toggleMenu);
- </script>
-
- <script async src="https://www.googletagmanager.com/gtag/js?id=G-FBXJQQLXKD"></script>
- <script>
- const enableGtag = () => {
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
- gtag('config', 'G-FBXJQQLXKD');
- }
- (() => {
- if (!localStorage.getItem("acceptedCookieAlert")) {
- const boxElem = document.createElement("div");
- boxElem.classList.add("cookie-alert");
- const containerElem = document.createElement("div");
- containerElem.classList.add("cookie-alert__container");
- const textElem = document.createElement("p");
- textElem.innerHTML = `This page uses <a href="https://analytics.google.com/">
- Google Analytics</a> to collect statistics.`;
- containerElem.appendChild(textElem);
- const declineBtn = Object.assign(document.createElement("button"),
- {
- innerText: "Deny",
- className: "farama-btn cookie-alert__button",
- id: "cookie-alert__decline",
- }
- );
- declineBtn.addEventListener("click", () => {
- localStorage.setItem("acceptedCookieAlert", false);
- boxElem.remove();
- });
- const acceptBtn = Object.assign(document.createElement("button"),
- {
- innerText: "Allow",
- className: "farama-btn cookie-alert__button",
- id: "cookie-alert__accept",
- }
- );
- acceptBtn.addEventListener("click", () => {
- localStorage.setItem("acceptedCookieAlert", true);
- boxElem.remove();
- enableGtag();
- });
- containerElem.appendChild(declineBtn);
- containerElem.appendChild(acceptBtn);
- boxElem.appendChild(containerElem);
- document.body.appendChild(boxElem);
- } else if (localStorage.getItem("acceptedCookieAlert") === "true") {
- enableGtag();
- }
- })()
- </script>
- <script src="../../../_static/documentation_options.js?v=7fa42598"></script>
- <script src="../../../_static/doctools.js?v=888ff710"></script>
- <script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
- <script src="../../../_static/scripts/furo.js?v=7660844c"></script>
-
- <script>
- const createProjectsList = (projects, displayImages) => {
- const ulElem = Object.assign(document.createElement('ul'),
- {
- className:'farama-header-menu-list',
- }
- )
- for (let project of projects) {
- const liElem = document.createElement("li");
- const aElem = Object.assign(document.createElement("a"),
- {
- href: project.link
- }
- );
- liElem.appendChild(aElem);
- if (displayImages) {
- const imgElem = Object.assign(document.createElement("img"),
- {
- src: project.image ? imagesBasepath + project.image : imagesBasepath + "/farama_black.svg",
- alt: `${project.name} logo`,
- className: "farama-black-logo-invert"
- }
- );
- aElem.appendChild(imgElem);
- }
- aElem.appendChild(document.createTextNode(project.name));
- ulElem.appendChild(liElem);
- }
- return ulElem;
- }
- // Create menu with Farama projects by using the API at farama.org/api/projects.json
- const createCORSRequest = (method, url) => {
- let xhr = new XMLHttpRequest();
- xhr.responseType = 'json';
- if ("withCredentials" in xhr) {
- xhr.open(method, url, true);
- } else if (typeof XDomainRequest != "undefined") {
- // IE8 & IE9
- xhr = new XDomainRequest();
- xhr.open(method, url);
- } else {
- // CORS not supported.
- xhr = null;
- }
- return xhr;
- };
- const url = 'https://farama.org/api/projects.json';
- const imagesBasepath = "https://farama.org/assets/images"
- const method = 'GET';
- let xhr = createCORSRequest(method, url);
- xhr.onload = () => {
- const jsonResponse = xhr.response;
- const sections = {
- "Core Projects": [],
- "Mature Projects": {
- "Documentation": [],
- "Repositories": [],
- },
- "Incubating Projects": {
- "Documentation": [],
- "Repositories": [],
- },
- "Foundation": [
- {
- name: "About",
- link: "https://farama.org/about"
- },
- {
- name: "Standards",
- link: "https://farama.org/project_standards",
- },
- {
- name: "Donate",
- link: "https://farama.org/donations"
- }
- ]
- }
- // Categorize projects
- Object.keys(jsonResponse).forEach(key => {
- projectJson = jsonResponse[key];
- if (projectJson.website !== null) {
- projectJson.link = projectJson.website;
- } else {
- projectJson.link = projectJson.github;
- }
- if (projectJson.type === "core") {
- sections["Core Projects"].push(projectJson)
- } else if (projectJson.type == "mature") {
- if (projectJson.website !== null) {
- sections["Mature Projects"]["Documentation"].push(projectJson)
- } else {
- sections["Mature Projects"]["Repositories"].push(projectJson)
- }
- } else {
- if (projectJson.website !== null) {
- sections["Incubating Projects"]["Documentation"].push(projectJson)
- } else {
- sections["Incubating Projects"]["Repositories"].push(projectJson)
- }
- }
- })
- const menuContainer = document.querySelector(".farama-header-menu__body");
- Object.keys(sections).forEach((key, i) => {
- const sectionElem = Object.assign(
- document.createElement('div'), {
- className:'farama-header-menu__section',
- }
- )
- sectionElem.appendChild(Object.assign(document.createElement('span'),
- {
- className:'farama-header-menu__section-title' ,
- innerText: key
- }
- ))
- // is not a list
- if (sections[key].constructor !== Array) {
- const subSections = sections[key];
- const subSectionContainerElem = Object.assign(
- document.createElement('div'), {
- className:'farama-header-menu__subsections-container',
- style: 'display: flex'
- }
- )
- Object.keys(subSections).forEach((subKey, i) => {
- const subSectionElem = Object.assign(
- document.createElement('div'), {
- className:'farama-header-menu__subsection',
- }
- )
- subSectionElem.appendChild(Object.assign(document.createElement('span'),
- {
- className:'farama-header-menu__subsection-title' ,
- innerText: subKey
- }
- ))
- const ulElem = createProjectsList(subSections[subKey], key !== 'Foundation');
- subSectionElem.appendChild(ulElem);
- subSectionContainerElem.appendChild(subSectionElem);
- })
- sectionElem.appendChild(subSectionContainerElem);
- } else {
- const projects = sections[key];
- const ulElem = createProjectsList(projects, true);
- sectionElem.appendChild(ulElem);
- }
- menuContainer.appendChild(sectionElem)
- });
- }
- xhr.onerror = function() {
- console.error("Unable to load projects");
- };
- xhr.send();
- </script>
-
- <script>
- const versioningConfig = {
- githubUser: 'Farama-Foundation',
- githubRepo: 'Minigrid',
- };
- fetch('/main/_static/versioning/versioning_menu.html').then(response => {
- if (response.status === 200) {
- response.text().then(text => {
- const container = document.createElement("div");
- container.innerHTML = text;
- document.querySelector("body").appendChild(container);
- // innerHtml doenst evaluate scripts, we need to add them dynamically
- Array.from(container.querySelectorAll("script")).forEach(oldScript => {
- const newScript = document.createElement("script");
- Array.from(oldScript.attributes).forEach(attr => newScript.setAttribute(attr.name, attr.value));
- newScript.appendChild(document.createTextNode(oldScript.innerHTML));
- oldScript.parentNode.replaceChild(newScript, oldScript);
- });
- });
- } else {
- console.warn("Unable to load versioning menu", response);
- }
- });
- </script>
- </body>
- </html>
|