miniworld-maze 1.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of miniworld-maze might be problematic. Click here for more details.
- miniworld_maze/__init__.py +37 -0
- miniworld_maze/core/__init__.py +8 -0
- miniworld_maze/core/constants.py +130 -0
- miniworld_maze/core/miniworld_gymnasium/README.md +1 -0
- miniworld_maze/core/miniworld_gymnasium/__init__.py +4 -0
- miniworld_maze/core/miniworld_gymnasium/base_env.py +52 -0
- miniworld_maze/core/miniworld_gymnasium/entities/__init__.py +7 -0
- miniworld_maze/core/miniworld_gymnasium/entities/agent.py +117 -0
- miniworld_maze/core/miniworld_gymnasium/entities/base_entity.py +135 -0
- miniworld_maze/core/miniworld_gymnasium/entities/objects.py +116 -0
- miniworld_maze/core/miniworld_gymnasium/entity_manager.py +358 -0
- miniworld_maze/core/miniworld_gymnasium/envs/__init__.py +3 -0
- miniworld_maze/core/miniworld_gymnasium/math.py +83 -0
- miniworld_maze/core/miniworld_gymnasium/objmesh.py +294 -0
- miniworld_maze/core/miniworld_gymnasium/occlusion_queries.py +97 -0
- miniworld_maze/core/miniworld_gymnasium/opengl.py +21 -0
- miniworld_maze/core/miniworld_gymnasium/params.py +128 -0
- miniworld_maze/core/miniworld_gymnasium/random.py +105 -0
- miniworld_maze/core/miniworld_gymnasium/rendering/__init__.py +7 -0
- miniworld_maze/core/miniworld_gymnasium/rendering/drawing.py +77 -0
- miniworld_maze/core/miniworld_gymnasium/rendering/framebuffer.py +260 -0
- miniworld_maze/core/miniworld_gymnasium/rendering/texture.py +101 -0
- miniworld_maze/core/miniworld_gymnasium/rendering_engine.py +293 -0
- miniworld_maze/core/miniworld_gymnasium/room.py +330 -0
- miniworld_maze/core/miniworld_gymnasium/texture_utils.py +64 -0
- miniworld_maze/core/miniworld_gymnasium/textures/airduct_grate_1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/asphalt_1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/beanpaste_1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/beige_1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/black_1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/blueberry_1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/brick_wall_1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/cardboard_1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/cardboard_2.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/cardboard_3.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/cardboard_4.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/ceiling_tile_noborder_1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/ceiling_tiles_1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/cinder_blocks_1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/cobaltgreen_1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/concrete_1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/concrete_2.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/concrete_3.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/concrete_4.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/concrete_tiles_1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/copperred_1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/crimson_1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/door_doom_1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/door_doom_2.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/door_garage_red.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/door_garage_white.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/door_steel_brown.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/door_steel_grey.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/door_steel_red.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/drywall_1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/floor_tiles_bw_1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/floor_tiles_white.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/grass_1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/grass_2.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/lava_1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/lava_2.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/lemongrass_1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/lightbeige_1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/lightcobaltgreen_1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/lightgray_1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/lightnavyblue_1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/lightskyblue_1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/lime_1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/logo_mila_1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/magenta_1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/marble_1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/marble_2.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/metal_grill_1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/metal_grill_2.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/morningglory_1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/navyblue_1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/oakbrown_1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/orange_1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/orchid_1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/picket_fence_1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/adelaide_hanscom1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/adelaide_hanscom1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/alessandro_allori1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/alessandro_allori1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/alessandro_allori2.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/alessandro_allori2.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/alexandre_cabanel1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/alexandre_cabanel1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/alexei_harlamov1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/alexei_harlamov1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/alexey_petrovich_antropov1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/alexey_petrovich_antropov1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/alice_pike_barney1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/alice_pike_barney1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/aman_theodor1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/aman_theodor1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/antonello_messina1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/antonello_messina1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/antonio_herrera_toro1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/antonio_herrera_toro1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/benjamin-constant1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/benjamin-constant1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/benoist_marie-guillemine1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/benoist_marie-guillemine1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/bouguereau_william-adolphe1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/bouguereau_william-adolphe1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/byron1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/byron1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/carl_fredric_breda1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/carl_fredric_breda1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/carl_fredric_breda2.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/carl_fredric_breda2.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/cramacj_lucas1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/cramacj_lucas1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/cranach_lucas2.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/cranach_lucas2.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/cristobal_rojas1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/cristobal_rojas1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/delacroix_eugene_ferdinand_victor1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/delacroix_eugene_ferdinand_victor1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/domenikos_theotokopoulos1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/domenikos_theotokopoulos1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/edmund_blair_leighton1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/edmund_blair_leighton1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/edmund_blair_leighton2.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/edmund_blair_leighton2.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/edwin_longsden_long1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/edwin_longsden_long1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/falero_luis_ricardo1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/falero_luis_ricardo1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/felix_bonfils1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/felix_bonfils1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/francesco_hayez1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/francesco_hayez1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/francisco_goya_lucientes1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/francisco_goya_lucientes1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/francisco_goya_lucientes2.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/francisco_goya_lucientes2.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/francisco_zurbaran1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/francisco_zurbaran1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/franz_von_defregger1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/franz_von_defregger1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/franz_von_defregger2.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/franz_von_defregger2.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/franz_von_defregger3.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/franz_von_defregger3.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/frederic_westin1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/frederic_westin1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/frederic_yates1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/frederic_yates1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/frederick_leighton1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/frederick_leighton1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/gaston_bussiere1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/gaston_bussiere1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/george_henry_hall1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/george_henry_hall1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/giovanni_battista_tiepolo1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/giovanni_battista_tiepolo1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/giovanni_bellini1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/giovanni_bellini1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/hans_holbein1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/hans_holbein1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/hayez_francesco1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/hayez_francesco1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/henryk_siemiradzki1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/henryk_siemiradzki1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/ilja_jefimowitsch_repin1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/ilja_jefimowitsch_repin1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/james_carrol_beckwith1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/james_carrol_beckwith1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-baptiste-camille_corot1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-baptiste-camille_corot1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-baptiste-camille_corot2.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-baptiste-camille_corot2.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome2.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome2.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome3.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome3.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome4.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome4.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/john_william_godward1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/john_william_godward1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/john_william_godward2.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/john_william_godward2.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/john_william_godward3.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/john_william_godward3.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/julije_klovic1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/julije_klovic1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/juriaen_streek1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/juriaen_streek1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/kiprenskij_orest_adamovic1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/kiprenskij_orest_adamovic1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/konstantin_makovsky1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/konstantin_makovsky1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/lefebvre_jules_joseph1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/lefebvre_jules_joseph1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/leon-francois_comerre1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/leon-francois_comerre1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/leopold_loffler1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/leopold_loffler1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/lewis_john_frederick1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/lewis_john_frederick1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/madrazo_garreta_raimundo1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/madrazo_garreta_raimundo1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/marie_bashkirtseff1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/marie_bashkirtseff1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/moritz_kellerhoven1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/moritz_kellerhoven1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/nathaniel_jocelyn1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/nathaniel_jocelyn1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/nikolai_alexandrowitsch_jaroschenko1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/nikolai_alexandrowitsch_jaroschenko1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/nils_johan_olsson_blommer1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/nils_johan_olsson_blommer1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/paolo_veronese1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/paolo_veronese1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/parmigianino1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/parmigianino1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/paul_cesar_helleu1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/paul_cesar_helleu1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/regnault_henri1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/regnault_henri1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/richard_bergh1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/richard_bergh1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/richard_bergh2.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/richard_bergh2.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/robert_dampier1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/robert_dampier1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/robert_lefevre1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/robert_lefevre1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/robert_leopold1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/robert_leopold1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/sichel_nathanael1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/sichel_nathanael1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/svetoslav_roerich1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/svetoslav_roerich1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/velazquez_diego1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/velazquez_diego1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/viktor_vasnetsov1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/viktor_vasnetsov1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/william-adolphe_bouguereau1.license +2 -0
- miniworld_maze/core/miniworld_gymnasium/textures/portraits/william-adolphe_bouguereau1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/realblueberry_1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/redbean_1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/rock_1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/seablue_1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/silver_1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/skyblue_1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/slime_1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/stucco_1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/sunnyyellow_1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/turquoise_1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/violet_1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/water_1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/water_2.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/water_3.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/white_1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/wood_1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/wood_2.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/textures/wood_planks_1.png +0 -0
- miniworld_maze/core/miniworld_gymnasium/unified_env.py +1364 -0
- miniworld_maze/core/miniworld_gymnasium/utils.py +37 -0
- miniworld_maze/core/miniworld_gymnasium/wrappers.py +2 -0
- miniworld_maze/core/observation_types.py +32 -0
- miniworld_maze/environments/__init__.py +16 -0
- miniworld_maze/environments/base_grid_rooms.py +204 -0
- miniworld_maze/environments/factory.py +155 -0
- miniworld_maze/environments/nine_rooms.py +74 -0
- miniworld_maze/environments/spiral_nine_rooms.py +70 -0
- miniworld_maze/environments/twenty_five_rooms.py +122 -0
- miniworld_maze/tools/__init__.py +5 -0
- miniworld_maze/tools/generate_observations.py +199 -0
- miniworld_maze/wrappers/__init__.py +5 -0
- miniworld_maze/wrappers/image_transforms.py +40 -0
- miniworld_maze-1.0.0.dist-info/METADATA +108 -0
- miniworld_maze-1.0.0.dist-info/RECORD +280 -0
- miniworld_maze-1.0.0.dist-info/WHEEL +4 -0
- miniworld_maze-1.0.0.dist-info/entry_points.txt +3 -0
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"""TwentyFiveRooms environment implementation."""
|
|
2
|
+
|
|
3
|
+
from ..core import ObservationLevel
|
|
4
|
+
from .base_grid_rooms import GridRoomsEnvironment
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class TwentyFiveRooms(GridRoomsEnvironment):
|
|
8
|
+
"""
|
|
9
|
+
Traverse the 25 rooms
|
|
10
|
+
|
|
11
|
+
---------------------
|
|
12
|
+
| 0 | 1 | 2 | 3 | 4 |
|
|
13
|
+
---------------------
|
|
14
|
+
| 5 | 6 | 7 | 8 | 9 |
|
|
15
|
+
---------------------
|
|
16
|
+
|10 |11 |12 |13 |14 |
|
|
17
|
+
---------------------
|
|
18
|
+
|15 |16 |17 |18 |19 |
|
|
19
|
+
---------------------
|
|
20
|
+
|20 |21 |22 |23 |24 |
|
|
21
|
+
---------------------
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
def __init__(
|
|
25
|
+
self,
|
|
26
|
+
connections=None,
|
|
27
|
+
textures=None,
|
|
28
|
+
placed_room=None,
|
|
29
|
+
obs_level=ObservationLevel.TOP_DOWN_PARTIAL,
|
|
30
|
+
continuous=False,
|
|
31
|
+
room_size=5,
|
|
32
|
+
door_size=2,
|
|
33
|
+
agent_mode=None,
|
|
34
|
+
obs_width=80,
|
|
35
|
+
obs_height=80,
|
|
36
|
+
**kwargs,
|
|
37
|
+
):
|
|
38
|
+
# Default configuration for TwentyFiveRooms
|
|
39
|
+
default_connections = [
|
|
40
|
+
(0, 1),
|
|
41
|
+
(0, 5),
|
|
42
|
+
(1, 2),
|
|
43
|
+
(1, 6),
|
|
44
|
+
(2, 3),
|
|
45
|
+
(2, 7),
|
|
46
|
+
(3, 4),
|
|
47
|
+
(3, 8),
|
|
48
|
+
(4, 9),
|
|
49
|
+
(5, 6),
|
|
50
|
+
(5, 10),
|
|
51
|
+
(6, 7),
|
|
52
|
+
(6, 11),
|
|
53
|
+
(7, 8),
|
|
54
|
+
(7, 12),
|
|
55
|
+
(8, 9),
|
|
56
|
+
(8, 13),
|
|
57
|
+
(9, 14),
|
|
58
|
+
(10, 11),
|
|
59
|
+
(10, 15),
|
|
60
|
+
(11, 12),
|
|
61
|
+
(11, 16),
|
|
62
|
+
(12, 13),
|
|
63
|
+
(12, 17),
|
|
64
|
+
(13, 14),
|
|
65
|
+
(13, 18),
|
|
66
|
+
(14, 19),
|
|
67
|
+
(15, 16),
|
|
68
|
+
(15, 20),
|
|
69
|
+
(16, 17),
|
|
70
|
+
(16, 21),
|
|
71
|
+
(17, 18),
|
|
72
|
+
(17, 22),
|
|
73
|
+
(18, 19),
|
|
74
|
+
(18, 23),
|
|
75
|
+
(19, 24),
|
|
76
|
+
(20, 21),
|
|
77
|
+
(21, 22),
|
|
78
|
+
(22, 23),
|
|
79
|
+
(23, 24),
|
|
80
|
+
]
|
|
81
|
+
default_textures = [
|
|
82
|
+
"crimson",
|
|
83
|
+
"beanpaste",
|
|
84
|
+
"cobaltgreen",
|
|
85
|
+
"lightnavyblue",
|
|
86
|
+
"skyblue",
|
|
87
|
+
"lightcobaltgreen",
|
|
88
|
+
"oakbrown",
|
|
89
|
+
"copperred",
|
|
90
|
+
"lightgray",
|
|
91
|
+
"lime",
|
|
92
|
+
"turquoise",
|
|
93
|
+
"violet",
|
|
94
|
+
"beige",
|
|
95
|
+
"morningglory",
|
|
96
|
+
"silver",
|
|
97
|
+
"magenta",
|
|
98
|
+
"sunnyyellow",
|
|
99
|
+
"blueberry",
|
|
100
|
+
"lightbeige",
|
|
101
|
+
"seablue",
|
|
102
|
+
"lemongrass",
|
|
103
|
+
"orchid",
|
|
104
|
+
"redbean",
|
|
105
|
+
"orange",
|
|
106
|
+
"realblueberry",
|
|
107
|
+
]
|
|
108
|
+
|
|
109
|
+
super().__init__(
|
|
110
|
+
grid_size=5,
|
|
111
|
+
connections=connections or default_connections,
|
|
112
|
+
textures=textures or default_textures,
|
|
113
|
+
placed_room=placed_room,
|
|
114
|
+
obs_level=obs_level,
|
|
115
|
+
continuous=continuous,
|
|
116
|
+
room_size=room_size,
|
|
117
|
+
door_size=door_size,
|
|
118
|
+
agent_mode=agent_mode,
|
|
119
|
+
obs_width=obs_width,
|
|
120
|
+
obs_height=obs_height,
|
|
121
|
+
**kwargs,
|
|
122
|
+
)
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Generate comprehensive observations for Nine Rooms environment variants.
|
|
4
|
+
Supports: NineRooms, SpiralNineRooms, TwentyFiveRooms
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import argparse
|
|
8
|
+
import os
|
|
9
|
+
|
|
10
|
+
import numpy as np
|
|
11
|
+
from PIL import Image
|
|
12
|
+
|
|
13
|
+
from ..core import FrameBuffer
|
|
14
|
+
from ..environments.factory import create_nine_rooms_env
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def generate_observations(variant, output_dir=None, high_res_full_views=False):
|
|
18
|
+
"""Generate comprehensive observations for the specified environment variant."""
|
|
19
|
+
if output_dir is None:
|
|
20
|
+
output_dir = f"{variant.lower()}_observations"
|
|
21
|
+
|
|
22
|
+
os.makedirs(output_dir, exist_ok=True)
|
|
23
|
+
|
|
24
|
+
# Create environment
|
|
25
|
+
env = create_nine_rooms_env(variant=variant, size=64)
|
|
26
|
+
|
|
27
|
+
# Get base environment for direct render access
|
|
28
|
+
base_env = getattr(env, 'env', getattr(env, '_env', env))
|
|
29
|
+
while hasattr(base_env, "env") or hasattr(base_env, "_env"):
|
|
30
|
+
if hasattr(base_env, "env"):
|
|
31
|
+
base_env = base_env.env
|
|
32
|
+
elif hasattr(base_env, "_env"):
|
|
33
|
+
base_env = base_env._env
|
|
34
|
+
else:
|
|
35
|
+
break
|
|
36
|
+
|
|
37
|
+
# Reset environment
|
|
38
|
+
obs, _ = env.reset(seed=42)
|
|
39
|
+
|
|
40
|
+
# Create high-resolution frame buffer if requested
|
|
41
|
+
high_res_fb = None
|
|
42
|
+
if high_res_full_views:
|
|
43
|
+
high_res_fb = FrameBuffer(512, 512, 8)
|
|
44
|
+
|
|
45
|
+
# === FULL ENVIRONMENT OBSERVATIONS ===
|
|
46
|
+
|
|
47
|
+
# 1. Full view with agent at starting position
|
|
48
|
+
if high_res_full_views:
|
|
49
|
+
full_view_start = base_env.render_top_view(
|
|
50
|
+
frame_buffer=high_res_fb, POMDP=False
|
|
51
|
+
)
|
|
52
|
+
else:
|
|
53
|
+
full_view_start = base_env.render_top_view(POMDP=False)
|
|
54
|
+
Image.fromarray(full_view_start).save(f"{output_dir}/full_view_start.png")
|
|
55
|
+
|
|
56
|
+
# 2. Full view without agent (clean maze view)
|
|
57
|
+
if high_res_full_views:
|
|
58
|
+
full_view_clean = base_env.render_top_view(
|
|
59
|
+
frame_buffer=high_res_fb, POMDP=False, render_ag=False
|
|
60
|
+
)
|
|
61
|
+
else:
|
|
62
|
+
full_view_clean = base_env.render_top_view(POMDP=False, render_ag=False)
|
|
63
|
+
Image.fromarray(full_view_clean).save(f"{output_dir}/full_view_clean.png")
|
|
64
|
+
|
|
65
|
+
# 3. Full view with agent in center
|
|
66
|
+
center_x = (base_env.min_x + base_env.max_x) / 2
|
|
67
|
+
center_z = (base_env.min_z + base_env.max_z) / 2
|
|
68
|
+
base_env.place_agent(pos=[center_x, 0.0, center_z])
|
|
69
|
+
if high_res_full_views:
|
|
70
|
+
full_view_center = base_env.render_top_view(
|
|
71
|
+
frame_buffer=high_res_fb, POMDP=False
|
|
72
|
+
)
|
|
73
|
+
else:
|
|
74
|
+
full_view_center = base_env.render_top_view(POMDP=False)
|
|
75
|
+
Image.fromarray(full_view_center).save(f"{output_dir}/full_view_center.png")
|
|
76
|
+
|
|
77
|
+
# === PARTIAL OBSERVATIONS ===
|
|
78
|
+
|
|
79
|
+
# Reset agent to start position
|
|
80
|
+
base_env.place_agent(pos=[2.5, 0.0, 2.5])
|
|
81
|
+
|
|
82
|
+
# 1. Partial view from starting position
|
|
83
|
+
partial_start = base_env.render_top_view(POMDP=True)
|
|
84
|
+
Image.fromarray(partial_start).save(f"{output_dir}/partial_start.png")
|
|
85
|
+
|
|
86
|
+
# 2. Partial view from center
|
|
87
|
+
base_env.place_agent(pos=[center_x, 0.0, center_z])
|
|
88
|
+
partial_center = base_env.render_top_view(POMDP=True)
|
|
89
|
+
Image.fromarray(partial_center).save(f"{output_dir}/partial_center.png")
|
|
90
|
+
|
|
91
|
+
# 3. Partial view from corner/edge
|
|
92
|
+
corner_x = base_env.max_x - 2.5
|
|
93
|
+
corner_z = base_env.max_z - 2.5
|
|
94
|
+
base_env.place_agent(pos=[corner_x, 0.0, corner_z])
|
|
95
|
+
partial_corner = base_env.render_top_view(POMDP=True)
|
|
96
|
+
Image.fromarray(partial_corner).save(f"{output_dir}/partial_corner.png")
|
|
97
|
+
|
|
98
|
+
# 4. Partial view at strategic location
|
|
99
|
+
if variant == "NineRooms":
|
|
100
|
+
strategic_x, strategic_z = 15.0, 7.5 # Room boundary
|
|
101
|
+
elif variant == "SpiralNineRooms":
|
|
102
|
+
strategic_x, strategic_z = 22.5, 15.0 # Center of spiral
|
|
103
|
+
else: # TwentyFiveRooms
|
|
104
|
+
strategic_x, strategic_z = 37.5, 37.5 # Mid-outer area
|
|
105
|
+
|
|
106
|
+
base_env.place_agent(pos=[strategic_x, 0.0, strategic_z])
|
|
107
|
+
partial_strategic = base_env.render_top_view(POMDP=True)
|
|
108
|
+
Image.fromarray(partial_strategic).save(f"{output_dir}/partial_strategic.png")
|
|
109
|
+
|
|
110
|
+
# === WRAPPED OBSERVATIONS ===
|
|
111
|
+
|
|
112
|
+
# Reset environment
|
|
113
|
+
obs, _ = env.reset(seed=42)
|
|
114
|
+
|
|
115
|
+
# 1. Standard gymnasium observation
|
|
116
|
+
obs_hwc = np.transpose(obs, (1, 2, 0))
|
|
117
|
+
Image.fromarray(obs_hwc).save(f"{output_dir}/gymnasium_standard.png")
|
|
118
|
+
|
|
119
|
+
# 2. Observations after movement
|
|
120
|
+
actions = [2, 2, 1] # move_forward, move_forward, turn_right
|
|
121
|
+
action_names = ["move_forward", "move_forward", "turn_right"]
|
|
122
|
+
|
|
123
|
+
for i, action in enumerate(actions):
|
|
124
|
+
obs, _, _, _, _ = env.step(action)
|
|
125
|
+
obs_hwc = np.transpose(obs, (1, 2, 0))
|
|
126
|
+
Image.fromarray(obs_hwc).save(
|
|
127
|
+
f"{output_dir}/gymnasium_step_{i + 1}_{action_names[i]}.png"
|
|
128
|
+
)
|
|
129
|
+
|
|
130
|
+
# === RENDER_ON_POS EXAMPLES ===
|
|
131
|
+
|
|
132
|
+
# Define test positions based on variant
|
|
133
|
+
if variant == "NineRooms":
|
|
134
|
+
test_positions = [
|
|
135
|
+
[7.5, 0.0, 7.5], # top-middle room center
|
|
136
|
+
[37.5, 0.0, 37.5], # bottom-right room center
|
|
137
|
+
[22.5, 0.0, 22.5], # environment center
|
|
138
|
+
[7.5, 0.0, 22.5], # middle-left room center
|
|
139
|
+
]
|
|
140
|
+
elif variant == "SpiralNineRooms":
|
|
141
|
+
test_positions = [
|
|
142
|
+
[7.5, 0.0, 7.5], # top-left room (spiral start)
|
|
143
|
+
[37.5, 0.0, 37.5], # bottom-right room (spiral end)
|
|
144
|
+
[22.5, 0.0, 7.5], # top-right room
|
|
145
|
+
[7.5, 0.0, 37.5], # bottom-left room
|
|
146
|
+
]
|
|
147
|
+
else: # TwentyFiveRooms
|
|
148
|
+
test_positions = [
|
|
149
|
+
[37.5, 0.0, 37.5], # room (1,1) - near corner
|
|
150
|
+
[112.5, 0.0, 112.5], # room (4,4) - far corner
|
|
151
|
+
[75.0, 0.0, 75.0], # center room (2,2)
|
|
152
|
+
[37.5, 0.0, 112.5], # room (1,4) - opposite corner
|
|
153
|
+
]
|
|
154
|
+
|
|
155
|
+
for i, pos in enumerate(test_positions):
|
|
156
|
+
render_obs = env.render_on_pos(pos)
|
|
157
|
+
|
|
158
|
+
# Convert CHW to HWC for PIL
|
|
159
|
+
if len(render_obs.shape) == 3 and render_obs.shape[0] == 3:
|
|
160
|
+
render_obs = np.transpose(render_obs, (1, 2, 0))
|
|
161
|
+
|
|
162
|
+
Image.fromarray(render_obs).save(f"{output_dir}/render_on_pos_{i + 1}.png")
|
|
163
|
+
|
|
164
|
+
env.close()
|
|
165
|
+
return output_dir
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
def main():
|
|
169
|
+
parser = argparse.ArgumentParser(
|
|
170
|
+
description="Generate observations for Nine Rooms environment variants"
|
|
171
|
+
)
|
|
172
|
+
parser.add_argument(
|
|
173
|
+
"variant",
|
|
174
|
+
choices=["NineRooms", "SpiralNineRooms", "TwentyFiveRooms"],
|
|
175
|
+
help="Environment variant to use",
|
|
176
|
+
)
|
|
177
|
+
parser.add_argument(
|
|
178
|
+
"--output-dir",
|
|
179
|
+
type=str,
|
|
180
|
+
default=None,
|
|
181
|
+
help="Output directory for images (default: {variant}_observations)",
|
|
182
|
+
)
|
|
183
|
+
parser.add_argument(
|
|
184
|
+
"--high-res-full",
|
|
185
|
+
action="store_true",
|
|
186
|
+
help="Generate 512x512 high-resolution full environment views",
|
|
187
|
+
)
|
|
188
|
+
|
|
189
|
+
args = parser.parse_args()
|
|
190
|
+
|
|
191
|
+
output_dir = generate_observations(
|
|
192
|
+
args.variant, args.output_dir, args.high_res_full
|
|
193
|
+
)
|
|
194
|
+
|
|
195
|
+
return output_dir
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
if __name__ == "__main__":
|
|
199
|
+
main()
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"""Image transformation wrappers for Nine Rooms environments."""
|
|
2
|
+
|
|
3
|
+
import gymnasium as gym
|
|
4
|
+
import numpy as np
|
|
5
|
+
from gymnasium import spaces
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class ImageToPyTorch(gym.ObservationWrapper):
|
|
9
|
+
"""Convert HWC to CHW format for PyTorch compatibility."""
|
|
10
|
+
|
|
11
|
+
def __init__(self, env):
|
|
12
|
+
"""
|
|
13
|
+
Initialize PyTorch-compatible image transformation wrapper.
|
|
14
|
+
|
|
15
|
+
Transforms observation space from HWC (Height, Width, Channels) format
|
|
16
|
+
to CHW (Channels, Height, Width) format expected by PyTorch models.
|
|
17
|
+
|
|
18
|
+
Args:
|
|
19
|
+
env: The environment to wrap
|
|
20
|
+
"""
|
|
21
|
+
super(ImageToPyTorch, self).__init__(env)
|
|
22
|
+
obs_shape = self.observation_space.shape
|
|
23
|
+
self.observation_space = spaces.Box(
|
|
24
|
+
low=0,
|
|
25
|
+
high=255,
|
|
26
|
+
shape=(obs_shape[2], obs_shape[0], obs_shape[1]),
|
|
27
|
+
dtype=np.uint8,
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
def observation(self, observation):
|
|
31
|
+
"""
|
|
32
|
+
Transform observation from HWC to CHW format.
|
|
33
|
+
|
|
34
|
+
Args:
|
|
35
|
+
observation: Input observation in HWC format (H, W, C)
|
|
36
|
+
|
|
37
|
+
Returns:
|
|
38
|
+
np.ndarray: Observation in CHW format (C, H, W)
|
|
39
|
+
"""
|
|
40
|
+
return np.transpose(observation, (2, 0, 1))
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
Metadata-Version: 2.3
|
|
2
|
+
Name: miniworld-maze
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: Multi-room maze environments from the DrStrategy paper for reinforcement learning research
|
|
5
|
+
Keywords: reinforcement-learning,environment,gymnasium,multi-room-maze,drstrategy,maze-navigation,partial-observability,3d-environments
|
|
6
|
+
Author: Tim Joseph
|
|
7
|
+
Author-email: Tim Joseph <tim@mctigger.com>
|
|
8
|
+
License: MIT License
|
|
9
|
+
|
|
10
|
+
Copyright (c) 2025 DrStrategy Research Team
|
|
11
|
+
|
|
12
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
13
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
14
|
+
in the Software without restriction, including without limitation the rights
|
|
15
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
16
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
17
|
+
furnished to do so, subject to the following conditions:
|
|
18
|
+
|
|
19
|
+
The above copyright notice and this permission notice shall be included in all
|
|
20
|
+
copies or substantial portions of the Software.
|
|
21
|
+
|
|
22
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
23
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
24
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
25
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
26
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
27
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
28
|
+
SOFTWARE.
|
|
29
|
+
Classifier: Development Status :: 4 - Beta
|
|
30
|
+
Classifier: Intended Audience :: Science/Research
|
|
31
|
+
Classifier: Intended Audience :: Developers
|
|
32
|
+
Classifier: Operating System :: OS Independent
|
|
33
|
+
Classifier: Programming Language :: Python :: 3
|
|
34
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
35
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
36
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
37
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
38
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
39
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
40
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
41
|
+
Classifier: Environment :: Console
|
|
42
|
+
Classifier: Typing :: Typed
|
|
43
|
+
Requires-Dist: gymnasium>=1.0.0,<2.0.0
|
|
44
|
+
Requires-Dist: numpy>=1.20.0,<3.0.0
|
|
45
|
+
Requires-Dist: opencv-python>=4.5.0,<5.0.0
|
|
46
|
+
Requires-Dist: pillow>=8.0.0,<11.0.0
|
|
47
|
+
Requires-Dist: pyopengl>=3.1.0,<4.0.0
|
|
48
|
+
Requires-Dist: pyglet>=1.5.0,<2.0.0
|
|
49
|
+
Requires-Dist: black>=22.0,<25.0 ; extra == 'dev'
|
|
50
|
+
Requires-Dist: isort>=5.10,<6.0 ; extra == 'dev'
|
|
51
|
+
Requires-Dist: flake8>=4.0,<7.0 ; extra == 'dev'
|
|
52
|
+
Requires-Dist: build>=0.8.0,<2.0.0 ; extra == 'dev'
|
|
53
|
+
Requires-Dist: twine>=4.0.0,<6.0.0 ; extra == 'dev'
|
|
54
|
+
Requires-Dist: mujoco>=2.3.0,<4.0.0 ; extra == 'mujoco'
|
|
55
|
+
Requires-Python: >=3.8
|
|
56
|
+
Project-URL: Bug Tracker, https://github.com/mctigger/miniworld-maze/issues
|
|
57
|
+
Project-URL: Documentation, https://github.com/mctigger/miniworld-maze#readme
|
|
58
|
+
Project-URL: Homepage, https://github.com/mctigger/miniworld-maze
|
|
59
|
+
Project-URL: Repository, https://github.com/mctigger/miniworld-maze
|
|
60
|
+
Provides-Extra: dev
|
|
61
|
+
Provides-Extra: mujoco
|
|
62
|
+
Description-Content-Type: text/markdown
|
|
63
|
+
|
|
64
|
+
# MiniWorld DrStrategy - Multi-Room Maze Environment
|
|
65
|
+
|
|
66
|
+
A refactored implementation of Dr. Strategy's MiniWorld-based maze environments with updated dependencies and modern Python packaging. Based on the now-deprecated [MiniWorld](https://github.com/Farama-Foundation/Miniworld) project and the original [DrStrategy implementation](https://github.com/ahn-ml/drstrategy).
|
|
67
|
+
|
|
68
|
+
## Environment Observations
|
|
69
|
+
|
|
70
|
+
### Environment Views
|
|
71
|
+
Full environment layout and render-on-position views:
|
|
72
|
+
|
|
73
|
+
| Full Environment | Partial Top-Down Observations | Partial First-Person Observations |
|
|
74
|
+
|---|---|---|
|
|
75
|
+
|  |   |   |
|
|
76
|
+
|
|
77
|
+
## Installation
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
pip install miniworld-maze
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Usage
|
|
84
|
+
|
|
85
|
+
```python
|
|
86
|
+
from miniworld_drstrategy import create_nine_rooms_env
|
|
87
|
+
|
|
88
|
+
# Create environment
|
|
89
|
+
env = create_nine_rooms_env(variant="NineRooms", size=64)
|
|
90
|
+
obs, info = env.reset()
|
|
91
|
+
|
|
92
|
+
# Take actions
|
|
93
|
+
action = env.action_space.sample()
|
|
94
|
+
obs, reward, terminated, truncated, info = env.step(action)
|
|
95
|
+
|
|
96
|
+
env.close()
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Environment Variants
|
|
100
|
+
|
|
101
|
+
- **NineRooms**: 3×3 grid layout
|
|
102
|
+
- **SpiralNineRooms**: Spiral connection pattern
|
|
103
|
+
- **TwentyFiveRooms**: 5×5 grid layout
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
## License
|
|
107
|
+
|
|
108
|
+
MIT License - see LICENSE file for details.
|