miniworld-maze 1.0.0__tar.gz
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-1.0.0/LICENSE +21 -0
- miniworld_maze-1.0.0/PKG-INFO +108 -0
- miniworld_maze-1.0.0/README.md +45 -0
- miniworld_maze-1.0.0/examples/README.md +125 -0
- miniworld_maze-1.0.0/examples/benchmark_rendering.py +233 -0
- miniworld_maze-1.0.0/examples/generate_observations.py +187 -0
- miniworld_maze-1.0.0/examples/live_control_opencv.py +574 -0
- miniworld_maze-1.0.0/examples/observation_level_demo.py +66 -0
- miniworld_maze-1.0.0/pyproject.toml +100 -0
- miniworld_maze-1.0.0/src/miniworld_maze/__init__.py +37 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/__init__.py +8 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/constants.py +130 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/README.md +1 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/__init__.py +4 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/base_env.py +52 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/entities/__init__.py +7 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/entities/agent.py +117 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/entities/base_entity.py +135 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/entities/objects.py +116 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/entity_manager.py +358 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/envs/__init__.py +3 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/math.py +83 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/objmesh.py +294 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/occlusion_queries.py +97 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/opengl.py +21 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/params.py +128 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/random.py +105 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/rendering/__init__.py +7 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/rendering/drawing.py +77 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/rendering/framebuffer.py +260 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/rendering/texture.py +101 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/rendering_engine.py +293 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/room.py +330 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/texture_utils.py +64 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/airduct_grate_1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/asphalt_1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/beanpaste_1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/beige_1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/black_1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/blueberry_1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/brick_wall_1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/cardboard_1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/cardboard_2.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/cardboard_3.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/cardboard_4.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/ceiling_tile_noborder_1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/ceiling_tiles_1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/cinder_blocks_1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/cobaltgreen_1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/concrete_1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/concrete_2.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/concrete_3.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/concrete_4.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/concrete_tiles_1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/copperred_1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/crimson_1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/door_doom_1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/door_doom_2.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/door_garage_red.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/door_garage_white.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/door_steel_brown.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/door_steel_grey.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/door_steel_red.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/drywall_1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/floor_tiles_bw_1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/floor_tiles_white.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/grass_1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/grass_2.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/lava_1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/lava_2.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/lemongrass_1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/lightbeige_1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/lightcobaltgreen_1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/lightgray_1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/lightnavyblue_1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/lightskyblue_1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/lime_1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/logo_mila_1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/magenta_1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/marble_1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/marble_2.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/metal_grill_1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/metal_grill_2.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/morningglory_1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/navyblue_1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/oakbrown_1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/orange_1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/orchid_1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/picket_fence_1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/adelaide_hanscom1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/adelaide_hanscom1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alessandro_allori1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alessandro_allori1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alessandro_allori2.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alessandro_allori2.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alexandre_cabanel1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alexandre_cabanel1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alexei_harlamov1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alexei_harlamov1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alexey_petrovich_antropov1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alexey_petrovich_antropov1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alice_pike_barney1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alice_pike_barney1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/aman_theodor1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/aman_theodor1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/antonello_messina1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/antonello_messina1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/antonio_herrera_toro1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/antonio_herrera_toro1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/benjamin-constant1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/benjamin-constant1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/benoist_marie-guillemine1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/benoist_marie-guillemine1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/bouguereau_william-adolphe1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/bouguereau_william-adolphe1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/byron1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/byron1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/carl_fredric_breda1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/carl_fredric_breda1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/carl_fredric_breda2.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/carl_fredric_breda2.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/cramacj_lucas1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/cramacj_lucas1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/cranach_lucas2.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/cranach_lucas2.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/cristobal_rojas1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/cristobal_rojas1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/delacroix_eugene_ferdinand_victor1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/delacroix_eugene_ferdinand_victor1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/domenikos_theotokopoulos1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/domenikos_theotokopoulos1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/edmund_blair_leighton1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/edmund_blair_leighton1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/edmund_blair_leighton2.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/edmund_blair_leighton2.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/edwin_longsden_long1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/edwin_longsden_long1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/falero_luis_ricardo1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/falero_luis_ricardo1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/felix_bonfils1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/felix_bonfils1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/francesco_hayez1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/francesco_hayez1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/francisco_goya_lucientes1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/francisco_goya_lucientes1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/francisco_goya_lucientes2.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/francisco_goya_lucientes2.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/francisco_zurbaran1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/francisco_zurbaran1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/franz_von_defregger1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/franz_von_defregger1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/franz_von_defregger2.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/franz_von_defregger2.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/franz_von_defregger3.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/franz_von_defregger3.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/frederic_westin1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/frederic_westin1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/frederic_yates1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/frederic_yates1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/frederick_leighton1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/frederick_leighton1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/gaston_bussiere1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/gaston_bussiere1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/george_henry_hall1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/george_henry_hall1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/giovanni_battista_tiepolo1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/giovanni_battista_tiepolo1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/giovanni_bellini1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/giovanni_bellini1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/hans_holbein1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/hans_holbein1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/hayez_francesco1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/hayez_francesco1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/henryk_siemiradzki1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/henryk_siemiradzki1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/ilja_jefimowitsch_repin1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/ilja_jefimowitsch_repin1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/james_carrol_beckwith1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/james_carrol_beckwith1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-baptiste-camille_corot1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-baptiste-camille_corot1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-baptiste-camille_corot2.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-baptiste-camille_corot2.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome2.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome2.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome3.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome3.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome4.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome4.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/john_william_godward1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/john_william_godward1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/john_william_godward2.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/john_william_godward2.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/john_william_godward3.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/john_william_godward3.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/julije_klovic1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/julije_klovic1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/juriaen_streek1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/juriaen_streek1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/kiprenskij_orest_adamovic1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/kiprenskij_orest_adamovic1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/konstantin_makovsky1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/konstantin_makovsky1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/lefebvre_jules_joseph1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/lefebvre_jules_joseph1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/leon-francois_comerre1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/leon-francois_comerre1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/leopold_loffler1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/leopold_loffler1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/lewis_john_frederick1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/lewis_john_frederick1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/madrazo_garreta_raimundo1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/madrazo_garreta_raimundo1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/marie_bashkirtseff1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/marie_bashkirtseff1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/moritz_kellerhoven1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/moritz_kellerhoven1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/nathaniel_jocelyn1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/nathaniel_jocelyn1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/nikolai_alexandrowitsch_jaroschenko1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/nikolai_alexandrowitsch_jaroschenko1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/nils_johan_olsson_blommer1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/nils_johan_olsson_blommer1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/paolo_veronese1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/paolo_veronese1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/parmigianino1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/parmigianino1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/paul_cesar_helleu1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/paul_cesar_helleu1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/regnault_henri1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/regnault_henri1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/richard_bergh1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/richard_bergh1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/richard_bergh2.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/richard_bergh2.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/robert_dampier1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/robert_dampier1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/robert_lefevre1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/robert_lefevre1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/robert_leopold1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/robert_leopold1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/sichel_nathanael1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/sichel_nathanael1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/svetoslav_roerich1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/svetoslav_roerich1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/velazquez_diego1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/velazquez_diego1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/viktor_vasnetsov1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/viktor_vasnetsov1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/william-adolphe_bouguereau1.license +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/william-adolphe_bouguereau1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/realblueberry_1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/redbean_1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/rock_1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/seablue_1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/silver_1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/skyblue_1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/slime_1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/stucco_1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/sunnyyellow_1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/turquoise_1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/violet_1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/water_1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/water_2.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/water_3.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/white_1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/wood_1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/wood_2.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/wood_planks_1.png +0 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/unified_env.py +1364 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/utils.py +37 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/wrappers.py +2 -0
- miniworld_maze-1.0.0/src/miniworld_maze/core/observation_types.py +32 -0
- miniworld_maze-1.0.0/src/miniworld_maze/environments/__init__.py +16 -0
- miniworld_maze-1.0.0/src/miniworld_maze/environments/base_grid_rooms.py +204 -0
- miniworld_maze-1.0.0/src/miniworld_maze/environments/factory.py +155 -0
- miniworld_maze-1.0.0/src/miniworld_maze/environments/nine_rooms.py +74 -0
- miniworld_maze-1.0.0/src/miniworld_maze/environments/spiral_nine_rooms.py +70 -0
- miniworld_maze-1.0.0/src/miniworld_maze/environments/twenty_five_rooms.py +122 -0
- miniworld_maze-1.0.0/src/miniworld_maze/tools/__init__.py +5 -0
- miniworld_maze-1.0.0/src/miniworld_maze/tools/generate_observations.py +199 -0
- miniworld_maze-1.0.0/src/miniworld_maze/wrappers/__init__.py +5 -0
- miniworld_maze-1.0.0/src/miniworld_maze/wrappers/image_transforms.py +40 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 DrStrategy Research Team
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -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.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# MiniWorld DrStrategy - Multi-Room Maze Environment
|
|
2
|
+
|
|
3
|
+
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).
|
|
4
|
+
|
|
5
|
+
## Environment Observations
|
|
6
|
+
|
|
7
|
+
### Environment Views
|
|
8
|
+
Full environment layout and render-on-position views:
|
|
9
|
+
|
|
10
|
+
| Full Environment | Partial Top-Down Observations | Partial First-Person Observations |
|
|
11
|
+
|---|---|---|
|
|
12
|
+
|  |   |   |
|
|
13
|
+
|
|
14
|
+
## Installation
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
pip install miniworld-maze
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Usage
|
|
21
|
+
|
|
22
|
+
```python
|
|
23
|
+
from miniworld_drstrategy import create_nine_rooms_env
|
|
24
|
+
|
|
25
|
+
# Create environment
|
|
26
|
+
env = create_nine_rooms_env(variant="NineRooms", size=64)
|
|
27
|
+
obs, info = env.reset()
|
|
28
|
+
|
|
29
|
+
# Take actions
|
|
30
|
+
action = env.action_space.sample()
|
|
31
|
+
obs, reward, terminated, truncated, info = env.step(action)
|
|
32
|
+
|
|
33
|
+
env.close()
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Environment Variants
|
|
37
|
+
|
|
38
|
+
- **NineRooms**: 3Ć3 grid layout
|
|
39
|
+
- **SpiralNineRooms**: Spiral connection pattern
|
|
40
|
+
- **TwentyFiveRooms**: 5Ć5 grid layout
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
## License
|
|
44
|
+
|
|
45
|
+
MIT License - see LICENSE file for details.
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
# Examples
|
|
2
|
+
|
|
3
|
+
This directory contains example scripts demonstrating the usage and performance of the Nine Rooms environments.
|
|
4
|
+
|
|
5
|
+
## Scripts
|
|
6
|
+
|
|
7
|
+
### live_control_opencv.py ā **RECOMMENDED**
|
|
8
|
+
|
|
9
|
+
Real-time dual-view OpenCV live control with ego view and top-down map side by side.
|
|
10
|
+
|
|
11
|
+
**Usage:**
|
|
12
|
+
```bash
|
|
13
|
+
# Dual-view window with first-person ego view + top-down map
|
|
14
|
+
python examples/live_control_opencv.py --variant NineRooms --size 128
|
|
15
|
+
|
|
16
|
+
# Use top-down partial view as ego view + full map
|
|
17
|
+
python examples/live_control_opencv.py --variant NineRooms --size 128 --obs-level TOP_DOWN_PARTIAL
|
|
18
|
+
|
|
19
|
+
# Different environment variants
|
|
20
|
+
python examples/live_control_opencv.py --variant TwentyFiveRooms --size 128
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
**Controls:**
|
|
24
|
+
- `W/A/S/D` - Move forward/turn left/move backward/turn right
|
|
25
|
+
- `SPACE` - Pick up object, `X` - Drop object, `E` - Toggle/activate
|
|
26
|
+
- `R` - Reset environment, `1/2/3` - Switch environment variants
|
|
27
|
+
- `ESC/Q` - Quit
|
|
28
|
+
|
|
29
|
+
**Requirements:**
|
|
30
|
+
- Display environment (not headless)
|
|
31
|
+
- Click OpenCV window to focus for keyboard input
|
|
32
|
+
|
|
33
|
+
**Features:**
|
|
34
|
+
- **Dual synchronized views**: Ego view (configurable) + top-down full map
|
|
35
|
+
- **Real-time agent tracking**: See your position and orientation on the map
|
|
36
|
+
- **Perfect synchronization**: Both environments step together automatically
|
|
37
|
+
- **No OpenGL conflicts**: Reliable operation using OpenCV
|
|
38
|
+
- **Multiple view combinations**: First-person + map, top-down + map, etc.
|
|
39
|
+
|
|
40
|
+
### generate_observations.py
|
|
41
|
+
|
|
42
|
+
Generate comprehensive observation datasets for all environment variants.
|
|
43
|
+
|
|
44
|
+
**Usage:**
|
|
45
|
+
```bash
|
|
46
|
+
# Generate observations for NineRooms (default 64x64)
|
|
47
|
+
python examples/generate_observations.py NineRooms
|
|
48
|
+
|
|
49
|
+
# Generate observations for SpiralNineRooms with custom output directory
|
|
50
|
+
python examples/generate_observations.py SpiralNineRooms --output-dir my_observations
|
|
51
|
+
|
|
52
|
+
# Generate high-resolution full environment views (512x512)
|
|
53
|
+
python examples/generate_observations.py TwentyFiveRooms --high-res-full
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
**Generated observations:**
|
|
57
|
+
- Full environment views (with/without agent)
|
|
58
|
+
- Partial observations from different positions
|
|
59
|
+
- Standard Gymnasium observations after actions
|
|
60
|
+
- render_on_pos examples from strategic locations
|
|
61
|
+
|
|
62
|
+
### benchmark_rendering.py
|
|
63
|
+
|
|
64
|
+
Benchmark rendering performance across different observation sizes and environment variants.
|
|
65
|
+
|
|
66
|
+
**Usage:**
|
|
67
|
+
```bash
|
|
68
|
+
# Quick benchmark of NineRooms with common sizes
|
|
69
|
+
python examples/benchmark_rendering.py --quick --variant NineRooms
|
|
70
|
+
|
|
71
|
+
# Comprehensive benchmark of all variants and sizes
|
|
72
|
+
python examples/benchmark_rendering.py --all-variants --sizes 32 64 128 256 --steps 100
|
|
73
|
+
|
|
74
|
+
# Custom benchmark with specific parameters
|
|
75
|
+
python examples/benchmark_rendering.py --variant SpiralNineRooms --sizes 64 128 256 --steps 50
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
**Features:**
|
|
79
|
+
- FPS measurement across different observation sizes
|
|
80
|
+
- Performance comparison between environment variants
|
|
81
|
+
- Memory usage analysis
|
|
82
|
+
- Detailed timing statistics (min/max/avg/std)
|
|
83
|
+
- Scaling analysis (how performance scales with resolution)
|
|
84
|
+
|
|
85
|
+
### observation_level_demo.py
|
|
86
|
+
|
|
87
|
+
Demonstrates different observation levels and their visual differences.
|
|
88
|
+
|
|
89
|
+
**Usage:**
|
|
90
|
+
```bash
|
|
91
|
+
python examples/observation_level_demo.py
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
**Features:**
|
|
95
|
+
- Shows first-person, top-down partial, and top-down full views
|
|
96
|
+
- Saves comparison images for each observation level
|
|
97
|
+
- Demonstrates the impact of different observation settings
|
|
98
|
+
|
|
99
|
+
## Key Benefits Demonstrated
|
|
100
|
+
|
|
101
|
+
### Interactive Control
|
|
102
|
+
- **Dual-View Navigation**: Ego view + top-down map displayed simultaneously
|
|
103
|
+
- **Real-time Agent Tracking**: Always see your position and orientation on the map
|
|
104
|
+
- **Synchronized Environments**: Both views update together for perfect consistency
|
|
105
|
+
- **No OpenGL Conflicts**: Reliable operation using OpenCV for display
|
|
106
|
+
- **Multiple View Combinations**: First-person + map, top-down + map, etc.
|
|
107
|
+
|
|
108
|
+
### Direct Rendering Performance
|
|
109
|
+
- **No Resize Overhead**: Environments render directly at requested size
|
|
110
|
+
- **Excellent Scaling**: 256x256 images only ~1.2x slower than 32x32 despite 64x more pixels
|
|
111
|
+
- **High Frame Rates**: 60-80 FPS for standard sizes (64x64, 128x128)
|
|
112
|
+
- **Flexible Resolutions**: Any custom size supported without performance penalty
|
|
113
|
+
|
|
114
|
+
### Environment Variants
|
|
115
|
+
- **NineRooms**: ~73 FPS average (fastest, simplest 3x3 grid)
|
|
116
|
+
- **SpiralNineRooms**: ~62 FPS average (moderate complexity)
|
|
117
|
+
- **TwentyFiveRooms**: ~26 FPS average (most complex, 5x5 grid with 25 rooms)
|
|
118
|
+
|
|
119
|
+
## Usage Tips
|
|
120
|
+
|
|
121
|
+
1. **For Interactive Exploration**: Use `live_control_opencv.py` for real-time navigation
|
|
122
|
+
2. **For Research**: Use higher resolutions (256x256+) for detailed analysis
|
|
123
|
+
3. **For Training**: Use standard sizes (64x64, 128x128) for optimal speed
|
|
124
|
+
4. **For Visualization**: Use `generate_observations.py` to create comprehensive datasets
|
|
125
|
+
5. **For Optimization**: Use `benchmark_rendering.py` to find optimal settings
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Benchmark rendering performance (FPS) for various observation sizes.
|
|
4
|
+
|
|
5
|
+
This script tests the direct rendering performance of the Nine Rooms environments
|
|
6
|
+
across different observation sizes to demonstrate the efficiency of the
|
|
7
|
+
direct rendering approach vs the old resize-based approach.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
import time
|
|
11
|
+
import argparse
|
|
12
|
+
import numpy as np
|
|
13
|
+
from miniworld_drstrategy.environments.factory import create_nine_rooms_env
|
|
14
|
+
from miniworld_drstrategy.core.constants import (
|
|
15
|
+
DEFAULT_BENCHMARK_STEPS, DEFAULT_WARMUP_STEPS, RGB_CHANNELS, FLOAT32_BYTES, MB_TO_BYTES
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def benchmark_rendering_performance(variant="NineRooms", sizes=None, num_steps=DEFAULT_BENCHMARK_STEPS, num_warmup=DEFAULT_WARMUP_STEPS):
|
|
20
|
+
"""
|
|
21
|
+
Benchmark rendering performance across different observation sizes.
|
|
22
|
+
|
|
23
|
+
Args:
|
|
24
|
+
variant: Environment variant to test
|
|
25
|
+
sizes: List of observation sizes to test
|
|
26
|
+
num_steps: Number of steps to run for timing
|
|
27
|
+
num_warmup: Number of warmup steps (not timed)
|
|
28
|
+
|
|
29
|
+
Returns:
|
|
30
|
+
Dictionary with benchmark results
|
|
31
|
+
"""
|
|
32
|
+
if sizes is None:
|
|
33
|
+
sizes = [32, 48, 64, 96, 128, 192, 256]
|
|
34
|
+
|
|
35
|
+
print(f"š Benchmarking {variant} rendering performance...")
|
|
36
|
+
print(f"š Testing sizes: {sizes}")
|
|
37
|
+
print(f"ā±ļø Steps per test: {num_steps} (+ {num_warmup} warmup)")
|
|
38
|
+
print("=" * 60)
|
|
39
|
+
|
|
40
|
+
results = {}
|
|
41
|
+
|
|
42
|
+
for size in sizes:
|
|
43
|
+
print(f"\nš Testing {size}x{size} observations...")
|
|
44
|
+
|
|
45
|
+
# Create environment with specific observation size
|
|
46
|
+
env = create_nine_rooms_env(variant, size=size)
|
|
47
|
+
|
|
48
|
+
# Warmup phase
|
|
49
|
+
print(f" š„ Warming up ({num_warmup} steps)...")
|
|
50
|
+
obs, info = env.reset(seed=42)
|
|
51
|
+
for _ in range(num_warmup):
|
|
52
|
+
action = env.action_space.sample()
|
|
53
|
+
obs, reward, terminated, truncated, info = env.step(action)
|
|
54
|
+
if terminated or truncated:
|
|
55
|
+
obs, info = env.reset()
|
|
56
|
+
|
|
57
|
+
# Benchmark phase
|
|
58
|
+
print(f" ā±ļø Benchmarking ({num_steps} steps)...")
|
|
59
|
+
start_time = time.time()
|
|
60
|
+
|
|
61
|
+
step_times = []
|
|
62
|
+
for i in range(num_steps):
|
|
63
|
+
step_start = time.time()
|
|
64
|
+
action = env.action_space.sample()
|
|
65
|
+
obs, reward, terminated, truncated, info = env.step(action)
|
|
66
|
+
if terminated or truncated:
|
|
67
|
+
obs, info = env.reset()
|
|
68
|
+
step_end = time.time()
|
|
69
|
+
step_times.append(step_end - step_start)
|
|
70
|
+
|
|
71
|
+
end_time = time.time()
|
|
72
|
+
total_time = end_time - start_time
|
|
73
|
+
|
|
74
|
+
env.close()
|
|
75
|
+
|
|
76
|
+
# Calculate statistics
|
|
77
|
+
fps = num_steps / total_time
|
|
78
|
+
avg_step_time = np.mean(step_times)
|
|
79
|
+
min_step_time = np.min(step_times)
|
|
80
|
+
max_step_time = np.max(step_times)
|
|
81
|
+
std_step_time = np.std(step_times)
|
|
82
|
+
|
|
83
|
+
# Memory per observation
|
|
84
|
+
pixels_per_obs = size * size * RGB_CHANNELS
|
|
85
|
+
memory_mb = (pixels_per_obs * FLOAT32_BYTES) / MB_TO_BYTES
|
|
86
|
+
|
|
87
|
+
results[size] = {
|
|
88
|
+
'fps': fps,
|
|
89
|
+
'avg_step_time': avg_step_time,
|
|
90
|
+
'min_step_time': min_step_time,
|
|
91
|
+
'max_step_time': max_step_time,
|
|
92
|
+
'std_step_time': std_step_time,
|
|
93
|
+
'total_time': total_time,
|
|
94
|
+
'memory_mb': memory_mb,
|
|
95
|
+
'pixels': size * size
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
print(f" ā
{fps:.2f} FPS (avg: {avg_step_time*1000:.2f}ms/step)")
|
|
99
|
+
|
|
100
|
+
return results
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
def print_benchmark_results(results, variant):
|
|
104
|
+
"""Print detailed benchmark results in a formatted table."""
|
|
105
|
+
|
|
106
|
+
print(f"\n{'='*80}")
|
|
107
|
+
print(f"š RENDERING PERFORMANCE BENCHMARK RESULTS - {variant}")
|
|
108
|
+
print(f"{'='*80}")
|
|
109
|
+
|
|
110
|
+
# Table header
|
|
111
|
+
print(f"{'Size':>8} {'Pixels':>10} {'FPS':>8} {'Avg ms':>8} {'Min ms':>8} {'Max ms':>8} {'Std ms':>8} {'Memory':>8}")
|
|
112
|
+
print("-" * 80)
|
|
113
|
+
|
|
114
|
+
# Table rows
|
|
115
|
+
for size, data in sorted(results.items()):
|
|
116
|
+
print(f"{size:>8} {data['pixels']:>10,} {data['fps']:>8.1f} {data['avg_step_time']*1000:>8.1f} "
|
|
117
|
+
f"{data['min_step_time']*1000:>8.1f} {data['max_step_time']*1000:>8.1f} "
|
|
118
|
+
f"{data['std_step_time']*1000:>8.1f} {data['memory_mb']:>7.1f}MB")
|
|
119
|
+
|
|
120
|
+
print("-" * 80)
|
|
121
|
+
|
|
122
|
+
# Performance insights
|
|
123
|
+
print(f"\nšÆ PERFORMANCE INSIGHTS:")
|
|
124
|
+
|
|
125
|
+
# Find best and worst performers
|
|
126
|
+
best_fps = max(results.values(), key=lambda x: x['fps'])
|
|
127
|
+
worst_fps = min(results.values(), key=lambda x: x['fps'])
|
|
128
|
+
best_size = next(size for size, data in results.items() if data['fps'] == best_fps['fps'])
|
|
129
|
+
worst_size = next(size for size, data in results.items() if data['fps'] == worst_fps['fps'])
|
|
130
|
+
|
|
131
|
+
print(f" š Highest FPS: {best_size}x{best_size} at {best_fps['fps']:.1f} FPS")
|
|
132
|
+
print(f" š Lowest FPS: {worst_size}x{worst_size} at {worst_fps['fps']:.1f} FPS")
|
|
133
|
+
|
|
134
|
+
# Calculate performance scaling
|
|
135
|
+
size_32 = results.get(32)
|
|
136
|
+
size_256 = results.get(256)
|
|
137
|
+
if size_32 and size_256:
|
|
138
|
+
pixel_ratio = (256 * 256) / (32 * 32)
|
|
139
|
+
fps_ratio = size_32['fps'] / size_256['fps']
|
|
140
|
+
print(f" š Scaling: 256x256 has {pixel_ratio:.1f}x more pixels but only {fps_ratio:.1f}x slower")
|
|
141
|
+
|
|
142
|
+
# Memory usage
|
|
143
|
+
total_memory = sum(data['memory_mb'] for data in results.values())
|
|
144
|
+
print(f" š¾ Total memory tested: {total_memory:.1f}MB across all sizes")
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
def benchmark_environment_variants(sizes=None, num_steps=50):
|
|
148
|
+
"""Benchmark all environment variants."""
|
|
149
|
+
|
|
150
|
+
if sizes is None:
|
|
151
|
+
sizes = [64, 128, 256]
|
|
152
|
+
|
|
153
|
+
variants = ["NineRooms", "SpiralNineRooms", "TwentyFiveRooms"]
|
|
154
|
+
all_results = {}
|
|
155
|
+
|
|
156
|
+
print(f"š COMPREHENSIVE ENVIRONMENT BENCHMARK")
|
|
157
|
+
print(f"Testing variants: {variants}")
|
|
158
|
+
print(f"Testing sizes: {sizes}")
|
|
159
|
+
print("=" * 80)
|
|
160
|
+
|
|
161
|
+
for variant in variants:
|
|
162
|
+
results = benchmark_rendering_performance(
|
|
163
|
+
variant=variant,
|
|
164
|
+
sizes=sizes,
|
|
165
|
+
num_steps=num_steps,
|
|
166
|
+
num_warmup=5
|
|
167
|
+
)
|
|
168
|
+
all_results[variant] = results
|
|
169
|
+
|
|
170
|
+
# Quick summary
|
|
171
|
+
avg_fps = np.mean([data['fps'] for data in results.values()])
|
|
172
|
+
print(f"\nš {variant} average FPS across all sizes: {avg_fps:.1f}")
|
|
173
|
+
|
|
174
|
+
# Comparative analysis
|
|
175
|
+
print(f"\n{'='*80}")
|
|
176
|
+
print("š VARIANT COMPARISON")
|
|
177
|
+
print("=" * 80)
|
|
178
|
+
|
|
179
|
+
for size in sizes:
|
|
180
|
+
print(f"\nSize {size}x{size}:")
|
|
181
|
+
for variant in variants:
|
|
182
|
+
if size in all_results[variant]:
|
|
183
|
+
fps = all_results[variant][size]['fps']
|
|
184
|
+
print(f" {variant:20}: {fps:6.1f} FPS")
|
|
185
|
+
|
|
186
|
+
return all_results
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
def main():
|
|
190
|
+
parser = argparse.ArgumentParser(description='Benchmark Nine Rooms rendering performance')
|
|
191
|
+
parser.add_argument('--variant', default='NineRooms',
|
|
192
|
+
choices=['NineRooms', 'SpiralNineRooms', 'TwentyFiveRooms'],
|
|
193
|
+
help='Environment variant to benchmark')
|
|
194
|
+
parser.add_argument('--sizes', nargs='+', type=int,
|
|
195
|
+
default=[32, 48, 64, 96, 128, 192, 256],
|
|
196
|
+
help='Observation sizes to test')
|
|
197
|
+
parser.add_argument('--steps', type=int, default=1000,
|
|
198
|
+
help='Number of steps per benchmark')
|
|
199
|
+
parser.add_argument('--all-variants', action='store_true',
|
|
200
|
+
help='Benchmark all environment variants')
|
|
201
|
+
parser.add_argument('--quick', action='store_true',
|
|
202
|
+
help='Quick benchmark with fewer steps and sizes')
|
|
203
|
+
|
|
204
|
+
args = parser.parse_args()
|
|
205
|
+
|
|
206
|
+
if args.quick:
|
|
207
|
+
args.steps = 30
|
|
208
|
+
args.sizes = [64, 128, 256]
|
|
209
|
+
|
|
210
|
+
print("š® Nine Rooms Rendering Performance Benchmark")
|
|
211
|
+
print("=" * 80)
|
|
212
|
+
|
|
213
|
+
if args.all_variants:
|
|
214
|
+
all_results = benchmark_environment_variants(sizes=args.sizes, num_steps=args.steps)
|
|
215
|
+
|
|
216
|
+
# Print detailed results for each variant
|
|
217
|
+
for variant, results in all_results.items():
|
|
218
|
+
print_benchmark_results(results, variant)
|
|
219
|
+
|
|
220
|
+
else:
|
|
221
|
+
results = benchmark_rendering_performance(
|
|
222
|
+
variant=args.variant,
|
|
223
|
+
sizes=args.sizes,
|
|
224
|
+
num_steps=args.steps
|
|
225
|
+
)
|
|
226
|
+
print_benchmark_results(results, args.variant)
|
|
227
|
+
|
|
228
|
+
print(f"\nš Benchmark complete!")
|
|
229
|
+
print(f"⨠Direct rendering approach shows excellent performance scaling!")
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
if __name__ == "__main__":
|
|
233
|
+
main()
|