From 0c6baed39888bd1e0b341b482ff2a4167cbab202 Mon Sep 17 00:00:00 2001 From: svxf Date: Fri, 15 Mar 2019 13:54:11 +0400 Subject: [PATCH] git reimport --- Pipfile | 14 + Pipfile.lock | 175 ++++++ libs/gym | 1 + pilesos2.log | 169 +++++ src/__init__.py | 0 src/gym/__init__.py | 14 + src/gym/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 650 bytes src/gym/__pycache__/core.cpython-37.pyc | Bin 0 -> 14505 bytes src/gym/__pycache__/error.cpython-37.pyc | Bin 0 -> 5273 bytes src/gym/__pycache__/logger.cpython-37.pyc | Bin 0 -> 1129 bytes src/gym/__pycache__/version.cpython-37.pyc | Bin 0 -> 152 bytes src/gym/core.py | 343 +++++++++++ src/gym/envs/README.md | 113 ++++ src/gym/envs/__init__.py | 540 ++++++++++++++++ .../envs/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 7300 bytes .../__pycache__/registration.cpython-37.pyc | Bin 0 -> 6814 bytes src/gym/envs/algorithmic/__init__.py | 5 + src/gym/envs/algorithmic/algorithmic_env.py | 326 ++++++++++ src/gym/envs/algorithmic/copy_.py | 13 + src/gym/envs/algorithmic/duplicated_input.py | 24 + src/gym/envs/algorithmic/repeat_copy.py | 15 + src/gym/envs/algorithmic/reverse.py | 15 + src/gym/envs/algorithmic/reversed_addition.py | 30 + src/gym/envs/algorithmic/tests/__init__.py | 0 .../algorithmic/tests/test_algorithmic.py | 239 +++++++ src/gym/envs/atari/__init__.py | 1 + src/gym/envs/atari/atari_env.py | 192 ++++++ src/gym/envs/box2d/__init__.py | 4 + src/gym/envs/box2d/bipedal_walker.py | 581 ++++++++++++++++++ src/gym/envs/box2d/car_dynamics.py | 244 ++++++++ src/gym/envs/box2d/car_racing.py | 498 +++++++++++++++ src/gym/envs/box2d/lunar_lander.py | 420 +++++++++++++ src/gym/envs/box2d/test_lunar_lander.py | 13 + src/gym/envs/classic_control/__init__.py | 6 + src/gym/envs/classic_control/acrobot.py | 304 +++++++++ .../envs/classic_control/assets/clockwise.png | Bin 0 -> 6992 bytes src/gym/envs/classic_control/cartpole.py | 193 ++++++ .../continuous_mountain_car.py | 144 +++++ src/gym/envs/classic_control/mountain_car.py | 119 ++++ src/gym/envs/classic_control/pendulum.py | 90 +++ src/gym/envs/classic_control/rendering.py | 359 +++++++++++ src/gym/envs/mujoco/__init__.py | 16 + src/gym/envs/mujoco/ant.py | 45 ++ src/gym/envs/mujoco/assets/ant.xml | 81 +++ src/gym/envs/mujoco/assets/half_cheetah.xml | 96 +++ src/gym/envs/mujoco/assets/hopper.xml | 48 ++ src/gym/envs/mujoco/assets/humanoid.xml | 121 ++++ .../envs/mujoco/assets/humanoidstandup.xml | 121 ++++ .../assets/inverted_double_pendulum.xml | 47 ++ .../envs/mujoco/assets/inverted_pendulum.xml | 27 + src/gym/envs/mujoco/assets/point.xml | 31 + src/gym/envs/mujoco/assets/pusher.xml | 91 +++ src/gym/envs/mujoco/assets/reacher.xml | 39 ++ src/gym/envs/mujoco/assets/striker.xml | 101 +++ src/gym/envs/mujoco/assets/swimmer.xml | 38 ++ src/gym/envs/mujoco/assets/thrower.xml | 127 ++++ src/gym/envs/mujoco/assets/walker2d.xml | 62 ++ src/gym/envs/mujoco/half_cheetah.py | 34 + src/gym/envs/mujoco/hopper.py | 40 ++ src/gym/envs/mujoco/humanoid.py | 51 ++ src/gym/envs/mujoco/humanoidstandup.py | 45 ++ .../envs/mujoco/inverted_double_pendulum.py | 43 ++ src/gym/envs/mujoco/inverted_pendulum.py | 30 + src/gym/envs/mujoco/mujoco_env.py | 145 +++++ src/gym/envs/mujoco/pusher.py | 57 ++ src/gym/envs/mujoco/reacher.py | 43 ++ src/gym/envs/mujoco/striker.py | 75 +++ src/gym/envs/mujoco/swimmer.py | 31 + src/gym/envs/mujoco/thrower.py | 60 ++ src/gym/envs/mujoco/walker2d.py | 40 ++ src/gym/envs/pilesos/__init__.py | 1 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 207 bytes .../__pycache__/pilesos.cpython-37.pyc | Bin 0 -> 1787 bytes src/gym/envs/pilesos/pilesos.py | 46 ++ src/gym/envs/registration.py | 191 ++++++ src/gym/envs/robotics/README.md | 54 ++ src/gym/envs/robotics/__init__.py | 10 + src/gym/envs/robotics/assets/LICENSE.md | 222 +++++++ .../robotics/assets/fetch/pick_and_place.xml | 35 ++ src/gym/envs/robotics/assets/fetch/push.xml | 32 + src/gym/envs/robotics/assets/fetch/reach.xml | 26 + src/gym/envs/robotics/assets/fetch/robot.xml | 123 ++++ src/gym/envs/robotics/assets/fetch/shared.xml | 66 ++ src/gym/envs/robotics/assets/fetch/slide.xml | 32 + .../robotics/assets/hand/manipulate_block.xml | 41 ++ .../robotics/assets/hand/manipulate_egg.xml | 40 ++ .../robotics/assets/hand/manipulate_pen.xml | 40 ++ src/gym/envs/robotics/assets/hand/reach.xml | 34 + src/gym/envs/robotics/assets/hand/robot.xml | 160 +++++ src/gym/envs/robotics/assets/hand/shared.xml | 254 ++++++++ .../robotics/assets/hand/shared_asset.xml | 26 + src/gym/envs/robotics/assets/stls/.get | 0 .../assets/stls/fetch/base_link_collision.stl | Bin 0 -> 236084 bytes .../stls/fetch/bellows_link_collision.stl | Bin 0 -> 1084 bytes .../stls/fetch/elbow_flex_link_collision.stl | Bin 0 -> 48684 bytes .../robotics/assets/stls/fetch/estop_link.stl | Bin 0 -> 386884 bytes .../fetch/forearm_roll_link_collision.stl | Bin 0 -> 50084 bytes .../assets/stls/fetch/gripper_link.stl | Bin 0 -> 75384 bytes .../stls/fetch/head_pan_link_collision.stl | Bin 0 -> 105984 bytes .../stls/fetch/head_tilt_link_collision.stl | Bin 0 -> 35384 bytes .../stls/fetch/l_wheel_link_collision.stl | Bin 0 -> 68684 bytes .../robotics/assets/stls/fetch/laser_link.stl | Bin 0 -> 355884 bytes .../stls/fetch/r_wheel_link_collision.stl | Bin 0 -> 68684 bytes .../fetch/shoulder_lift_link_collision.stl | Bin 0 -> 45384 bytes .../fetch/shoulder_pan_link_collision.stl | Bin 0 -> 65684 bytes .../assets/stls/fetch/torso_fixed_link.stl | Bin 0 -> 5884 bytes .../stls/fetch/torso_lift_link_collision.stl | Bin 0 -> 50084 bytes .../fetch/upperarm_roll_link_collision.stl | Bin 0 -> 49984 bytes .../stls/fetch/wrist_flex_link_collision.stl | Bin 0 -> 49784 bytes .../stls/fetch/wrist_roll_link_collision.stl | Bin 0 -> 26084 bytes src/gym/envs/robotics/assets/stls/hand/F1.stl | Bin 0 -> 17084 bytes src/gym/envs/robotics/assets/stls/hand/F2.stl | Bin 0 -> 22884 bytes src/gym/envs/robotics/assets/stls/hand/F3.stl | Bin 0 -> 54684 bytes .../envs/robotics/assets/stls/hand/TH1_z.stl | Bin 0 -> 6334 bytes .../envs/robotics/assets/stls/hand/TH2_z.stl | Bin 0 -> 63184 bytes .../envs/robotics/assets/stls/hand/TH3_z.stl | Bin 0 -> 21184 bytes .../assets/stls/hand/forearm_electric.stl | Bin 0 -> 934534 bytes .../assets/stls/hand/forearm_electric_cvx.stl | Bin 0 -> 45384 bytes .../robotics/assets/stls/hand/knuckle.stl | Bin 0 -> 30184 bytes .../assets/stls/hand/lfmetacarpal.stl | Bin 0 -> 75084 bytes .../envs/robotics/assets/stls/hand/palm.stl | Bin 0 -> 347784 bytes .../envs/robotics/assets/stls/hand/wrist.stl | Bin 0 -> 92784 bytes .../envs/robotics/assets/textures/block.png | Bin 0 -> 15879 bytes .../robotics/assets/textures/block_hidden.png | Bin 0 -> 40953 bytes src/gym/envs/robotics/fetch/__init__.py | 0 src/gym/envs/robotics/fetch/pick_and_place.py | 18 + src/gym/envs/robotics/fetch/push.py | 18 + src/gym/envs/robotics/fetch/reach.py | 17 + src/gym/envs/robotics/fetch/slide.py | 20 + src/gym/envs/robotics/fetch_env.py | 187 ++++++ src/gym/envs/robotics/hand/__init__.py | 0 src/gym/envs/robotics/hand/manipulate.py | 292 +++++++++ src/gym/envs/robotics/hand/reach.py | 144 +++++ src/gym/envs/robotics/hand_env.py | 49 ++ src/gym/envs/robotics/robot_env.py | 162 +++++ src/gym/envs/robotics/rotations.py | 369 +++++++++++ src/gym/envs/robotics/utils.py | 96 +++ src/gym/envs/tests/__init__.py | 0 src/gym/envs/tests/spec_list.py | 20 + src/gym/envs/tests/test_determinism.py | 74 +++ src/gym/envs/tests/test_envs.py | 43 ++ src/gym/envs/tests/test_envs_semantics.py | 95 +++ src/gym/envs/tests/test_registration.py | 50 ++ src/gym/envs/toy_text/__init__.py | 9 + src/gym/envs/toy_text/blackjack.py | 116 ++++ src/gym/envs/toy_text/cliffwalking.py | 113 ++++ src/gym/envs/toy_text/discrete.py | 59 ++ src/gym/envs/toy_text/frozen_lake.py | 132 ++++ src/gym/envs/toy_text/guessing_game.py | 87 +++ src/gym/envs/toy_text/hotter_colder.py | 66 ++ src/gym/envs/toy_text/kellycoinflip.py | 150 +++++ src/gym/envs/toy_text/nchain.py | 55 ++ src/gym/envs/toy_text/roulette.py | 44 ++ src/gym/envs/toy_text/taxi.py | 151 +++++ src/gym/envs/unittest/__init__.py | 5 + src/gym/envs/unittest/cube_crash.py | 149 +++++ src/gym/envs/unittest/memorize_digits.py | 195 ++++++ src/gym/error.py | 139 +++++ src/gym/logger.py | 35 ++ src/gym/spaces/__init__.py | 9 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 581 bytes src/gym/spaces/__pycache__/box.cpython-37.pyc | Bin 0 -> 2458 bytes .../__pycache__/dict_space.cpython-37.pyc | Bin 0 -> 3530 bytes .../__pycache__/discrete.cpython-37.pyc | Bin 0 -> 1370 bytes .../__pycache__/multi_binary.cpython-37.pyc | Bin 0 -> 1646 bytes .../__pycache__/multi_discrete.cpython-37.pyc | Bin 0 -> 1797 bytes .../spaces/__pycache__/prng.cpython-37.pyc | Bin 0 -> 760 bytes .../__pycache__/tuple_space.cpython-37.pyc | Bin 0 -> 2635 bytes src/gym/spaces/box.py | 52 ++ src/gym/spaces/dict_space.py | 75 +++ src/gym/spaces/discrete.py | 31 + src/gym/spaces/multi_binary.py | 25 + src/gym/spaces/multi_discrete.py | 28 + src/gym/spaces/prng.py | 20 + src/gym/spaces/tests/__init__.py | 0 src/gym/spaces/tests/test_spaces.py | 66 ++ src/gym/spaces/tuple_space.py | 35 ++ src/gym/tests/test_core.py | 15 + src/gym/utils/__init__.py | 10 + .../utils/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 395 bytes .../__pycache__/atomic_write.cpython-37.pyc | Bin 0 -> 1340 bytes .../utils/__pycache__/closer.cpython-37.pyc | Bin 0 -> 2329 bytes .../utils/__pycache__/colorize.cpython-37.pyc | Bin 0 -> 974 bytes .../utils/__pycache__/ezpickle.cpython-37.pyc | Bin 0 -> 1470 bytes .../__pycache__/json_utils.cpython-37.pyc | Bin 0 -> 600 bytes .../utils/__pycache__/reraise.cpython-37.pyc | Bin 0 -> 1411 bytes .../reraise_impl_py3.cpython-37.pyc | Bin 0 -> 283 bytes src/gym/utils/atomic_write.py | 55 ++ src/gym/utils/closer.py | 67 ++ src/gym/utils/colorize.py | 35 ++ src/gym/utils/ezpickle.py | 27 + src/gym/utils/json_utils.py | 22 + src/gym/utils/play.py | 186 ++++++ src/gym/utils/reraise.py | 41 ++ src/gym/utils/reraise_impl_py2.py | 2 + src/gym/utils/reraise_impl_py3.py | 4 + src/gym/utils/seeding.py | 91 +++ src/gym/utils/tests/test_atexit.py | 21 + src/gym/utils/tests/test_seeding.py | 16 + src/gym/version.py | 1 + src/gym/wrappers/README.md | 26 + src/gym/wrappers/__init__.py | 4 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 346 bytes .../wrappers/__pycache__/dict.cpython-37.pyc | Bin 0 -> 1162 bytes .../__pycache__/monitor.cpython-37.pyc | Bin 0 -> 12377 bytes .../__pycache__/time_limit.cpython-37.pyc | Bin 0 -> 1813 bytes src/gym/wrappers/dict.py | 28 + src/gym/wrappers/monitor.py | 381 ++++++++++++ src/gym/wrappers/monitoring/__init__.py | 0 .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 155 bytes .../__pycache__/stats_recorder.cpython-37.pyc | Bin 0 -> 3555 bytes .../__pycache__/video_recorder.cpython-37.pyc | Bin 0 -> 10290 bytes src/gym/wrappers/monitoring/stats_recorder.py | 103 ++++ src/gym/wrappers/monitoring/tests/__init__.py | 0 src/gym/wrappers/monitoring/tests/helpers.py | 9 + .../monitoring/tests/test_video_recorder.py | 65 ++ src/gym/wrappers/monitoring/video_recorder.py | 309 ++++++++++ src/gym/wrappers/tests/__init__.py | 0 src/gym/wrappers/time_limit.py | 44 ++ src/main.py | 87 +++ src/pilesos/__init__.py | 0 .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 139 bytes .../__pycache__/mapstate.cpython-37.pyc | Bin 0 -> 3806 bytes .../__pycache__/pilesos.cpython-37.pyc | Bin 0 -> 561 bytes .../__pycache__/shirokii.cpython-37.pyc | Bin 0 -> 5087 bytes src/pilesos/mapstate.py | 154 +++++ src/pilesos/pilesos.py | 6 + src/pilesos/shirokii.py | 239 +++++++ src/server/__init__.py | 0 src/server/server.py | 1 + src/simulate.py | 50 ++ src/testenv.py | 50 ++ 232 files changed, 14071 insertions(+) create mode 100644 Pipfile create mode 100644 Pipfile.lock create mode 160000 libs/gym create mode 100644 pilesos2.log create mode 100644 src/__init__.py create mode 100644 src/gym/__init__.py create mode 100644 src/gym/__pycache__/__init__.cpython-37.pyc create mode 100644 src/gym/__pycache__/core.cpython-37.pyc create mode 100644 src/gym/__pycache__/error.cpython-37.pyc create mode 100644 src/gym/__pycache__/logger.cpython-37.pyc create mode 100644 src/gym/__pycache__/version.cpython-37.pyc create mode 100644 src/gym/core.py create mode 100644 src/gym/envs/README.md create mode 100644 src/gym/envs/__init__.py create mode 100644 src/gym/envs/__pycache__/__init__.cpython-37.pyc create mode 100644 src/gym/envs/__pycache__/registration.cpython-37.pyc create mode 100644 src/gym/envs/algorithmic/__init__.py create mode 100644 src/gym/envs/algorithmic/algorithmic_env.py create mode 100644 src/gym/envs/algorithmic/copy_.py create mode 100644 src/gym/envs/algorithmic/duplicated_input.py create mode 100644 src/gym/envs/algorithmic/repeat_copy.py create mode 100644 src/gym/envs/algorithmic/reverse.py create mode 100644 src/gym/envs/algorithmic/reversed_addition.py create mode 100644 src/gym/envs/algorithmic/tests/__init__.py create mode 100644 src/gym/envs/algorithmic/tests/test_algorithmic.py create mode 100644 src/gym/envs/atari/__init__.py create mode 100644 src/gym/envs/atari/atari_env.py create mode 100644 src/gym/envs/box2d/__init__.py create mode 100644 src/gym/envs/box2d/bipedal_walker.py create mode 100644 src/gym/envs/box2d/car_dynamics.py create mode 100644 src/gym/envs/box2d/car_racing.py create mode 100644 src/gym/envs/box2d/lunar_lander.py create mode 100644 src/gym/envs/box2d/test_lunar_lander.py create mode 100644 src/gym/envs/classic_control/__init__.py create mode 100644 src/gym/envs/classic_control/acrobot.py create mode 100644 src/gym/envs/classic_control/assets/clockwise.png create mode 100644 src/gym/envs/classic_control/cartpole.py create mode 100644 src/gym/envs/classic_control/continuous_mountain_car.py create mode 100644 src/gym/envs/classic_control/mountain_car.py create mode 100644 src/gym/envs/classic_control/pendulum.py create mode 100644 src/gym/envs/classic_control/rendering.py create mode 100644 src/gym/envs/mujoco/__init__.py create mode 100644 src/gym/envs/mujoco/ant.py create mode 100644 src/gym/envs/mujoco/assets/ant.xml create mode 100644 src/gym/envs/mujoco/assets/half_cheetah.xml create mode 100644 src/gym/envs/mujoco/assets/hopper.xml create mode 100755 src/gym/envs/mujoco/assets/humanoid.xml create mode 100755 src/gym/envs/mujoco/assets/humanoidstandup.xml create mode 100644 src/gym/envs/mujoco/assets/inverted_double_pendulum.xml create mode 100644 src/gym/envs/mujoco/assets/inverted_pendulum.xml create mode 100644 src/gym/envs/mujoco/assets/point.xml create mode 100644 src/gym/envs/mujoco/assets/pusher.xml create mode 100644 src/gym/envs/mujoco/assets/reacher.xml create mode 100644 src/gym/envs/mujoco/assets/striker.xml create mode 100644 src/gym/envs/mujoco/assets/swimmer.xml create mode 100644 src/gym/envs/mujoco/assets/thrower.xml create mode 100644 src/gym/envs/mujoco/assets/walker2d.xml create mode 100644 src/gym/envs/mujoco/half_cheetah.py create mode 100644 src/gym/envs/mujoco/hopper.py create mode 100644 src/gym/envs/mujoco/humanoid.py create mode 100644 src/gym/envs/mujoco/humanoidstandup.py create mode 100644 src/gym/envs/mujoco/inverted_double_pendulum.py create mode 100644 src/gym/envs/mujoco/inverted_pendulum.py create mode 100644 src/gym/envs/mujoco/mujoco_env.py create mode 100644 src/gym/envs/mujoco/pusher.py create mode 100644 src/gym/envs/mujoco/reacher.py create mode 100644 src/gym/envs/mujoco/striker.py create mode 100644 src/gym/envs/mujoco/swimmer.py create mode 100644 src/gym/envs/mujoco/thrower.py create mode 100644 src/gym/envs/mujoco/walker2d.py create mode 100644 src/gym/envs/pilesos/__init__.py create mode 100644 src/gym/envs/pilesos/__pycache__/__init__.cpython-37.pyc create mode 100644 src/gym/envs/pilesos/__pycache__/pilesos.cpython-37.pyc create mode 100644 src/gym/envs/pilesos/pilesos.py create mode 100644 src/gym/envs/registration.py create mode 100644 src/gym/envs/robotics/README.md create mode 100644 src/gym/envs/robotics/__init__.py create mode 100644 src/gym/envs/robotics/assets/LICENSE.md create mode 100644 src/gym/envs/robotics/assets/fetch/pick_and_place.xml create mode 100644 src/gym/envs/robotics/assets/fetch/push.xml create mode 100644 src/gym/envs/robotics/assets/fetch/reach.xml create mode 100644 src/gym/envs/robotics/assets/fetch/robot.xml create mode 100644 src/gym/envs/robotics/assets/fetch/shared.xml create mode 100644 src/gym/envs/robotics/assets/fetch/slide.xml create mode 100644 src/gym/envs/robotics/assets/hand/manipulate_block.xml create mode 100644 src/gym/envs/robotics/assets/hand/manipulate_egg.xml create mode 100644 src/gym/envs/robotics/assets/hand/manipulate_pen.xml create mode 100644 src/gym/envs/robotics/assets/hand/reach.xml create mode 100644 src/gym/envs/robotics/assets/hand/robot.xml create mode 100644 src/gym/envs/robotics/assets/hand/shared.xml create mode 100644 src/gym/envs/robotics/assets/hand/shared_asset.xml create mode 100644 src/gym/envs/robotics/assets/stls/.get create mode 100644 src/gym/envs/robotics/assets/stls/fetch/base_link_collision.stl create mode 100644 src/gym/envs/robotics/assets/stls/fetch/bellows_link_collision.stl create mode 100644 src/gym/envs/robotics/assets/stls/fetch/elbow_flex_link_collision.stl create mode 100644 src/gym/envs/robotics/assets/stls/fetch/estop_link.stl create mode 100644 src/gym/envs/robotics/assets/stls/fetch/forearm_roll_link_collision.stl create mode 100644 src/gym/envs/robotics/assets/stls/fetch/gripper_link.stl create mode 100644 src/gym/envs/robotics/assets/stls/fetch/head_pan_link_collision.stl create mode 100644 src/gym/envs/robotics/assets/stls/fetch/head_tilt_link_collision.stl create mode 100644 src/gym/envs/robotics/assets/stls/fetch/l_wheel_link_collision.stl create mode 100644 src/gym/envs/robotics/assets/stls/fetch/laser_link.stl create mode 100644 src/gym/envs/robotics/assets/stls/fetch/r_wheel_link_collision.stl create mode 100644 src/gym/envs/robotics/assets/stls/fetch/shoulder_lift_link_collision.stl create mode 100644 src/gym/envs/robotics/assets/stls/fetch/shoulder_pan_link_collision.stl create mode 100644 src/gym/envs/robotics/assets/stls/fetch/torso_fixed_link.stl create mode 100644 src/gym/envs/robotics/assets/stls/fetch/torso_lift_link_collision.stl create mode 100644 src/gym/envs/robotics/assets/stls/fetch/upperarm_roll_link_collision.stl create mode 100644 src/gym/envs/robotics/assets/stls/fetch/wrist_flex_link_collision.stl create mode 100644 src/gym/envs/robotics/assets/stls/fetch/wrist_roll_link_collision.stl create mode 100644 src/gym/envs/robotics/assets/stls/hand/F1.stl create mode 100644 src/gym/envs/robotics/assets/stls/hand/F2.stl create mode 100644 src/gym/envs/robotics/assets/stls/hand/F3.stl create mode 100644 src/gym/envs/robotics/assets/stls/hand/TH1_z.stl create mode 100644 src/gym/envs/robotics/assets/stls/hand/TH2_z.stl create mode 100644 src/gym/envs/robotics/assets/stls/hand/TH3_z.stl create mode 100644 src/gym/envs/robotics/assets/stls/hand/forearm_electric.stl create mode 100644 src/gym/envs/robotics/assets/stls/hand/forearm_electric_cvx.stl create mode 100644 src/gym/envs/robotics/assets/stls/hand/knuckle.stl create mode 100644 src/gym/envs/robotics/assets/stls/hand/lfmetacarpal.stl create mode 100644 src/gym/envs/robotics/assets/stls/hand/palm.stl create mode 100644 src/gym/envs/robotics/assets/stls/hand/wrist.stl create mode 100644 src/gym/envs/robotics/assets/textures/block.png create mode 100644 src/gym/envs/robotics/assets/textures/block_hidden.png create mode 100644 src/gym/envs/robotics/fetch/__init__.py create mode 100644 src/gym/envs/robotics/fetch/pick_and_place.py create mode 100644 src/gym/envs/robotics/fetch/push.py create mode 100644 src/gym/envs/robotics/fetch/reach.py create mode 100644 src/gym/envs/robotics/fetch/slide.py create mode 100644 src/gym/envs/robotics/fetch_env.py create mode 100644 src/gym/envs/robotics/hand/__init__.py create mode 100644 src/gym/envs/robotics/hand/manipulate.py create mode 100644 src/gym/envs/robotics/hand/reach.py create mode 100644 src/gym/envs/robotics/hand_env.py create mode 100644 src/gym/envs/robotics/robot_env.py create mode 100644 src/gym/envs/robotics/rotations.py create mode 100644 src/gym/envs/robotics/utils.py create mode 100644 src/gym/envs/tests/__init__.py create mode 100644 src/gym/envs/tests/spec_list.py create mode 100644 src/gym/envs/tests/test_determinism.py create mode 100644 src/gym/envs/tests/test_envs.py create mode 100644 src/gym/envs/tests/test_envs_semantics.py create mode 100644 src/gym/envs/tests/test_registration.py create mode 100644 src/gym/envs/toy_text/__init__.py create mode 100644 src/gym/envs/toy_text/blackjack.py create mode 100644 src/gym/envs/toy_text/cliffwalking.py create mode 100644 src/gym/envs/toy_text/discrete.py create mode 100644 src/gym/envs/toy_text/frozen_lake.py create mode 100644 src/gym/envs/toy_text/guessing_game.py create mode 100644 src/gym/envs/toy_text/hotter_colder.py create mode 100644 src/gym/envs/toy_text/kellycoinflip.py create mode 100644 src/gym/envs/toy_text/nchain.py create mode 100644 src/gym/envs/toy_text/roulette.py create mode 100644 src/gym/envs/toy_text/taxi.py create mode 100644 src/gym/envs/unittest/__init__.py create mode 100644 src/gym/envs/unittest/cube_crash.py create mode 100644 src/gym/envs/unittest/memorize_digits.py create mode 100644 src/gym/error.py create mode 100644 src/gym/logger.py create mode 100644 src/gym/spaces/__init__.py create mode 100644 src/gym/spaces/__pycache__/__init__.cpython-37.pyc create mode 100644 src/gym/spaces/__pycache__/box.cpython-37.pyc create mode 100644 src/gym/spaces/__pycache__/dict_space.cpython-37.pyc create mode 100644 src/gym/spaces/__pycache__/discrete.cpython-37.pyc create mode 100644 src/gym/spaces/__pycache__/multi_binary.cpython-37.pyc create mode 100644 src/gym/spaces/__pycache__/multi_discrete.cpython-37.pyc create mode 100644 src/gym/spaces/__pycache__/prng.cpython-37.pyc create mode 100644 src/gym/spaces/__pycache__/tuple_space.cpython-37.pyc create mode 100644 src/gym/spaces/box.py create mode 100644 src/gym/spaces/dict_space.py create mode 100644 src/gym/spaces/discrete.py create mode 100644 src/gym/spaces/multi_binary.py create mode 100644 src/gym/spaces/multi_discrete.py create mode 100644 src/gym/spaces/prng.py create mode 100644 src/gym/spaces/tests/__init__.py create mode 100644 src/gym/spaces/tests/test_spaces.py create mode 100644 src/gym/spaces/tuple_space.py create mode 100644 src/gym/tests/test_core.py create mode 100644 src/gym/utils/__init__.py create mode 100644 src/gym/utils/__pycache__/__init__.cpython-37.pyc create mode 100644 src/gym/utils/__pycache__/atomic_write.cpython-37.pyc create mode 100644 src/gym/utils/__pycache__/closer.cpython-37.pyc create mode 100644 src/gym/utils/__pycache__/colorize.cpython-37.pyc create mode 100644 src/gym/utils/__pycache__/ezpickle.cpython-37.pyc create mode 100644 src/gym/utils/__pycache__/json_utils.cpython-37.pyc create mode 100644 src/gym/utils/__pycache__/reraise.cpython-37.pyc create mode 100644 src/gym/utils/__pycache__/reraise_impl_py3.cpython-37.pyc create mode 100644 src/gym/utils/atomic_write.py create mode 100644 src/gym/utils/closer.py create mode 100644 src/gym/utils/colorize.py create mode 100644 src/gym/utils/ezpickle.py create mode 100644 src/gym/utils/json_utils.py create mode 100644 src/gym/utils/play.py create mode 100644 src/gym/utils/reraise.py create mode 100644 src/gym/utils/reraise_impl_py2.py create mode 100644 src/gym/utils/reraise_impl_py3.py create mode 100644 src/gym/utils/seeding.py create mode 100644 src/gym/utils/tests/test_atexit.py create mode 100644 src/gym/utils/tests/test_seeding.py create mode 100644 src/gym/version.py create mode 100644 src/gym/wrappers/README.md create mode 100644 src/gym/wrappers/__init__.py create mode 100644 src/gym/wrappers/__pycache__/__init__.cpython-37.pyc create mode 100644 src/gym/wrappers/__pycache__/dict.cpython-37.pyc create mode 100644 src/gym/wrappers/__pycache__/monitor.cpython-37.pyc create mode 100644 src/gym/wrappers/__pycache__/time_limit.cpython-37.pyc create mode 100644 src/gym/wrappers/dict.py create mode 100644 src/gym/wrappers/monitor.py create mode 100644 src/gym/wrappers/monitoring/__init__.py create mode 100644 src/gym/wrappers/monitoring/__pycache__/__init__.cpython-37.pyc create mode 100644 src/gym/wrappers/monitoring/__pycache__/stats_recorder.cpython-37.pyc create mode 100644 src/gym/wrappers/monitoring/__pycache__/video_recorder.cpython-37.pyc create mode 100644 src/gym/wrappers/monitoring/stats_recorder.py create mode 100644 src/gym/wrappers/monitoring/tests/__init__.py create mode 100644 src/gym/wrappers/monitoring/tests/helpers.py create mode 100644 src/gym/wrappers/monitoring/tests/test_video_recorder.py create mode 100644 src/gym/wrappers/monitoring/video_recorder.py create mode 100644 src/gym/wrappers/tests/__init__.py create mode 100644 src/gym/wrappers/time_limit.py create mode 100644 src/main.py create mode 100644 src/pilesos/__init__.py create mode 100644 src/pilesos/__pycache__/__init__.cpython-37.pyc create mode 100644 src/pilesos/__pycache__/mapstate.cpython-37.pyc create mode 100644 src/pilesos/__pycache__/pilesos.cpython-37.pyc create mode 100644 src/pilesos/__pycache__/shirokii.cpython-37.pyc create mode 100644 src/pilesos/mapstate.py create mode 100644 src/pilesos/pilesos.py create mode 100644 src/pilesos/shirokii.py create mode 100644 src/server/__init__.py create mode 100644 src/server/server.py create mode 100644 src/simulate.py create mode 100644 src/testenv.py diff --git a/Pipfile b/Pipfile new file mode 100644 index 0000000..f5a784d --- /dev/null +++ b/Pipfile @@ -0,0 +1,14 @@ +[[source]] +url = "https://pypi.org/simple" +verify_ssl = true +name = "pypi" + +[packages] +numpy = "*" +keras = "*" +keras-rl = "*" + +[dev-packages] + +[requires] +python_version = "3.7" diff --git a/Pipfile.lock b/Pipfile.lock new file mode 100644 index 0000000..1113bf6 --- /dev/null +++ b/Pipfile.lock @@ -0,0 +1,175 @@ +{ + "_meta": { + "hash": { + "sha256": "a227a69980d84f05f5a653bcc6f1cc461e95f114074a0baae20d457cc84e7ebc" + }, + "pipfile-spec": 6, + "requires": { + "python_version": "3.7" + }, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "h5py": { + "hashes": [ + "sha256:0f8cd2acbacf3177b4427ed42639c911667b1f24d923388ab1f8ad466a12be5e", + "sha256:11277e3879098f921ee9e29105b20591e1dfdd44963357399f2abaa1a280c560", + "sha256:1241dec0c94ac32f3285cac1d6f44beabf80423e422ab03bd2686d731a8a9294", + "sha256:17b8187de0b3a945d8e8d031e7eb6ece2fce90791f9c5fde36f4396bf38fdde1", + "sha256:2f30007d0796788a454c1293262f19f25e6428317d3d386f78138fba2a44e37d", + "sha256:308e0758587ee16d4e73e7f2f8aae8351091e343bf0a43d2f697f9535465c816", + "sha256:37cacddf0e8209905f52537a8cf71da0dd9a4de62bd79247274c97b24a408997", + "sha256:38a23bb599748adf23d77f74885c0de6f4a7d9baa42f74e476bbf90fba2b47dd", + "sha256:47ab18b7b7bbc36fd2b606289b703b6f0ee915b923d6ad94dd17ac80ebffc280", + "sha256:486c78330af0bf33f5077b51d1888c0739c3cd1a03d5aade0d48572b3b5690ca", + "sha256:4e2183458d6ef1ae87dfb5d6acd0786359336cd9ac0ece6396c09b59fdaa3bd6", + "sha256:51d0595c3e58814c831f6cd2b664a5bf9590e26262c1d541b380d041e4fcb3c0", + "sha256:56d259d56822b70881760b243957f04a0cf133f0ec65eae6a33f562826aee899", + "sha256:5e6e777653169a3cc24ea56bb3d8c845ea391f8914c35bb6f350b0753a52891c", + "sha256:62bfb0ebb0f59e5dccc0b0dbbc0fc40dd1d1e09d04c0dc71f89790231531d4a2", + "sha256:67d89b64debfa021b54aa6f24bbf008403bd144748a0148596b518bce80d2fc4", + "sha256:6bf38571f555fa214493ec6349d29024cc5f313bf1715b09f236c553fd22ae4d", + "sha256:9214ca445c18a37bfe9c165982c0e317e2f21f035c8d635d1c6d9fcbaf35b7a8", + "sha256:ab0c52850428d2e86029935389379c2c97f752e76b616da851deec8a4484f8ec", + "sha256:b2eff336697d8dfd712c5d93fef9f4e4d3e97d9d8c258801836b8664a239e07a", + "sha256:bb33fabc0b8f3fe3bb0f8d6821b2fad5b2a64c27a0808e8d1c5c1e3362062064", + "sha256:bd5353ab342bae1262b04745934cc1565df4cbc8d6a979a0c98f42209bd5c265", + "sha256:bd73444efd1ac06dac27b8405bbe8791a02fd1bc8a2fa0e575257f90b7b57467", + "sha256:bd932236a2ef91a75fee5d7f4ace80ab494c5a59cd092a67c9785ddb7fdc218c", + "sha256:c45650de228ace7731e4280e14fb687f6d5c29cd666c5b22b42492b035e994d6", + "sha256:d5c0c01da45f901a3d429e7ef9e7e22baa869e1affb8715f1bf94e6a30020740", + "sha256:d75035db5bde802a29f4f29f18bb7548863d29ac90ccbf2c04c11799bbbba2c3", + "sha256:dda88206dc9464923f27f601000bc5b152ac0bd6d0122f098d4f239150a70076", + "sha256:e1c2ac5d0aa232c0f60fecc6bd1122346885086a176f939b91058c4c980cc226", + "sha256:e626c65a8587921ebc7fb8d31a49addfdd0b9a9aa96315ea484c09803337b955" + ], + "version": "==2.8.0" + }, + "keras": { + "hashes": [ + "sha256:794d0c92c6c4122f1f0fcf3a7bc2f49054c6a54ddbef8d8ffafca62795d760b6", + "sha256:90b610a3dbbf6d257b20a079eba3fdf2eed2158f64066a7c6f7227023fd60bc9" + ], + "index": "pypi", + "version": "==2.2.4" + }, + "keras-applications": { + "hashes": [ + "sha256:721dda4fa4e043e5bbd6f52a2996885c4639a7130ae478059b3798d0706f5ae7", + "sha256:a03af60ddc9c5afdae4d5c9a8dd4ca857550e0b793733a5072e0725829b87017" + ], + "version": "==1.0.6" + }, + "keras-preprocessing": { + "hashes": [ + "sha256:90d04c1750bccceef88ac09475c291b4b5f6aa1eaf0603167061b1aa8b043c61", + "sha256:ef2e482c4336fcf7180244d06f4374939099daa3183816e82aee7755af35b754" + ], + "version": "==1.0.5" + }, + "keras-rl": { + "hashes": [ + "sha256:7bbbb24c8f4560a03f59fb062a5003da102de033bc8cd7d06b69b4c1b48ec054" + ], + "index": "pypi", + "version": "==0.4.2" + }, + "numpy": { + "hashes": [ + "sha256:032df9b6571c5f1d41ea6f6a189223208cb488990373aa686aca55570fcccb42", + "sha256:094f8a83e5bd0a44a7557fa24a46db6ba7d5299c389ddbc9e0e18722f567fb63", + "sha256:1c0c80e74759fa4942298044274f2c11b08c86230b25b8b819e55e644f5ff2b6", + "sha256:2aa0910eaeb603b1a5598193cc3bc8eacf1baf6c95cbc3955eb8e15fa380c133", + "sha256:2f5ebc7a04885c7d69e5daa05208faef4db7f1ae6a99f4d36962df8cd54cdc76", + "sha256:32a07241cb624e104b88b08dea2851bf4ec5d65a1f599d7735041ced7171fd7a", + "sha256:3c7959f750b54b445f14962a3ddc41b9eadbab00b86da55fbb1967b2b79aad10", + "sha256:3d8f9273c763a139a99e65c2a3c10f1109df30bedae7f011b10d95c538364704", + "sha256:63bca71691339d2d6f8a7c970821f2b12098a53afccc0190d4e1555e75e5223a", + "sha256:7ae9c3baff3b989859c88e0168ad10902118595b996bf781eaf011bb72428798", + "sha256:866a7c8774ccc7d603667fad95456b4cf56d79a2bb5a7648ac9f0082e0b9416e", + "sha256:8bc4b92a273659e44ca3f3a2f8786cfa39d8302223bcfe7df794429c63d5f5a1", + "sha256:919f65e0732195474897b1cafefb4d4e7c2bb8174a725e506b62e9096e4df28d", + "sha256:9d1598573d310104acb90377f0a8c2319f737084689f5eb18012becaf345cda5", + "sha256:9fff90c88bfaad2901be50453d5cd7897a826c1d901f0654ee1d73ab3a48cd18", + "sha256:a245464ddf6d90e2d6287e9cef6bcfda2a99467fdcf1b677b99cd0b6c7b43de2", + "sha256:a988db28f54e104a01e8573ceb6f28202b4c15635b1450b2e3b2b822c6564f9b", + "sha256:b12fe6f31babb9477aa0f9692730654b3ee0e71f33b4568170dfafd439caf0a2", + "sha256:b7599ff4acd23f5de983e3aec772153b1043e131487a5c6ad0f94b41a828877a", + "sha256:c9f4dafd6065c4c782be84cd67ceeb9b1d4380af60a7af32be10ebecd723385e", + "sha256:ce3622b73ccd844ba301c1aea65d36cf9d8331e7c25c16b1725d0f14db99aaf4", + "sha256:d0f36a24cf8061a2c03e151be3418146717505b9b4ec17502fa3bbdb04ec1431", + "sha256:d263f8f14f2da0c079c0297e829e550d8f2c4e0ffef215506bd1d0ddd2bff3de", + "sha256:d8837ff272800668aabdfe70b966631914b0d6513aed4fc1b1428446f771834d", + "sha256:ef694fe72a3995aa778a5095bda946e0d31f7efabd5e8063ad8c6238ab7d3f78", + "sha256:f1fd1a6f40a501ba4035f5ed2c1f4faa68245d1407bf97d2ee401e4f23d1720b", + "sha256:fa337b6bd5fe2b8c4e705f4102186feb9985de9bb8536d32d5129a658f1789e0", + "sha256:febd31cd0d2fd2509ca2ec53cb339f8bf593c1bd245b9fc55c1917a68532a0af" + ], + "index": "pypi", + "version": "==1.15.3" + }, + "pyyaml": { + "hashes": [ + "sha256:3d7da3009c0f3e783b2c873687652d83b1bbfd5c88e9813fb7e5b03c0dd3108b", + "sha256:3ef3092145e9b70e3ddd2c7ad59bdd0252a94dfe3949721633e41344de00a6bf", + "sha256:40c71b8e076d0550b2e6380bada1f1cd1017b882f7e16f09a65be98e017f211a", + "sha256:558dd60b890ba8fd982e05941927a3911dc409a63dcb8b634feaa0cda69330d3", + "sha256:a7c28b45d9f99102fa092bb213aa12e0aaf9a6a1f5e395d36166639c1f96c3a1", + "sha256:aa7dd4a6a427aed7df6fb7f08a580d68d9b118d90310374716ae90b710280af1", + "sha256:bc558586e6045763782014934bfaf39d48b8ae85a2713117d16c39864085c613", + "sha256:d46d7982b62e0729ad0175a9bc7e10a566fc07b224d2c79fafb5e032727eaa04", + "sha256:d5eef459e30b09f5a098b9cea68bebfeb268697f78d647bd255a085371ac7f3f", + "sha256:e01d3203230e1786cd91ccfdc8f8454c8069c91bee3962ad93b87a4b2860f537", + "sha256:e170a9e6fcfd19021dd29845af83bb79236068bf5fd4df3327c1be18182b2531" + ], + "version": "==3.13" + }, + "scipy": { + "hashes": [ + "sha256:0611ee97296265af4a21164a5323f8c1b4e8e15c582d3dfa7610825900136bb7", + "sha256:08237eda23fd8e4e54838258b124f1cd141379a5f281b0a234ca99b38918c07a", + "sha256:0e645dbfc03f279e1946cf07c9c754c2a1859cb4a41c5f70b25f6b3a586b6dbd", + "sha256:0e9bb7efe5f051ea7212555b290e784b82f21ffd0f655405ac4f87e288b730b3", + "sha256:108c16640849e5827e7d51023efb3bd79244098c3f21e4897a1007720cb7ce37", + "sha256:340ef70f5b0f4e2b4b43c8c8061165911bc6b2ad16f8de85d9774545e2c47463", + "sha256:3ad73dfc6f82e494195144bd3a129c7241e761179b7cb5c07b9a0ede99c686f3", + "sha256:3b243c77a822cd034dad53058d7c2abf80062aa6f4a32e9799c95d6391558631", + "sha256:404a00314e85eca9d46b80929571b938e97a143b4f2ddc2b2b3c91a4c4ead9c5", + "sha256:423b3ff76957d29d1cce1bc0d62ebaf9a3fdfaf62344e3fdec14619bb7b5ad3a", + "sha256:42d9149a2fff7affdd352d157fa5717033767857c11bd55aa4a519a44343dfef", + "sha256:625f25a6b7d795e8830cb70439453c9f163e6870e710ec99eba5722775b318f3", + "sha256:698c6409da58686f2df3d6f815491fd5b4c2de6817a45379517c92366eea208f", + "sha256:729f8f8363d32cebcb946de278324ab43d28096f36593be6281ca1ee86ce6559", + "sha256:8190770146a4c8ed5d330d5b5ad1c76251c63349d25c96b3094875b930c44692", + "sha256:878352408424dffaa695ffedf2f9f92844e116686923ed9aa8626fc30d32cfd1", + "sha256:8b984f0821577d889f3c7ca8445564175fb4ac7c7f9659b7c60bef95b2b70e76", + "sha256:8f841bbc21d3dad2111a94c490fb0a591b8612ffea86b8e5571746ae76a3deac", + "sha256:c22b27371b3866c92796e5d7907e914f0e58a36d3222c5d436ddd3f0e354227a", + "sha256:d0cdd5658b49a722783b8b4f61a6f1f9c75042d0e29a30ccb6cacc9b25f6d9e2", + "sha256:d40dc7f494b06dcee0d303e51a00451b2da6119acbeaccf8369f2d29e28917ac", + "sha256:d8491d4784aceb1f100ddb8e31239c54e4afab8d607928a9f7ef2469ec35ae01", + "sha256:dfc5080c38dde3f43d8fbb9c0539a7839683475226cf83e4b24363b227dfe552", + "sha256:e24e22c8d98d3c704bb3410bce9b69e122a8de487ad3dbfe9985d154e5c03a40", + "sha256:e7a01e53163818d56eabddcafdc2090e9daba178aad05516b20c6591c4811020", + "sha256:ee677635393414930541a096fc8e61634304bb0153e4e02b75685b11eba14cae", + "sha256:f0521af1b722265d824d6ad055acfe9bd3341765735c44b5a4d0069e189a0f40", + "sha256:f25c281f12c0da726c6ed00535ca5d1622ec755c30a3f8eafef26cf43fede694" + ], + "version": "==1.1.0" + }, + "six": { + "hashes": [ + "sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9", + "sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb" + ], + "version": "==1.11.0" + } + }, + "develop": {} +} diff --git a/libs/gym b/libs/gym new file mode 160000 index 0000000..e944885 --- /dev/null +++ b/libs/gym @@ -0,0 +1 @@ +Subproject commit e944885e3b31a10fb6973093b39ff7682ef3aa3d diff --git a/pilesos2.log b/pilesos2.log new file mode 100644 index 0000000..b8d56f9 --- /dev/null +++ b/pilesos2.log @@ -0,0 +1,169 @@ +Action.FORWARD +Action.FORWARD +Action.RIGHT +Action.FORWARD +Action.FORWARD +Action.FORWARD +Action.FORWARD +Action.FORWARD +Action.FORWARD +Action.FORWARD +Action.FORWARD +Action.LEFT +Action.FORWARD +Action.LEFT +Action.LEFT +Action.FORWARD +Action.SUCK +Action.LEFT +Action.FORWARD +Action.LEFT +Action.LEFT +Action.FORWARD +Action.FORWARD +Action.FORWARD +Action.FORWARD +Action.FORWARD +Action.FORWARD +Action.RIGHT +Action.FORWARD +Action.FORWARD +Action.RIGHT +Action.FORWARD +Action.LEFT +Action.FORWARD +Action.FORWARD +Action.FORWARD +Action.RIGHT +Action.FORWARD +Action.FORWARD +Action.FORWARD +Action.FORWARD +Action.FORWARD +Action.FORWARD +Action.LEFT +Action.FORWARD +Action.LEFT +Action.FORWARD +Action.RIGHT +Action.FORWARD +Action.FORWARD +Action.FORWARD +Action.FORWARD +Action.RIGHT +Action.FORWARD +Action.FORWARD +Action.LEFT +Action.FORWARD +Action.SUCK +Action.FORWARD +Action.RIGHT +Action.FORWARD +Action.RIGHT +Action.FORWARD +Action.FORWARD +Action.LEFT +Action.FORWARD +Action.LEFT +Action.LEFT +Action.FORWARD +Action.FORWARD +Action.RIGHT +Action.FORWARD +Action.LEFT +Action.FORWARD +Action.FORWARD +Action.FORWARD +Action.FORWARD +Action.FORWARD +Action.FORWARD +Action.RIGHT +Action.FORWARD +Action.FORWARD +Action.RIGHT +Action.FORWARD +Action.RIGHT +Action.FORWARD +Action.FORWARD +Action.FORWARD +Action.LEFT +Action.FORWARD +Action.FORWARD +Action.RIGHT +Action.FORWARD +Action.FORWARD +Action.RIGHT +Action.FORWARD +Action.LEFT +Action.LEFT +Action.FORWARD +Action.FORWARD +Action.FORWARD +Action.LEFT +Action.FORWARD +Action.LEFT +Action.LEFT +Action.FORWARD +Action.LEFT +Action.FORWARD +Action.FORWARD +Action.FORWARD +Action.LEFT +Action.FORWARD +Action.FORWARD +Action.LEFT +Action.FORWARD +Action.RIGHT +Action.FORWARD +Action.RIGHT +Action.FORWARD +Action.FORWARD +Action.LEFT +Action.FORWARD +Action.FORWARD +Action.FORWARD +Action.LEFT +Action.FORWARD +Action.RIGHT +Action.FORWARD +Action.FORWARD +Action.LEFT +Action.FORWARD +Action.FORWARD +Action.FORWARD +Action.RIGHT +Action.FORWARD +Action.RIGHT +Action.FORWARD +Action.LEFT +Action.FORWARD +Action.RIGHT +Action.FORWARD +Action.LEFT +Action.FORWARD +Action.LEFT +Action.LEFT +Action.FORWARD +Action.FORWARD +Action.SUCK +Action.RIGHT +Action.FORWARD +Action.RIGHT +Action.FORWARD +Action.LEFT +Action.FORWARD +Action.FORWARD +Action.LEFT +Action.FORWARD +Action.FORWARD +Action.FORWARD +Action.LEFT +Action.FORWARD +Action.RIGHT +Action.FORWARD +Action.FORWARD +Action.FORWARD +Action.RIGHT +Action.FORWARD +Action.FORWARD +Action.DIE diff --git a/src/__init__.py b/src/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/gym/__init__.py b/src/gym/__init__.py new file mode 100644 index 0000000..ec6623a --- /dev/null +++ b/src/gym/__init__.py @@ -0,0 +1,14 @@ +import distutils.version +import os +import sys +import warnings + +from gym import error +from gym.utils import reraise +from gym.version import VERSION as __version__ + +from gym.core import Env, GoalEnv, Space, Wrapper, ObservationWrapper, ActionWrapper, RewardWrapper +from gym.envs import make, spec +from gym import logger + +__all__ = ["Env", "Space", "Wrapper", "make", "spec"] diff --git a/src/gym/__pycache__/__init__.cpython-37.pyc b/src/gym/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cecc724d082ab3f4985f299d6966ffd49cd2f15b GIT binary patch literal 650 zcmY*X&5qMB5YBItv`x3|{=uC~E)5T`LV&bFTy~|c0BJZ_-o%Omb`p)#qP_?`18;*k z`pSt{;KbPK@?$ICeBXFHGaBb*o=-hm-@kl&zwb3eM5T~A9?48iVdi)&=PHL>EnuNe;6yE9saCL3YgnsOICU`- zd8W?cTwTD0(+TChgiGRSoz>HNR?nLl9@YNVEApSzn|D+ACKiZ25=l@XZ?&-W?e*RE z_3cfOnDDyWo8(o`r6uup;FU1RJLJP4(5!FowZJ_e+rE47VrexEoukH+zAaN@&`iv;29fvxH|W&RIM=D}9%7zv`UB{W*6T@2=o}%{h=mO7SG>XaR;Q*p|BCC}MqI2t$>&2l?Uv&_yJkc35j zZgrO8Wi2}|$+E1@ihI^9=&99NHB0H7bE+hITDk2X*xR7xgMC*GY|mHshOWPLSKS#8 zRIhJ`VO!melcF(=4xP}M3RKd<8 zw->2iph3Yf@Ewi-dJpWr=P2`5m`)uCE9_rnsNAdBc-lR*wbRwMzXz(eR5Tj)-IK&{ zeFLb4jr9)fBQ*@d(Az;z^L}W!u^mJh#8!^GYmfR-{7}i@hE0L`__F8kZhjA^Pn6x) zuI-GKd*p=?l;Qz6>EZufH4aAV(1u#s%C})Yhpslma`Ci&omqfI3o&Z#=8bMWZ&4rZyR<0>{ZeglhhB)O6^sF#?(MtI zrm&VPG}>mQxC>M3!RDxX4~1JBt%vC-P)2DpR+Te)%pXPogIFlEqAdtw7zsKU)fJV| zZZy*5Y^+}!IbGbu;MBoQ1J8jl zcgA9qIbt)jzi+514w|D#;ysIwSBDka39J~U4vaFLf(hUQ{BKx zSgO(1o*e?1Mp`;ki#A#!=n#0_?}HG^MbQd&Js*@n&M@2z9=H$+L~S^pu(}uc5&Q#) z936Rmk1+3e_MRVvk=K*1dLZbeHul~A5cmyT)Ifxt(cT`^Yg6pN;@XFBZ zyI~Ms33czv-gt0@Cf**7F$9>U-)LUctG5-J>1XSNlM}c?Y z#K6RybH1!(#aH8T=zq!i#Ks*j9QJ|w&}3LD93jLBSD21TYZprbNr-v&+Umn_Bryz? zUxp?v;b<@u0Y?DvP4$CTwjRz6 z=m@z^EdTzUw-`E%z*5eQ!HzEPj4zMX&^vPb${W~w0NHTlMK=6*ZUyYkHEx z6e;zd{TMHg;29;9LIXQGNOdYv!mtV`&Vk z-Ci&Nz|mcS-SodyXIF1zV91e(z>r&vhQb|~TEJjeW|;{=;^5Z=E;$q2I^jpf3`BTW zWgxl7z-EnEL~n>t;0DqcXTnhR-WX7`fumLQ z!6}=ssn3d>zN$W67c*MlgbWgsS^wlo=G8eN+*nM=23^IbSo*d2&6&yAKf!`)*Ycwl ziDEzgB^Ewxi&bv4+rXIbB+WFtU2PAjLdLX2@x+1(YQ~}5eljrvvzWU1lVTFgF${)k zG=xDSyKtDrK;?~)<_sNz-<)Lj�EL9`+CJv;g)5%?--^8c$r$qY-pg+a4qhyK|2i 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 literal 0 HcmV?d00001 diff --git a/src/gym/__pycache__/logger.cpython-37.pyc b/src/gym/__pycache__/logger.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0ca2a22324dbfff4d4967466927e9e2b4eb3667c GIT binary patch literal 1129 zcmb_b&2G~`5Z+zeiIXP%1C<{kWFZydOD*+?5Td1_suWTwr68F@m1eeXz=@+-hbmQX zS+7?GjbGn>e*B??_|2QkL3{Cv z%)BE20WuYR8A~ZZ#R{C*0XKHRi#;gCC2%`sD1-l1#6DD@O1=VfP$OT3I?R)wg9TV5 zU(9@32xZ}Svoyorsh%*M$z6uW49^(W3A&Pi2Ya^HWX2~r6CL74(bVaB zHK4Jl^B~QVq&G-{{1~-4&Qb`nLC_r`>cRA*#x?tMi*B#H-Dw>(8}A!U+IXq{qSNmJ znaQ8EXy0fwQRfgl(Gaswx|^G5*h{s^Ok}VdCF6d?w^6|1xTqMNAJ_lNUex-mRe9^PV2O^YMuwHrtr2JoBP|LgPb|m z2?}qBy+IzT!s(l&a66b7%Y6z=qwqiLP-R_JU-=ML>|&?(V@mFOugE+l%AtK7LM5;*7TN+@?Gl>1?$-6~3B zou=7I=uY+GzOv+yi||i|CmkF-q@QLCneS~f^cwBg`kf=kmcL<~wiuDUJb5e`*i}j0(lJ(Oo fbM?!BN;32F^a?6(aoFVMr: Returns the list of seeds used in this env's random + number generators. The first value in the list should be the + "main" seed, or the value which a reproducer should pass to + 'seed'. Often, the main seed equals the provided 'seed', but + this won't be true if seed=None, for example. + """ + logger.warn("Could not seed environment %s", self) + return + + @property + def unwrapped(self): + """Completely unwrap this env. + + Returns: + gym.Env: The base non-wrapped gym.Env instance + """ + return self + + def __str__(self): + if self.spec is None: + return '<{} instance>'.format(type(self).__name__) + else: + return '<{}<{}>>'.format(type(self).__name__, self.spec.id) + + +class GoalEnv(Env): + """A goal-based environment. It functions just as any regular OpenAI Gym environment but it + imposes a required structure on the observation_space. More concretely, the observation + space is required to contain at least three elements, namely `observation`, `desired_goal`, and + `achieved_goal`. Here, `desired_goal` specifies the goal that the agent should attempt to achieve. + `achieved_goal` is the goal that it currently achieved instead. `observation` contains the + actual observations of the environment as per usual. + """ + + def reset(self): + # Enforce that each GoalEnv uses a Goal-compatible observation space. + if not isinstance(self.observation_space, gym.spaces.Dict): + raise error.Error('GoalEnv requires an observation space of type gym.spaces.Dict') + result = super(GoalEnv, self).reset() + for key in ['observation', 'achieved_goal', 'desired_goal']: + if key not in result: + raise error.Error('GoalEnv requires the "{}" key to be part of the observation dictionary.'.format(key)) + return result + + def compute_reward(self, achieved_goal, desired_goal, info): + """Compute the step reward. This externalizes the reward function and makes + it dependent on an a desired goal and the one that was achieved. If you wish to include + additional rewards that are independent of the goal, you can include the necessary values + to derive it in info and compute it accordingly. + + Args: + achieved_goal (object): the goal that was achieved during execution + desired_goal (object): the desired goal that we asked the agent to attempt to achieve + info (dict): an info dictionary with additional information + + Returns: + float: The reward that corresponds to the provided achieved goal w.r.t. to the desired + goal. Note that the following should always hold true: + + ob, reward, done, info = env.step() + assert reward == env.compute_reward(ob['achieved_goal'], ob['goal'], info) + """ + raise NotImplementedError() + +# Space-related abstractions + +class Space(object): + """Defines the observation and action spaces, so you can write generic + code that applies to any Env. For example, you can choose a random + action. + """ + def __init__(self, shape=None, dtype=None): + import numpy as np # takes about 300-400ms to import, so we load lazily + self.shape = None if shape is None else tuple(shape) + self.dtype = None if dtype is None else np.dtype(dtype) + + def sample(self): + """ + Uniformly randomly sample a random element of this space + """ + raise NotImplementedError + + def contains(self, x): + """ + Return boolean specifying if x is a valid + member of this space + """ + raise NotImplementedError + + __contains__ = contains + + def to_jsonable(self, sample_n): + """Convert a batch of samples from this space to a JSONable data type.""" + # By default, assume identity is JSONable + return sample_n + + def from_jsonable(self, sample_n): + """Convert a JSONable data type to a batch of samples from this space.""" + # By default, assume identity is JSONable + return sample_n + + +warn_once = True + +def deprecated_warn_once(text): + global warn_once + if not warn_once: return + warn_once = False + logger.warn(text) + + +class Wrapper(Env): + env = None + + def __init__(self, env): + self.env = env + self.action_space = self.env.action_space + self.observation_space = self.env.observation_space + self.reward_range = self.env.reward_range + self.metadata = self.env.metadata + + @classmethod + def class_name(cls): + return cls.__name__ + + def step(self, action): + if hasattr(self, "_step"): + deprecated_warn_once("%s doesn't implement 'step' method, but it implements deprecated '_step' method." % type(self)) + self.step = self._step + return self.step(action) + else: + deprecated_warn_once("%s doesn't implement 'step' method, " % type(self) + + "which is required for wrappers derived directly from Wrapper. Deprecated default implementation is used.") + return self.env.step(action) + + def reset(self, **kwargs): + if hasattr(self, "_reset"): + deprecated_warn_once("%s doesn't implement 'reset' method, but it implements deprecated '_reset' method." % type(self)) + self.reset = self._reset + return self._reset(**kwargs) + else: + deprecated_warn_once("%s doesn't implement 'reset' method, " % type(self) + + "which is required for wrappers derived directly from Wrapper. Deprecated default implementation is used.") + return self.env.reset(**kwargs) + + def render(self, mode='human', **kwargs): + return self.env.render(mode, **kwargs) + + def close(self): + if self.env: + return self.env.close() + + def seed(self, seed=None): + return self.env.seed(seed) + + def compute_reward(self, achieved_goal, desired_goal, info): + return self.env.compute_reward(achieved_goal, desired_goal, info) + + def __str__(self): + return '<{}{}>'.format(type(self).__name__, self.env) + + def __repr__(self): + return str(self) + + @property + def unwrapped(self): + return self.env.unwrapped + + @property + def spec(self): + return self.env.spec + + +class ObservationWrapper(Wrapper): + def step(self, action): + observation, reward, done, info = self.env.step(action) + return self.observation(observation), reward, done, info + + def reset(self, **kwargs): + observation = self.env.reset(**kwargs) + return self.observation(observation) + + def observation(self, observation): + deprecated_warn_once("%s doesn't implement 'observation' method. Maybe it implements deprecated '_observation' method." % type(self)) + return self._observation(observation) + + +class RewardWrapper(Wrapper): + def reset(self): + return self.env.reset() + + def step(self, action): + observation, reward, done, info = self.env.step(action) + return observation, self.reward(reward), done, info + + def reward(self, reward): + deprecated_warn_once("%s doesn't implement 'reward' method. Maybe it implements deprecated '_reward' method." % type(self)) + return self._reward(reward) + + +class ActionWrapper(Wrapper): + def step(self, action): + action = self.action(action) + return self.env.step(action) + + def reset(self): + return self.env.reset() + + def action(self, action): + deprecated_warn_once("%s doesn't implement 'action' method. Maybe it implements deprecated '_action' method." % type(self)) + return self._action(action) + + def reverse_action(self, action): + deprecated_warn_once("%s doesn't implement 'reverse_action' method. Maybe it implements deprecated '_reverse_action' method." % type(self)) + return self._reverse_action(action) diff --git a/src/gym/envs/README.md b/src/gym/envs/README.md new file mode 100644 index 0000000..5ae5774 --- /dev/null +++ b/src/gym/envs/README.md @@ -0,0 +1,113 @@ +# Envs + +These are the core integrated environments. Note that we may later +restructure any of the files, but will keep the environments available +at the relevant package's top-level. So for example, you should access +`AntEnv` as follows: + +``` +# Will be supported in future releases +from gym.envs import mujoco +mujoco.AntEnv +``` + +Rather than: + +``` +# May break in future releases +from gym.envs.mujoco import ant +ant.AntEnv +``` + +## How to create new environments for Gym + +* Create a new repo called gym-foo, which should also be a PIP package. + +* A good example is https://github.com/openai/gym-soccer. + +* It should have at least the following files: + ```sh + gym-foo/ + README.md + setup.py + gym_foo/ + __init__.py + envs/ + __init__.py + foo_env.py + foo_extrahard_env.py + ``` + +* `gym-foo/setup.py` should have: + + ```python + from setuptools import setup + + setup(name='gym_foo', + version='0.0.1', + install_requires=['gym'] # And any other dependencies foo needs + ) + ``` + +* `gym-foo/gym_foo/__init__.py` should have: + ```python + from gym.envs.registration import register + + register( + id='foo-v0', + entry_point='gym_foo.envs:FooEnv', + ) + register( + id='foo-extrahard-v0', + entry_point='gym_foo.envs:FooExtraHardEnv', + ) + ``` + +* `gym-foo/gym_foo/envs/__init__.py` should have: + ```python + from gym_foo.envs.foo_env import FooEnv + from gym_foo.envs.foo_extrahard_env import FooExtraHardEnv + ``` + +* `gym-foo/gym_foo/envs/foo_env.py` should look something like: + ```python + import gym + from gym import error, spaces, utils + from gym.utils import seeding + + class FooEnv(gym.Env): + metadata = {'render.modes': ['human']} + + def __init__(self): + ... + def step(self, action): + ... + def reset(self): + ... + def render(self, mode='human', close=False): + ... + ``` + +## How to add new environments to Gym, within this repo (not recommended for new environments) + +1. Write your environment in an existing collection or a new collection. All collections are subfolders of `/gym/envs'. +2. Import your environment into the `__init__.py` file of the collection. This file will be located at `/gym/envs/my_collection/__init__.py`. Add `from gym.envs.my_collection.my_awesome_env import MyEnv` to this file. +3. Register your env in `/gym/envs/__init__.py`: + + ``` +register( + id='MyEnv-v0', + entry_point='gym.envs.my_collection:MyEnv', +) +``` + +4. Add your environment to the scoreboard in `/gym/scoreboard/__init__.py`: + + ``` +add_task( + id='MyEnv-v0', + summary="Super cool environment", + group='my_collection', + contributor='mygithubhandle', +) +``` diff --git a/src/gym/envs/__init__.py b/src/gym/envs/__init__.py new file mode 100644 index 0000000..cf2978e --- /dev/null +++ b/src/gym/envs/__init__.py @@ -0,0 +1,540 @@ +from gym.envs.registration import registry, register, make, spec + +# Algorithmic +# ---------------------------------------- + +register( + id='Copy-v0', + entry_point='gym.envs.algorithmic:CopyEnv', + max_episode_steps=200, + reward_threshold=25.0, +) + +register( + id='RepeatCopy-v0', + entry_point='gym.envs.algorithmic:RepeatCopyEnv', + max_episode_steps=200, + reward_threshold=75.0, +) + +register( + id='ReversedAddition-v0', + entry_point='gym.envs.algorithmic:ReversedAdditionEnv', + kwargs={'rows': 2}, + max_episode_steps=200, + reward_threshold=25.0, +) + +register( + id='ReversedAddition3-v0', + entry_point='gym.envs.algorithmic:ReversedAdditionEnv', + kwargs={'rows': 3}, + max_episode_steps=200, + reward_threshold=25.0, +) + +register( + id='DuplicatedInput-v0', + entry_point='gym.envs.algorithmic:DuplicatedInputEnv', + max_episode_steps=200, + reward_threshold=9.0, +) + +register( + id='Reverse-v0', + entry_point='gym.envs.algorithmic:ReverseEnv', + max_episode_steps=200, + reward_threshold=25.0, +) + +# Classic +# ---------------------------------------- + +register( + id='CartPole-v0', + entry_point='gym.envs.classic_control:CartPoleEnv', + max_episode_steps=200, + reward_threshold=195.0, +) + +register( + id='CartPole-v1', + entry_point='gym.envs.classic_control:CartPoleEnv', + max_episode_steps=500, + reward_threshold=475.0, +) + +register( + id='MountainCar-v0', + entry_point='gym.envs.classic_control:MountainCarEnv', + max_episode_steps=200, + reward_threshold=-110.0, +) + +register( + id='MountainCarContinuous-v0', + entry_point='gym.envs.classic_control:Continuous_MountainCarEnv', + max_episode_steps=999, + reward_threshold=90.0, +) + +register( + id='Pendulum-v0', + entry_point='gym.envs.classic_control:PendulumEnv', + max_episode_steps=200, +) + +register( + id='Acrobot-v1', + entry_point='gym.envs.classic_control:AcrobotEnv', + max_episode_steps=500, +) + +# Box2d +# ---------------------------------------- + +register( + id='LunarLander-v2', + entry_point='gym.envs.box2d:LunarLander', + max_episode_steps=1000, + reward_threshold=200, +) + +register( + id='LunarLanderContinuous-v2', + entry_point='gym.envs.box2d:LunarLanderContinuous', + max_episode_steps=1000, + reward_threshold=200, +) + +register( + id='BipedalWalker-v2', + entry_point='gym.envs.box2d:BipedalWalker', + max_episode_steps=1600, + reward_threshold=300, +) + +register( + id='BipedalWalkerHardcore-v2', + entry_point='gym.envs.box2d:BipedalWalkerHardcore', + max_episode_steps=2000, + reward_threshold=300, +) + +register( + id='CarRacing-v0', + entry_point='gym.envs.box2d:CarRacing', + max_episode_steps=1000, + reward_threshold=900, +) + +# Toy Text +# ---------------------------------------- + +register( + id='Blackjack-v0', + entry_point='gym.envs.toy_text:BlackjackEnv', +) + +register( + id='KellyCoinflip-v0', + entry_point='gym.envs.toy_text:KellyCoinflipEnv', + reward_threshold=246.61, +) +register( + id='KellyCoinflipGeneralized-v0', + entry_point='gym.envs.toy_text:KellyCoinflipGeneralizedEnv', +) + +register( + id='FrozenLake-v0', + entry_point='gym.envs.toy_text:FrozenLakeEnv', + kwargs={'map_name': '4x4'}, + max_episode_steps=100, + reward_threshold=0.78, # optimum = .8196 +) + +register( + id='FrozenLake8x8-v0', + entry_point='gym.envs.toy_text:FrozenLakeEnv', + kwargs={'map_name': '8x8'}, + max_episode_steps=200, + reward_threshold=0.99, # optimum = 1 +) + +register( + id='CliffWalking-v0', + entry_point='gym.envs.toy_text:CliffWalkingEnv', +) + +register( + id='NChain-v0', + entry_point='gym.envs.toy_text:NChainEnv', + max_episode_steps=1000, +) + +register( + id='Roulette-v0', + entry_point='gym.envs.toy_text:RouletteEnv', + max_episode_steps=100, +) + +register( + id='Taxi-v2', + entry_point='gym.envs.toy_text.taxi:TaxiEnv', + reward_threshold=8, # optimum = 8.46 + max_episode_steps=200, +) + +register( + id='GuessingGame-v0', + entry_point='gym.envs.toy_text.guessing_game:GuessingGame', + max_episode_steps=200, +) + +register( + id='HotterColder-v0', + entry_point='gym.envs.toy_text.hotter_colder:HotterColder', + max_episode_steps=200, +) + +# Mujoco +# ---------------------------------------- + +# 2D + +register( + id='Reacher-v2', + entry_point='gym.envs.mujoco:ReacherEnv', + max_episode_steps=50, + reward_threshold=-3.75, +) + +register( + id='Pusher-v2', + entry_point='gym.envs.mujoco:PusherEnv', + max_episode_steps=100, + reward_threshold=0.0, +) + +register( + id='Thrower-v2', + entry_point='gym.envs.mujoco:ThrowerEnv', + max_episode_steps=100, + reward_threshold=0.0, +) + +register( + id='Striker-v2', + entry_point='gym.envs.mujoco:StrikerEnv', + max_episode_steps=100, + reward_threshold=0.0, +) + +register( + id='InvertedPendulum-v2', + entry_point='gym.envs.mujoco:InvertedPendulumEnv', + max_episode_steps=1000, + reward_threshold=950.0, +) + +register( + id='InvertedDoublePendulum-v2', + entry_point='gym.envs.mujoco:InvertedDoublePendulumEnv', + max_episode_steps=1000, + reward_threshold=9100.0, +) + +register( + id='HalfCheetah-v2', + entry_point='gym.envs.mujoco:HalfCheetahEnv', + max_episode_steps=1000, + reward_threshold=4800.0, +) + +register( + id='Hopper-v2', + entry_point='gym.envs.mujoco:HopperEnv', + max_episode_steps=1000, + reward_threshold=3800.0, +) + +register( + id='Swimmer-v2', + entry_point='gym.envs.mujoco:SwimmerEnv', + max_episode_steps=1000, + reward_threshold=360.0, +) + +register( + id='Walker2d-v2', + max_episode_steps=1000, + entry_point='gym.envs.mujoco:Walker2dEnv', +) + +register( + id='Ant-v2', + entry_point='gym.envs.mujoco:AntEnv', + max_episode_steps=1000, + reward_threshold=6000.0, +) + +register( + id='Humanoid-v2', + entry_point='gym.envs.mujoco:HumanoidEnv', + max_episode_steps=1000, +) + +register( + id='HumanoidStandup-v2', + entry_point='gym.envs.mujoco:HumanoidStandupEnv', + max_episode_steps=1000, +) + + +# Robotics +# ---------------------------------------- + +def _merge(a, b): + a.update(b) + return a + + +for reward_type in ['sparse', 'dense']: + suffix = 'Dense' if reward_type == 'dense' else '' + kwargs = { + 'reward_type': reward_type, + } + + # Fetch + register( + id='FetchSlide{}-v1'.format(suffix), + entry_point='gym.envs.robotics:FetchSlideEnv', + kwargs=kwargs, + max_episode_steps=50, + ) + + register( + id='FetchPickAndPlace{}-v1'.format(suffix), + entry_point='gym.envs.robotics:FetchPickAndPlaceEnv', + kwargs=kwargs, + max_episode_steps=50, + ) + + register( + id='FetchReach{}-v1'.format(suffix), + entry_point='gym.envs.robotics:FetchReachEnv', + kwargs=kwargs, + max_episode_steps=50, + ) + + register( + id='FetchPush{}-v1'.format(suffix), + entry_point='gym.envs.robotics:FetchPushEnv', + kwargs=kwargs, + max_episode_steps=50, + ) + + # Hand + register( + id='HandReach{}-v0'.format(suffix), + entry_point='gym.envs.robotics:HandReachEnv', + kwargs=kwargs, + max_episode_steps=50, + ) + + register( + id='HandManipulateBlockRotateZ{}-v0'.format(suffix), + entry_point='gym.envs.robotics:HandBlockEnv', + kwargs=_merge({'target_position': 'ignore', 'target_rotation': 'z'}, kwargs), + max_episode_steps=100, + ) + + register( + id='HandManipulateBlockRotateParallel{}-v0'.format(suffix), + entry_point='gym.envs.robotics:HandBlockEnv', + kwargs=_merge({'target_position': 'ignore', 'target_rotation': 'parallel'}, kwargs), + max_episode_steps=100, + ) + + register( + id='HandManipulateBlockRotateXYZ{}-v0'.format(suffix), + entry_point='gym.envs.robotics:HandBlockEnv', + kwargs=_merge({'target_position': 'ignore', 'target_rotation': 'xyz'}, kwargs), + max_episode_steps=100, + ) + + register( + id='HandManipulateBlockFull{}-v0'.format(suffix), + entry_point='gym.envs.robotics:HandBlockEnv', + kwargs=_merge({'target_position': 'random', 'target_rotation': 'xyz'}, kwargs), + max_episode_steps=100, + ) + + # Alias for "Full" + register( + id='HandManipulateBlock{}-v0'.format(suffix), + entry_point='gym.envs.robotics:HandBlockEnv', + kwargs=_merge({'target_position': 'random', 'target_rotation': 'xyz'}, kwargs), + max_episode_steps=100, + ) + + register( + id='HandManipulateEggRotate{}-v0'.format(suffix), + entry_point='gym.envs.robotics:HandEggEnv', + kwargs=_merge({'target_position': 'ignore', 'target_rotation': 'xyz'}, kwargs), + max_episode_steps=100, + ) + + register( + id='HandManipulateEggFull{}-v0'.format(suffix), + entry_point='gym.envs.robotics:HandEggEnv', + kwargs=_merge({'target_position': 'random', 'target_rotation': 'xyz'}, kwargs), + max_episode_steps=100, + ) + + # Alias for "Full" + register( + id='HandManipulateEgg{}-v0'.format(suffix), + entry_point='gym.envs.robotics:HandEggEnv', + kwargs=_merge({'target_position': 'random', 'target_rotation': 'xyz'}, kwargs), + max_episode_steps=100, + ) + + register( + id='HandManipulatePenRotate{}-v0'.format(suffix), + entry_point='gym.envs.robotics:HandPenEnv', + kwargs=_merge({'target_position': 'ignore', 'target_rotation': 'xyz'}, kwargs), + max_episode_steps=100, + ) + + register( + id='HandManipulatePenFull{}-v0'.format(suffix), + entry_point='gym.envs.robotics:HandPenEnv', + kwargs=_merge({'target_position': 'random', 'target_rotation': 'xyz'}, kwargs), + max_episode_steps=100, + ) + + # Alias for "Full" + register( + id='HandManipulatePen{}-v0'.format(suffix), + entry_point='gym.envs.robotics:HandPenEnv', + kwargs=_merge({'target_position': 'random', 'target_rotation': 'xyz'}, kwargs), + max_episode_steps=100, + ) + +# Atari +# ---------------------------------------- + +# # print ', '.join(["'{}'".format(name.split('.')[0]) for name in atari_py.list_games()]) +for game in ['air_raid', 'alien', 'amidar', 'assault', 'asterix', 'asteroids', 'atlantis', + 'bank_heist', 'battle_zone', 'beam_rider', 'berzerk', 'bowling', 'boxing', 'breakout', 'carnival', + 'centipede', 'chopper_command', 'crazy_climber', 'demon_attack', 'double_dunk', + 'elevator_action', 'enduro', 'fishing_derby', 'freeway', 'frostbite', 'gopher', 'gravitar', + 'hero', 'ice_hockey', 'jamesbond', 'journey_escape', 'kangaroo', 'krull', 'kung_fu_master', + 'montezuma_revenge', 'ms_pacman', 'name_this_game', 'phoenix', 'pitfall', 'pong', 'pooyan', + 'private_eye', 'qbert', 'riverraid', 'road_runner', 'robotank', 'seaquest', 'skiing', + 'solaris', 'space_invaders', 'star_gunner', 'tennis', 'time_pilot', 'tutankham', 'up_n_down', + 'venture', 'video_pinball', 'wizard_of_wor', 'yars_revenge', 'zaxxon']: + for obs_type in ['image', 'ram']: + # space_invaders should yield SpaceInvaders-v0 and SpaceInvaders-ram-v0 + name = ''.join([g.capitalize() for g in game.split('_')]) + if obs_type == 'ram': + name = '{}-ram'.format(name) + + nondeterministic = False + if game == 'elevator_action' and obs_type == 'ram': + # ElevatorAction-ram-v0 seems to yield slightly + # non-deterministic observations about 10% of the time. We + # should track this down eventually, but for now we just + # mark it as nondeterministic. + nondeterministic = True + + register( + id='{}-v0'.format(name), + entry_point='gym.envs.atari:AtariEnv', + kwargs={'game': game, 'obs_type': obs_type, 'repeat_action_probability': 0.25}, + max_episode_steps=10000, + nondeterministic=nondeterministic, + ) + + register( + id='{}-v4'.format(name), + entry_point='gym.envs.atari:AtariEnv', + kwargs={'game': game, 'obs_type': obs_type}, + max_episode_steps=100000, + nondeterministic=nondeterministic, + ) + + # Standard Deterministic (as in the original DeepMind paper) + if game == 'space_invaders': + frameskip = 3 + else: + frameskip = 4 + + # Use a deterministic frame skip. + register( + id='{}Deterministic-v0'.format(name), + entry_point='gym.envs.atari:AtariEnv', + kwargs={'game': game, 'obs_type': obs_type, 'frameskip': frameskip, 'repeat_action_probability': 0.25}, + max_episode_steps=100000, + nondeterministic=nondeterministic, + ) + + register( + id='{}Deterministic-v4'.format(name), + entry_point='gym.envs.atari:AtariEnv', + kwargs={'game': game, 'obs_type': obs_type, 'frameskip': frameskip}, + max_episode_steps=100000, + nondeterministic=nondeterministic, + ) + + register( + id='{}NoFrameskip-v0'.format(name), + entry_point='gym.envs.atari:AtariEnv', + kwargs={'game': game, 'obs_type': obs_type, 'frameskip': 1, 'repeat_action_probability': 0.25}, + # A frameskip of 1 means we get every frame + max_episode_steps=frameskip * 100000, + nondeterministic=nondeterministic, + ) + + # No frameskip. (Atari has no entropy source, so these are + # deterministic environments.) + register( + id='{}NoFrameskip-v4'.format(name), + entry_point='gym.envs.atari:AtariEnv', + kwargs={'game': game, 'obs_type': obs_type, 'frameskip': 1}, # A frameskip of 1 means we get every frame + max_episode_steps=frameskip * 100000, + nondeterministic=nondeterministic, + ) + +# Unit test +# --------- + +register( + id='CubeCrash-v0', + entry_point='gym.envs.unittest:CubeCrash', + reward_threshold=0.9, +) +register( + id='CubeCrashSparse-v0', + entry_point='gym.envs.unittest:CubeCrashSparse', + reward_threshold=0.9, +) +register( + id='CubeCrashScreenBecomesBlack-v0', + entry_point='gym.envs.unittest:CubeCrashScreenBecomesBlack', + reward_threshold=0.9, +) + +register( + id='MemorizeDigits-v0', + entry_point='gym.envs.unittest:MemorizeDigits', + reward_threshold=20, +) + +register( + id='Pilesos-v0', + entry_point='gym.envs.pilesos:PilesosEnv', + max_episode_steps=5000, +) diff --git a/src/gym/envs/__pycache__/__init__.cpython-37.pyc b/src/gym/envs/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b01c4eb30160d8fe533bfdb44aa17a8c5853de78 GIT binary patch literal 7300 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 RV=un3cnMcGCjD8)KLJQ&;eP-C literal 0 HcmV?d00001 diff --git a/src/gym/envs/algorithmic/__init__.py b/src/gym/envs/algorithmic/__init__.py new file mode 100644 index 0000000..da5e719 --- /dev/null +++ b/src/gym/envs/algorithmic/__init__.py @@ -0,0 +1,5 @@ +from gym.envs.algorithmic.copy_ import CopyEnv +from gym.envs.algorithmic.repeat_copy import RepeatCopyEnv +from gym.envs.algorithmic.duplicated_input import DuplicatedInputEnv +from gym.envs.algorithmic.reverse import ReverseEnv +from gym.envs.algorithmic.reversed_addition import ReversedAdditionEnv diff --git a/src/gym/envs/algorithmic/algorithmic_env.py b/src/gym/envs/algorithmic/algorithmic_env.py new file mode 100644 index 0000000..a84520a --- /dev/null +++ b/src/gym/envs/algorithmic/algorithmic_env.py @@ -0,0 +1,326 @@ +""" +Algorithmic environments have the following traits in common: + +- A 1-d "input tape" or 2-d "input grid" of characters +- A target string which is a deterministic function of the input characters + +Agents control a read head that moves over the input tape. Observations consist +of the single character currently under the read head. The read head may fall +off the end of the tape in any direction. When this happens, agents will observe +a special blank character (with index=env.base) until they get back in bounds. + +Actions consist of 3 sub-actions: + - Direction to move the read head (left or right, plus up and down for 2-d envs) + - Whether to write to the output tape + - Which character to write (ignored if the above sub-action is 0) + +An episode ends when: + - The agent writes the full target string to the output tape. + - The agent writes an incorrect character. + - The agent runs out the time limit. (Which is fairly conservative.) + +Reward schedule: + write a correct character: +1 + write a wrong character: -.5 + run out the clock: -1 + otherwise: 0 + +In the beginning, input strings will be fairly short. After an environment has +been consistently solved over some window of episodes, the environment will +increase the average length of generated strings. Typical env specs require +leveling up many times to reach their reward threshold. +""" +from gym import Env, logger +from gym.spaces import Discrete, Tuple +from gym.utils import colorize, seeding +import numpy as np +from six import StringIO +import sys +import math + +class AlgorithmicEnv(Env): + + metadata = {'render.modes': ['human', 'ansi']} + # Only 'promote' the length of generated input strings if the worst of the + # last n episodes was no more than this far from the maximum reward + MIN_REWARD_SHORTFALL_FOR_PROMOTION = -1.0 + + def __init__(self, base=10, chars=False, starting_min_length=2): + """ + base: Number of distinct characters. + chars: If True, use uppercase alphabet. Otherwise, digits. Only affects + rendering. + starting_min_length: Minimum input string length. Ramps up as episodes + are consistently solved. + """ + self.base = base + # Keep track of this many past episodes + self.last = 10 + # Cumulative reward earned this episode + self.episode_total_reward = None + # Running tally of reward shortfalls. e.g. if there were 10 points to earn and + # we got 8, we'd append -2 + AlgorithmicEnv.reward_shortfalls = [] + if chars: + self.charmap = [chr(ord('A')+i) for i in range(base)] + else: + self.charmap = [str(i) for i in range(base)] + self.charmap.append(' ') + # TODO: Not clear why this is a class variable rather than instance. + # Could lead to some spooky action at a distance if someone is working + # with multiple algorithmic envs at once. Also makes testing tricky. + AlgorithmicEnv.min_length = starting_min_length + # Three sub-actions: + # 1. Move read head left or write (or up/down) + # 2. Write or not + # 3. Which character to write. (Ignored if should_write=0) + self.action_space = Tuple( + [Discrete(len(self.MOVEMENTS)), Discrete(2), Discrete(self.base)] + ) + # Can see just what is on the input tape (one of n characters, or nothing) + self.observation_space = Discrete(self.base + 1) + self.seed() + self.reset() + + @classmethod + def _movement_idx(kls, movement_name): + return kls.MOVEMENTS.index(movement_name) + + def seed(self, seed=None): + self.np_random, seed = seeding.np_random(seed) + return [seed] + + def _get_obs(self, pos=None): + """Return an observation corresponding to the given read head position + (or the current read head position, if none is given).""" + raise NotImplemented + + def _get_str_obs(self, pos=None): + ret = self._get_obs(pos) + return self.charmap[ret] + + def _get_str_target(self, pos): + """Return the ith character of the target string (or " " if index + out of bounds).""" + if pos < 0 or len(self.target) <= pos: + return " " + else: + return self.charmap[self.target[pos]] + + def render_observation(self): + """Return a string representation of the input tape/grid.""" + raise NotImplementedError + + def render(self, mode='human'): + + outfile = StringIO() if mode == 'ansi' else sys.stdout + inp = "Total length of input instance: %d, step: %d\n" % (self.input_width, self.time) + outfile.write(inp) + x, y, action = self.read_head_position, self.write_head_position, self.last_action + if action is not None: + inp_act, out_act, pred = action + outfile.write("=" * (len(inp) - 1) + "\n") + y_str = "Output Tape : " + target_str = "Targets : " + if action is not None: + pred_str = self.charmap[pred] + x_str = self.render_observation() + for i in range(-2, len(self.target) + 2): + target_str += self._get_str_target(i) + if i < y - 1: + y_str += self._get_str_target(i) + elif i == (y - 1): + if action is not None and out_act == 1: + color = 'green' if pred == self.target[i] else 'red' + y_str += colorize(pred_str, color, highlight=True) + else: + y_str += self._get_str_target(i) + outfile.write(x_str) + outfile.write(y_str + "\n") + outfile.write(target_str + "\n\n") + + if action is not None: + outfile.write("Current reward : %.3f\n" % self.last_reward) + outfile.write("Cumulative reward : %.3f\n" % self.episode_total_reward) + move = self.MOVEMENTS[inp_act] + outfile.write("Action : Tuple(move over input: %s,\n" % move) + out_act = out_act == 1 + outfile.write(" write to the output tape: %s,\n" % out_act) + outfile.write(" prediction: %s)\n" % pred_str) + else: + outfile.write("\n" * 5) + return outfile + + @property + def input_width(self): + return len(self.input_data) + + def step(self, action): + assert self.action_space.contains(action) + self.last_action = action + inp_act, out_act, pred = action + done = False + reward = 0.0 + self.time += 1 + assert 0 <= self.write_head_position + if out_act == 1: + try: + correct = pred == self.target[self.write_head_position] + except IndexError: + logger.warn("It looks like you're calling step() even though this "+ + "environment has already returned done=True. You should always call "+ + "reset() once you receive done=True. Any further steps are undefined "+ + "behaviour.") + correct = False + if correct: + reward = 1.0 + else: + # Bail as soon as a wrong character is written to the tape + reward = -0.5 + done = True + self.write_head_position += 1 + if self.write_head_position >= len(self.target): + done = True + self._move(inp_act) + if self.time > self.time_limit: + reward = -1.0 + done = True + obs = self._get_obs() + self.last_reward = reward + self.episode_total_reward += reward + return (obs, reward, done, {}) + + @property + def time_limit(self): + """If an agent takes more than this many timesteps, end the episode + immediately and return a negative reward.""" + # (Seemingly arbitrary) + return self.input_width + len(self.target) + 4 + + def _check_levelup(self): + """Called between episodes. Update our running record of episode rewards + and, if appropriate, 'level up' minimum input length.""" + if self.episode_total_reward is None: + # This is before the first episode/call to reset(). Nothing to do + return + AlgorithmicEnv.reward_shortfalls.append(self.episode_total_reward - len(self.target)) + AlgorithmicEnv.reward_shortfalls = AlgorithmicEnv.reward_shortfalls[-self.last:] + if len(AlgorithmicEnv.reward_shortfalls) == self.last and \ + min(AlgorithmicEnv.reward_shortfalls) >= self.MIN_REWARD_SHORTFALL_FOR_PROMOTION and \ + AlgorithmicEnv.min_length < 30: + AlgorithmicEnv.min_length += 1 + AlgorithmicEnv.reward_shortfalls = [] + + + def reset(self): + self._check_levelup() + self.last_action = None + self.last_reward = 0 + self.read_head_position = self.READ_HEAD_START + self.write_head_position = 0 + self.episode_total_reward = 0.0 + self.time = 0 + length = self.np_random.randint(3) + AlgorithmicEnv.min_length + self.input_data = self.generate_input_data(length) + self.target = self.target_from_input_data(self.input_data) + return self._get_obs() + + def generate_input_data(self, size): + raise NotImplemented + + def target_from_input_data(self, input_data): + raise NotImplemented("Subclasses must implement") + + def _move(self, movement): + raise NotImplemented + +class TapeAlgorithmicEnv(AlgorithmicEnv): + """An algorithmic env with a 1-d input tape.""" + MOVEMENTS = ['left', 'right'] + READ_HEAD_START = 0 + + def _move(self, movement): + named = self.MOVEMENTS[movement] + self.read_head_position += 1 if named == 'right' else -1 + + def _get_obs(self, pos=None): + if pos is None: + pos = self.read_head_position + if pos < 0: + return self.base + if isinstance(pos, np.ndarray): + pos = pos.item() + try: + return self.input_data[pos] + except IndexError: + return self.base + + def generate_input_data(self, size): + return [self.np_random.randint(self.base) for _ in range(size)] + + def render_observation(self): + x = self.read_head_position + x_str = "Observation Tape : " + for i in range(-2, self.input_width + 2): + if i == x: + x_str += colorize(self._get_str_obs(np.array([i])), 'green', highlight=True) + else: + x_str += self._get_str_obs(np.array([i])) + x_str += "\n" + return x_str + +class GridAlgorithmicEnv(AlgorithmicEnv): + """An algorithmic env with a 2-d input grid.""" + MOVEMENTS = ['left', 'right', 'up', 'down'] + READ_HEAD_START = (0, 0) + def __init__(self, rows, *args, **kwargs): + self.rows = rows + AlgorithmicEnv.__init__(self, *args, **kwargs) + + def _move(self, movement): + named = self.MOVEMENTS[movement] + x, y = self.read_head_position + if named == 'left': + x -= 1 + elif named == 'right': + x += 1 + elif named == 'up': + y -= 1 + elif named == 'down': + y += 1 + else: + raise ValueError("Unrecognized direction: {}".format(named)) + self.read_head_position = x, y + + def generate_input_data(self, size): + return [ + [self.np_random.randint(self.base) for _ in range(self.rows)] + for __ in range(size) + ] + + def _get_obs(self, pos=None): + if pos is None: + pos = self.read_head_position + x, y = pos + if any(idx < 0 for idx in pos): + return self.base + try: + return self.input_data[x][y] + except IndexError: + return self.base + + def render_observation(self): + x = self.read_head_position + label = "Observation Grid : " + x_str = "" + for j in range(-1, self.rows+1): + if j != -1: + x_str += " " * len(label) + for i in range(-2, self.input_width + 2): + if i == x[0] and j == x[1]: + x_str += colorize(self._get_str_obs((i, j)), 'green', highlight=True) + else: + x_str += self._get_str_obs((i, j)) + x_str += "\n" + x_str = label + x_str + return x_str diff --git a/src/gym/envs/algorithmic/copy_.py b/src/gym/envs/algorithmic/copy_.py new file mode 100644 index 0000000..7c6dfdf --- /dev/null +++ b/src/gym/envs/algorithmic/copy_.py @@ -0,0 +1,13 @@ +""" +Task is to copy content from the input tape to +the output tape. http://arxiv.org/abs/1511.07275 +""" +from gym.envs.algorithmic import algorithmic_env + +class CopyEnv(algorithmic_env.TapeAlgorithmicEnv): + def __init__(self, base=5, chars=True): + super(CopyEnv, self).__init__(base=base, chars=chars) + + def target_from_input_data(self, input_data): + return input_data + diff --git a/src/gym/envs/algorithmic/duplicated_input.py b/src/gym/envs/algorithmic/duplicated_input.py new file mode 100644 index 0000000..d992814 --- /dev/null +++ b/src/gym/envs/algorithmic/duplicated_input.py @@ -0,0 +1,24 @@ +""" +Task is to return every nth character from the input tape. +http://arxiv.org/abs/1511.07275 +""" +from __future__ import division +from gym.envs.algorithmic import algorithmic_env + +class DuplicatedInputEnv(algorithmic_env.TapeAlgorithmicEnv): + def __init__(self, duplication=2, base=5): + self.duplication = duplication + super(DuplicatedInputEnv, self).__init__(base=base, chars=True) + + def generate_input_data(self, size): + res = [] + if size < self.duplication: + size = self.duplication + for i in range(size//self.duplication): + char = self.np_random.randint(self.base) + for _ in range(self.duplication): + res.append(char) + return res + + def target_from_input_data(self, input_data): + return [input_data[i] for i in range(0, len(input_data), self.duplication)] diff --git a/src/gym/envs/algorithmic/repeat_copy.py b/src/gym/envs/algorithmic/repeat_copy.py new file mode 100644 index 0000000..0c79322 --- /dev/null +++ b/src/gym/envs/algorithmic/repeat_copy.py @@ -0,0 +1,15 @@ +""" +Task is to copy content multiple times from the input tape to +the output tape. http://arxiv.org/abs/1511.07275 +""" +from gym.envs.algorithmic import algorithmic_env + +class RepeatCopyEnv(algorithmic_env.TapeAlgorithmicEnv): + MIN_REWARD_SHORTFALL_FOR_PROMOTION = -.1 + def __init__(self, base=5): + super(RepeatCopyEnv, self).__init__(base=base, chars=True) + self.last = 50 + + def target_from_input_data(self, input_data): + return input_data + list(reversed(input_data)) + input_data + diff --git a/src/gym/envs/algorithmic/reverse.py b/src/gym/envs/algorithmic/reverse.py new file mode 100644 index 0000000..489e4af --- /dev/null +++ b/src/gym/envs/algorithmic/reverse.py @@ -0,0 +1,15 @@ +""" +Task is to reverse content over the input tape. +http://arxiv.org/abs/1511.07275 +""" + +from gym.envs.algorithmic import algorithmic_env + +class ReverseEnv(algorithmic_env.TapeAlgorithmicEnv): + MIN_REWARD_SHORTFALL_FOR_PROMOTION = -.1 + def __init__(self, base=2): + super(ReverseEnv, self).__init__(base=base, chars=True, starting_min_length=1) + self.last = 50 + + def target_from_input_data(self, input_str): + return list(reversed(input_str)) diff --git a/src/gym/envs/algorithmic/reversed_addition.py b/src/gym/envs/algorithmic/reversed_addition.py new file mode 100644 index 0000000..eb5c790 --- /dev/null +++ b/src/gym/envs/algorithmic/reversed_addition.py @@ -0,0 +1,30 @@ +from __future__ import division +import numpy as np +from gym.envs.algorithmic import algorithmic_env + +class ReversedAdditionEnv(algorithmic_env.GridAlgorithmicEnv): + def __init__(self, rows=2, base=3): + super(ReversedAdditionEnv, self).__init__(rows=rows, base=base, chars=False) + + def target_from_input_data(self, input_strings): + curry = 0 + target = [] + for digits in input_strings: + total = sum(digits) + curry + target.append(total % self.base) + curry = total // self.base + + if curry > 0: + target.append(curry) + return target + + @property + def time_limit(self): + # Quirk preserved for the sake of consistency: add the length of the input + # rather than the length of the desired output (which may differ if there's + # an extra carried digit). + # TODO: It seems like this time limit is so strict as to make Addition3-v0 + # unsolvable, since agents aren't even given enough time steps to look at + # all the digits. (The solutions on the scoreboard seem to only work by + # save-scumming.) + return self.input_width*2 + 4 diff --git a/src/gym/envs/algorithmic/tests/__init__.py b/src/gym/envs/algorithmic/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/gym/envs/algorithmic/tests/test_algorithmic.py b/src/gym/envs/algorithmic/tests/test_algorithmic.py new file mode 100644 index 0000000..7857f05 --- /dev/null +++ b/src/gym/envs/algorithmic/tests/test_algorithmic.py @@ -0,0 +1,239 @@ +from gym.envs import algorithmic as alg +import unittest + +# All concrete subclasses of AlgorithmicEnv +ALL_ENVS = [ + alg.copy_.CopyEnv, + alg.duplicated_input.DuplicatedInputEnv, + alg.repeat_copy.RepeatCopyEnv, + alg.reverse.ReverseEnv, + alg.reversed_addition.ReversedAdditionEnv, +] +ALL_TAPE_ENVS = [env for env in ALL_ENVS + if issubclass(env, alg.algorithmic_env.TapeAlgorithmicEnv)] +ALL_GRID_ENVS = [env for env in ALL_ENVS + if issubclass(env, alg.algorithmic_env.GridAlgorithmicEnv)] + +def imprint(env, input_arr): + """Monkey-patch the given environment so that when reset() is called, the + input tape/grid will be set to the given data, rather than being randomly + generated.""" + env.generate_input_data = lambda _: input_arr + +class TestAlgorithmicEnvInteractions(unittest.TestCase): + """Test some generic behaviour not specific to any particular algorithmic + environment. Movement, allocation of rewards, etc.""" + CANNED_INPUT = [0, 1] + ENV_KLS = alg.copy_.CopyEnv + LEFT, RIGHT = ENV_KLS._movement_idx('left'), ENV_KLS._movement_idx('right') + def setUp(self): + self.env = self.ENV_KLS(base=2, chars=True) + imprint(self.env, self.CANNED_INPUT) + + def test_successful_interaction(self): + obs = self.env.reset() + self.assertEqual(obs, 0) + obs, reward, done, _ = self.env.step([self.RIGHT, 1, 0]) + self.assertEqual(obs, 1) + self.assertGreater(reward, 0) + self.assertFalse(done) + obs, reward, done, _ = self.env.step([self.LEFT, 1, 1]) + self.assertTrue(done) + self.assertGreater(reward, 0) + + def test_bad_output_fail_fast(self): + obs = self.env.reset() + obs, reward, done, _ = self.env.step([self.RIGHT, 1, 1]) + self.assertTrue(done) + self.assertLess(reward, 0) + + def test_levelup(self): + obs = self.env.reset() + # Kind of a hack + alg.algorithmic_env.AlgorithmicEnv.reward_shortfalls = [] + min_length = self.env.min_length + for i in range(self.env.last): + obs, reward, done, _ = self.env.step([self.RIGHT, 1, 0]) + self.assertFalse(done) + obs, reward, done, _ = self.env.step([self.RIGHT, 1, 1]) + self.assertTrue(done) + self.env.reset() + if i < self.env.last-1: + self.assertEqual(len(alg.algorithmic_env.AlgorithmicEnv.reward_shortfalls), i+1) + else: + # Should have leveled up on the last iteration + self.assertEqual(self.env.min_length, min_length+1) + self.assertEqual(len(alg.algorithmic_env.AlgorithmicEnv.reward_shortfalls), 0) + + def test_walk_off_the_end(self): + obs = self.env.reset() + # Walk off the end + obs, r, done, _ = self.env.step([self.LEFT, 0, 0]) + self.assertEqual(obs, self.env.base) + self.assertEqual(r, 0) + self.assertFalse(done) + # Walk further off track + obs, r, done, _ = self.env.step([self.LEFT, 0, 0]) + self.assertEqual(obs, self.env.base) + self.assertFalse(done) + # Return to the first input character + obs, r, done, _ = self.env.step([self.RIGHT, 0, 0]) + self.assertEqual(obs, self.env.base) + self.assertFalse(done) + obs, r, done, _ = self.env.step([self.RIGHT, 0, 0]) + self.assertEqual(obs, 0) + + def test_grid_naviation(self): + env = alg.reversed_addition.ReversedAdditionEnv(rows=2, base=6) + N,S,E,W = [env._movement_idx(named_dir) for named_dir in ['up', 'down', 'right', 'left']] + # Corresponds to a grid that looks like... + # 0 1 2 + # 3 4 5 + canned = [ [0, 3], [1, 4], [2, 5] ] + imprint(env, canned) + obs = env.reset() + self.assertEqual(obs, 0) + navigation = [ + (S, 3), (N, 0), (E, 1), (S, 4), (S, 6), (E, 6), (N, 5), (N, 2), (W, 1) + ] + for (movement, expected_obs) in navigation: + obs, reward, done, _ = env.step([movement, 0, 0]) + self.assertEqual(reward, 0) + self.assertFalse(done) + self.assertEqual(obs, expected_obs) + + def test_grid_success(self): + env = alg.reversed_addition.ReversedAdditionEnv(rows=2, base=3) + canned = [ [1, 2], [1, 0], [2, 2] ] + imprint(env, canned) + obs = env.reset() + target = [0, 2, 1, 1] + self.assertEqual(env.target, target) + self.assertEqual(obs, 1) + for i, target_digit in enumerate(target): + obs, reward, done, _ = env.step([0, 1, target_digit]) + self.assertGreater(reward, 0) + self.assertEqual(done, i==len(target)-1) + + def test_sane_time_limit(self): + obs = self.env.reset() + self.assertLess(self.env.time_limit, 100) + for _ in range(100): + obs, r, done, _ = self.env.step([self.LEFT, 0, 0]) + if done: + return + self.fail("Time limit wasn't enforced") + + def test_rendering(self): + env = self.env + obs = env.reset() + self.assertEqual(env._get_str_obs(), 'A') + self.assertEqual(env._get_str_obs(1), 'B') + self.assertEqual(env._get_str_obs(-1), ' ') + self.assertEqual(env._get_str_obs(2), ' ') + self.assertEqual(env._get_str_target(0), 'A') + self.assertEqual(env._get_str_target(1), 'B') + # Test numerical alphabet rendering + env = self.ENV_KLS(base=3, chars=False) + imprint(env, self.CANNED_INPUT) + env.reset() + self.assertEqual(env._get_str_obs(), '0') + self.assertEqual(env._get_str_obs(1), '1') + + +class TestTargets(unittest.TestCase): + """Test the rules mapping input strings/grids to target outputs.""" + def test_reverse_target(self): + input_expected = [ + ([0], [0]), + ([0, 1], [1, 0]), + ([1, 1], [1, 1]), + ([1, 0, 1], [1, 0, 1]), + ([0, 0, 1, 1], [1, 1, 0, 0]), + ] + env = alg.reverse.ReverseEnv() + for input_arr, expected in input_expected: + target = env.target_from_input_data(input_arr) + self.assertEqual(target, expected) + + def test_reversed_addition_target(self): + env = alg.reversed_addition.ReversedAdditionEnv(base=3) + input_expected = [ + ([[1,1], [1,1]], [2, 2]), + ([[2,2], [0,1]], [1, 2]), + ([[2,1], [1,1], [1,1], [1,0]], [0, 0, 0, 2]), + ] + for (input_grid, expected_target) in input_expected: + self.assertEqual(env.target_from_input_data(input_grid), expected_target) + + def test_reversed_addition_3rows(self): + env = alg.reversed_addition.ReversedAdditionEnv(base=3, rows=3) + input_expected = [ + ([[1,1,0],[0,1,1]], [2, 2]), + ([[1,1,2],[0,1,1]], [1,0,1]), + ] + for (input_grid, expected_target) in input_expected: + self.assertEqual(env.target_from_input_data(input_grid), expected_target) + + def test_copy_target(self): + env = alg.copy_.CopyEnv() + self.assertEqual(env.target_from_input_data([0, 1, 2]), [0, 1, 2]) + + def test_duplicated_input_target(self): + env = alg.duplicated_input.DuplicatedInputEnv(duplication=2) + self.assertEqual(env.target_from_input_data([0, 0, 0, 0, 1, 1]), [0, 0, 1]) + + def test_repeat_copy_target(self): + env = alg.repeat_copy.RepeatCopyEnv() + self.assertEqual(env.target_from_input_data([0, 1, 2]), [0, 1, 2, 2, 1, 0, 0, 1, 2]) + +class TestInputGeneration(unittest.TestCase): + """Test random input generation. + """ + def test_tape_inputs(self): + for env_kls in ALL_TAPE_ENVS: + env = env_kls() + for size in range(2,5): + input_tape = env.generate_input_data(size) + self.assertTrue(all(0<=x<=env.base for x in input_tape), + "Invalid input tape from env {}: {}".format(env_kls, input_tape)) + # DuplicatedInput needs to generate inputs with even length, + # so it may be short one + self.assertLessEqual(len(input_tape), size) + + def test_grid_inputs(self): + for env_kls in ALL_GRID_ENVS: + env = env_kls() + for size in range(2, 5): + input_grid = env.generate_input_data(size) + # Should get "size" sublists, each of length self.rows (not the + # opposite, as you might expect) + self.assertEqual(len(input_grid), size) + self.assertTrue(all(len(col) == env.rows for col in input_grid)) + self.assertTrue(all(0<=x<=env.base for x in input_grid[0])) + + def test_duplicatedinput_inputs(self): + """The duplicated_input env needs to generate strings with the appropriate + amount of repetiion.""" + env = alg.duplicated_input.DuplicatedInputEnv(duplication=2) + input_tape = env.generate_input_data(4) + self.assertEqual(len(input_tape), 4) + self.assertEqual(input_tape[0], input_tape[1]) + self.assertEqual(input_tape[2], input_tape[3]) + # If requested input size isn't a multiple of duplication, go lower + input_tape = env.generate_input_data(3) + self.assertEqual(len(input_tape), 2) + self.assertEqual(input_tape[0], input_tape[1]) + # If requested input size is *less than* duplication, go up + input_tape = env.generate_input_data(1) + self.assertEqual(len(input_tape), 2) + self.assertEqual(input_tape[0], input_tape[1]) + + env = alg.duplicated_input.DuplicatedInputEnv(duplication=3) + input_tape = env.generate_input_data(6) + self.assertEqual(len(input_tape), 6) + self.assertEqual(input_tape[0], input_tape[1]) + self.assertEqual(input_tape[1], input_tape[2]) + +if __name__ == '__main__': + unittest.main() diff --git a/src/gym/envs/atari/__init__.py b/src/gym/envs/atari/__init__.py new file mode 100644 index 0000000..351106e --- /dev/null +++ b/src/gym/envs/atari/__init__.py @@ -0,0 +1 @@ +from gym.envs.atari.atari_env import AtariEnv diff --git a/src/gym/envs/atari/atari_env.py b/src/gym/envs/atari/atari_env.py new file mode 100644 index 0000000..14122df --- /dev/null +++ b/src/gym/envs/atari/atari_env.py @@ -0,0 +1,192 @@ +import numpy as np +import os +import gym +from gym import error, spaces +from gym import utils +from gym.utils import seeding + +try: + import atari_py +except ImportError as e: + raise error.DependencyNotInstalled("{}. (HINT: you can install Atari dependencies by running 'pip install gym[atari]'.)".format(e)) + +def to_ram(ale): + ram_size = ale.getRAMSize() + ram = np.zeros((ram_size),dtype=np.uint8) + ale.getRAM(ram) + return ram + +class AtariEnv(gym.Env, utils.EzPickle): + metadata = {'render.modes': ['human', 'rgb_array']} + + def __init__(self, game='pong', obs_type='ram', frameskip=(2, 5), repeat_action_probability=0.): + """Frameskip should be either a tuple (indicating a random range to + choose from, with the top value exclude), or an int.""" + + utils.EzPickle.__init__(self, game, obs_type, frameskip, repeat_action_probability) + assert obs_type in ('ram', 'image') + + self.game_path = atari_py.get_game_path(game) + if not os.path.exists(self.game_path): + raise IOError('You asked for game %s but path %s does not exist'%(game, self.game_path)) + self._obs_type = obs_type + self.frameskip = frameskip + self.ale = atari_py.ALEInterface() + self.viewer = None + + # Tune (or disable) ALE's action repeat: + # https://github.com/openai/gym/issues/349 + assert isinstance(repeat_action_probability, (float, int)), "Invalid repeat_action_probability: {!r}".format(repeat_action_probability) + self.ale.setFloat('repeat_action_probability'.encode('utf-8'), repeat_action_probability) + + self.seed() + + self._action_set = self.ale.getMinimalActionSet() + self.action_space = spaces.Discrete(len(self._action_set)) + + (screen_width,screen_height) = self.ale.getScreenDims() + if self._obs_type == 'ram': + self.observation_space = spaces.Box(low=0, high=255, dtype=np.uint8, shape=(128,)) + elif self._obs_type == 'image': + self.observation_space = spaces.Box(low=0, high=255, shape=(screen_height, screen_width, 3), dtype=np.uint8) + else: + raise error.Error('Unrecognized observation type: {}'.format(self._obs_type)) + + def seed(self, seed=None): + self.np_random, seed1 = seeding.np_random(seed) + # Derive a random seed. This gets passed as a uint, but gets + # checked as an int elsewhere, so we need to keep it below + # 2**31. + seed2 = seeding.hash_seed(seed1 + 1) % 2**31 + # Empirically, we need to seed before loading the ROM. + self.ale.setInt(b'random_seed', seed2) + self.ale.loadROM(self.game_path) + return [seed1, seed2] + + def step(self, a): + reward = 0.0 + action = self._action_set[a] + + if isinstance(self.frameskip, int): + num_steps = self.frameskip + else: + num_steps = self.np_random.randint(self.frameskip[0], self.frameskip[1]) + for _ in range(num_steps): + reward += self.ale.act(action) + ob = self._get_obs() + + return ob, reward, self.ale.game_over(), {"ale.lives": self.ale.lives()} + + def _get_image(self): + return self.ale.getScreenRGB2() + + def _get_ram(self): + return to_ram(self.ale) + + @property + def _n_actions(self): + return len(self._action_set) + + def _get_obs(self): + if self._obs_type == 'ram': + return self._get_ram() + elif self._obs_type == 'image': + img = self._get_image() + return img + + # return: (states, observations) + def reset(self): + self.ale.reset_game() + return self._get_obs() + + def render(self, mode='human'): + img = self._get_image() + if mode == 'rgb_array': + return img + elif mode == 'human': + from gym.envs.classic_control import rendering + if self.viewer is None: + self.viewer = rendering.SimpleImageViewer() + self.viewer.imshow(img) + return self.viewer.isopen + + def close(self): + if self.viewer is not None: + self.viewer.close() + self.viewer = None + + def get_action_meanings(self): + return [ACTION_MEANING[i] for i in self._action_set] + + def get_keys_to_action(self): + KEYWORD_TO_KEY = { + 'UP': ord('w'), + 'DOWN': ord('s'), + 'LEFT': ord('a'), + 'RIGHT': ord('d'), + 'FIRE': ord(' '), + } + + keys_to_action = {} + + for action_id, action_meaning in enumerate(self.get_action_meanings()): + keys = [] + for keyword, key in KEYWORD_TO_KEY.items(): + if keyword in action_meaning: + keys.append(key) + keys = tuple(sorted(keys)) + + assert keys not in keys_to_action + keys_to_action[keys] = action_id + + return keys_to_action + + def clone_state(self): + """Clone emulator state w/o system state. Restoring this state will + *not* give an identical environment. For complete cloning and restoring + of the full state, see `{clone,restore}_full_state()`.""" + state_ref = self.ale.cloneState() + state = self.ale.encodeState(state_ref) + self.ale.deleteState(state_ref) + return state + + def restore_state(self, state): + """Restore emulator state w/o system state.""" + state_ref = self.ale.decodeState(state) + self.ale.restoreState(state_ref) + self.ale.deleteState(state_ref) + + def clone_full_state(self): + """Clone emulator state w/ system state including pseudorandomness. + Restoring this state will give an identical environment.""" + state_ref = self.ale.cloneSystemState() + state = self.ale.encodeState(state_ref) + self.ale.deleteState(state_ref) + return state + + def restore_full_state(self, state): + """Restore emulator state w/ system state including pseudorandomness.""" + state_ref = self.ale.decodeState(state) + self.ale.restoreSystemState(state_ref) + self.ale.deleteState(state_ref) + +ACTION_MEANING = { + 0 : "NOOP", + 1 : "FIRE", + 2 : "UP", + 3 : "RIGHT", + 4 : "LEFT", + 5 : "DOWN", + 6 : "UPRIGHT", + 7 : "UPLEFT", + 8 : "DOWNRIGHT", + 9 : "DOWNLEFT", + 10 : "UPFIRE", + 11 : "RIGHTFIRE", + 12 : "LEFTFIRE", + 13 : "DOWNFIRE", + 14 : "UPRIGHTFIRE", + 15 : "UPLEFTFIRE", + 16 : "DOWNRIGHTFIRE", + 17 : "DOWNLEFTFIRE", +} diff --git a/src/gym/envs/box2d/__init__.py b/src/gym/envs/box2d/__init__.py new file mode 100644 index 0000000..725f319 --- /dev/null +++ b/src/gym/envs/box2d/__init__.py @@ -0,0 +1,4 @@ +from gym.envs.box2d.lunar_lander import LunarLander +from gym.envs.box2d.lunar_lander import LunarLanderContinuous +from gym.envs.box2d.bipedal_walker import BipedalWalker, BipedalWalkerHardcore +from gym.envs.box2d.car_racing import CarRacing diff --git a/src/gym/envs/box2d/bipedal_walker.py b/src/gym/envs/box2d/bipedal_walker.py new file mode 100644 index 0000000..d4c3e00 --- /dev/null +++ b/src/gym/envs/box2d/bipedal_walker.py @@ -0,0 +1,581 @@ +import sys, math +import numpy as np + +import Box2D +from Box2D.b2 import (edgeShape, circleShape, fixtureDef, polygonShape, revoluteJointDef, contactListener) + +import gym +from gym import spaces +from gym.utils import colorize, seeding, EzPickle + +# This is simple 4-joints walker robot environment. +# +# There are two versions: +# +# - Normal, with slightly uneven terrain. +# +# - Hardcore with ladders, stumps, pitfalls. +# +# Reward is given for moving forward, total 300+ points up to the far end. If the robot falls, +# it gets -100. Applying motor torque costs a small amount of points, more optimal agent +# will get better score. +# +# Heuristic is provided for testing, it's also useful to get demonstrations to +# learn from. To run heuristic: +# +# python gym/envs/box2d/bipedal_walker.py +# +# State consists of hull angle speed, angular velocity, horizontal speed, vertical speed, +# position of joints and joints angular speed, legs contact with ground, and 10 lidar +# rangefinder measurements to help to deal with the hardcore version. There's no coordinates +# in the state vector. Lidar is less useful in normal version, but it works. +# +# To solve the game you need to get 300 points in 1600 time steps. +# +# To solve hardcore version you need 300 points in 2000 time steps. +# +# Created by Oleg Klimov. Licensed on the same terms as the rest of OpenAI Gym. + +FPS = 50 +SCALE = 30.0 # affects how fast-paced the game is, forces should be adjusted as well + +MOTORS_TORQUE = 80 +SPEED_HIP = 4 +SPEED_KNEE = 6 +LIDAR_RANGE = 160/SCALE + +INITIAL_RANDOM = 5 + +HULL_POLY =[ + (-30,+9), (+6,+9), (+34,+1), + (+34,-8), (-30,-8) + ] +LEG_DOWN = -8/SCALE +LEG_W, LEG_H = 8/SCALE, 34/SCALE + +VIEWPORT_W = 600 +VIEWPORT_H = 400 + +TERRAIN_STEP = 14/SCALE +TERRAIN_LENGTH = 200 # in steps +TERRAIN_HEIGHT = VIEWPORT_H/SCALE/4 +TERRAIN_GRASS = 10 # low long are grass spots, in steps +TERRAIN_STARTPAD = 20 # in steps +FRICTION = 2.5 + +HULL_FD = fixtureDef( + shape=polygonShape(vertices=[ (x/SCALE,y/SCALE) for x,y in HULL_POLY ]), + density=5.0, + friction=0.1, + categoryBits=0x0020, + maskBits=0x001, # collide only with ground + restitution=0.0) # 0.99 bouncy + +LEG_FD = fixtureDef( + shape=polygonShape(box=(LEG_W/2, LEG_H/2)), + density=1.0, + restitution=0.0, + categoryBits=0x0020, + maskBits=0x001) + +LOWER_FD = fixtureDef( + shape=polygonShape(box=(0.8*LEG_W/2, LEG_H/2)), + density=1.0, + restitution=0.0, + categoryBits=0x0020, + maskBits=0x001) + +class ContactDetector(contactListener): + def __init__(self, env): + contactListener.__init__(self) + self.env = env + def BeginContact(self, contact): + if self.env.hull==contact.fixtureA.body or self.env.hull==contact.fixtureB.body: + self.env.game_over = True + for leg in [self.env.legs[1], self.env.legs[3]]: + if leg in [contact.fixtureA.body, contact.fixtureB.body]: + leg.ground_contact = True + def EndContact(self, contact): + for leg in [self.env.legs[1], self.env.legs[3]]: + if leg in [contact.fixtureA.body, contact.fixtureB.body]: + leg.ground_contact = False + +class BipedalWalker(gym.Env, EzPickle): + metadata = { + 'render.modes': ['human', 'rgb_array'], + 'video.frames_per_second' : FPS + } + + hardcore = False + + def __init__(self): + EzPickle.__init__(self) + self.seed() + self.viewer = None + + self.world = Box2D.b2World() + self.terrain = None + self.hull = None + + self.prev_shaping = None + + self.fd_polygon = fixtureDef( + shape = polygonShape(vertices= + [(0, 0), + (1, 0), + (1, -1), + (0, -1)]), + friction = FRICTION) + + self.fd_edge = fixtureDef( + shape = edgeShape(vertices= + [(0, 0), + (1, 1)]), + friction = FRICTION, + categoryBits=0x0001, + ) + + self.reset() + + high = np.array([np.inf]*24) + self.action_space = spaces.Box(np.array([-1,-1,-1,-1]), np.array([+1,+1,+1,+1])) + self.observation_space = spaces.Box(-high, high) + + def seed(self, seed=None): + self.np_random, seed = seeding.np_random(seed) + return [seed] + + def _destroy(self): + if not self.terrain: return + self.world.contactListener = None + for t in self.terrain: + self.world.DestroyBody(t) + self.terrain = [] + self.world.DestroyBody(self.hull) + self.hull = None + for leg in self.legs: + self.world.DestroyBody(leg) + self.legs = [] + self.joints = [] + + def _generate_terrain(self, hardcore): + GRASS, STUMP, STAIRS, PIT, _STATES_ = range(5) + state = GRASS + velocity = 0.0 + y = TERRAIN_HEIGHT + counter = TERRAIN_STARTPAD + oneshot = False + self.terrain = [] + self.terrain_x = [] + self.terrain_y = [] + for i in range(TERRAIN_LENGTH): + x = i*TERRAIN_STEP + self.terrain_x.append(x) + + if state==GRASS and not oneshot: + velocity = 0.8*velocity + 0.01*np.sign(TERRAIN_HEIGHT - y) + if i > TERRAIN_STARTPAD: velocity += self.np_random.uniform(-1, 1)/SCALE #1 + y += velocity + + elif state==PIT and oneshot: + counter = self.np_random.randint(3, 5) + poly = [ + (x, y), + (x+TERRAIN_STEP, y), + (x+TERRAIN_STEP, y-4*TERRAIN_STEP), + (x, y-4*TERRAIN_STEP), + ] + self.fd_polygon.shape.vertices=poly + t = self.world.CreateStaticBody( + fixtures = self.fd_polygon) + t.color1, t.color2 = (1,1,1), (0.6,0.6,0.6) + self.terrain.append(t) + + self.fd_polygon.shape.vertices=[(p[0]+TERRAIN_STEP*counter,p[1]) for p in poly] + t = self.world.CreateStaticBody( + fixtures = self.fd_polygon) + t.color1, t.color2 = (1,1,1), (0.6,0.6,0.6) + self.terrain.append(t) + counter += 2 + original_y = y + + elif state==PIT and not oneshot: + y = original_y + if counter > 1: + y -= 4*TERRAIN_STEP + + elif state==STUMP and oneshot: + counter = self.np_random.randint(1, 3) + poly = [ + (x, y), + (x+counter*TERRAIN_STEP, y), + (x+counter*TERRAIN_STEP, y+counter*TERRAIN_STEP), + (x, y+counter*TERRAIN_STEP), + ] + self.fd_polygon.shape.vertices=poly + t = self.world.CreateStaticBody( + fixtures = self.fd_polygon) + t.color1, t.color2 = (1,1,1), (0.6,0.6,0.6) + self.terrain.append(t) + + elif state==STAIRS and oneshot: + stair_height = +1 if self.np_random.rand() > 0.5 else -1 + stair_width = self.np_random.randint(4, 5) + stair_steps = self.np_random.randint(3, 5) + original_y = y + for s in range(stair_steps): + poly = [ + (x+( s*stair_width)*TERRAIN_STEP, y+( s*stair_height)*TERRAIN_STEP), + (x+((1+s)*stair_width)*TERRAIN_STEP, y+( s*stair_height)*TERRAIN_STEP), + (x+((1+s)*stair_width)*TERRAIN_STEP, y+(-1+s*stair_height)*TERRAIN_STEP), + (x+( s*stair_width)*TERRAIN_STEP, y+(-1+s*stair_height)*TERRAIN_STEP), + ] + self.fd_polygon.shape.vertices=poly + t = self.world.CreateStaticBody( + fixtures = self.fd_polygon) + t.color1, t.color2 = (1,1,1), (0.6,0.6,0.6) + self.terrain.append(t) + counter = stair_steps*stair_width + + elif state==STAIRS and not oneshot: + s = stair_steps*stair_width - counter - stair_height + n = s/stair_width + y = original_y + (n*stair_height)*TERRAIN_STEP + + oneshot = False + self.terrain_y.append(y) + counter -= 1 + if counter==0: + counter = self.np_random.randint(TERRAIN_GRASS/2, TERRAIN_GRASS) + if state==GRASS and hardcore: + state = self.np_random.randint(1, _STATES_) + oneshot = True + else: + state = GRASS + oneshot = True + + self.terrain_poly = [] + for i in range(TERRAIN_LENGTH-1): + poly = [ + (self.terrain_x[i], self.terrain_y[i]), + (self.terrain_x[i+1], self.terrain_y[i+1]) + ] + self.fd_edge.shape.vertices=poly + t = self.world.CreateStaticBody( + fixtures = self.fd_edge) + color = (0.3, 1.0 if i%2==0 else 0.8, 0.3) + t.color1 = color + t.color2 = color + self.terrain.append(t) + color = (0.4, 0.6, 0.3) + poly += [ (poly[1][0], 0), (poly[0][0], 0) ] + self.terrain_poly.append( (poly, color) ) + self.terrain.reverse() + + def _generate_clouds(self): + # Sorry for the clouds, couldn't resist + self.cloud_poly = [] + for i in range(TERRAIN_LENGTH//20): + x = self.np_random.uniform(0, TERRAIN_LENGTH)*TERRAIN_STEP + y = VIEWPORT_H/SCALE*3/4 + poly = [ + (x+15*TERRAIN_STEP*math.sin(3.14*2*a/5)+self.np_random.uniform(0,5*TERRAIN_STEP), + y+ 5*TERRAIN_STEP*math.cos(3.14*2*a/5)+self.np_random.uniform(0,5*TERRAIN_STEP) ) + for a in range(5) ] + x1 = min( [p[0] for p in poly] ) + x2 = max( [p[0] for p in poly] ) + self.cloud_poly.append( (poly,x1,x2) ) + + def reset(self): + self._destroy() + self.world.contactListener_bug_workaround = ContactDetector(self) + self.world.contactListener = self.world.contactListener_bug_workaround + self.game_over = False + self.prev_shaping = None + self.scroll = 0.0 + self.lidar_render = 0 + + W = VIEWPORT_W/SCALE + H = VIEWPORT_H/SCALE + + self._generate_terrain(self.hardcore) + self._generate_clouds() + + init_x = TERRAIN_STEP*TERRAIN_STARTPAD/2 + init_y = TERRAIN_HEIGHT+2*LEG_H + self.hull = self.world.CreateDynamicBody( + position = (init_x, init_y), + fixtures = HULL_FD + ) + self.hull.color1 = (0.5,0.4,0.9) + self.hull.color2 = (0.3,0.3,0.5) + self.hull.ApplyForceToCenter((self.np_random.uniform(-INITIAL_RANDOM, INITIAL_RANDOM), 0), True) + + self.legs = [] + self.joints = [] + for i in [-1,+1]: + leg = self.world.CreateDynamicBody( + position = (init_x, init_y - LEG_H/2 - LEG_DOWN), + angle = (i*0.05), + fixtures = LEG_FD + ) + leg.color1 = (0.6-i/10., 0.3-i/10., 0.5-i/10.) + leg.color2 = (0.4-i/10., 0.2-i/10., 0.3-i/10.) + rjd = revoluteJointDef( + bodyA=self.hull, + bodyB=leg, + localAnchorA=(0, LEG_DOWN), + localAnchorB=(0, LEG_H/2), + enableMotor=True, + enableLimit=True, + maxMotorTorque=MOTORS_TORQUE, + motorSpeed = i, + lowerAngle = -0.8, + upperAngle = 1.1, + ) + self.legs.append(leg) + self.joints.append(self.world.CreateJoint(rjd)) + + lower = self.world.CreateDynamicBody( + position = (init_x, init_y - LEG_H*3/2 - LEG_DOWN), + angle = (i*0.05), + fixtures = LOWER_FD + ) + lower.color1 = (0.6-i/10., 0.3-i/10., 0.5-i/10.) + lower.color2 = (0.4-i/10., 0.2-i/10., 0.3-i/10.) + rjd = revoluteJointDef( + bodyA=leg, + bodyB=lower, + localAnchorA=(0, -LEG_H/2), + localAnchorB=(0, LEG_H/2), + enableMotor=True, + enableLimit=True, + maxMotorTorque=MOTORS_TORQUE, + motorSpeed = 1, + lowerAngle = -1.6, + upperAngle = -0.1, + ) + lower.ground_contact = False + self.legs.append(lower) + self.joints.append(self.world.CreateJoint(rjd)) + + self.drawlist = self.terrain + self.legs + [self.hull] + + class LidarCallback(Box2D.b2.rayCastCallback): + def ReportFixture(self, fixture, point, normal, fraction): + if (fixture.filterData.categoryBits & 1) == 0: + return 1 + self.p2 = point + self.fraction = fraction + return 0 + self.lidar = [LidarCallback() for _ in range(10)] + + return self.step(np.array([0,0,0,0]))[0] + + def step(self, action): + #self.hull.ApplyForceToCenter((0, 20), True) -- Uncomment this to receive a bit of stability help + control_speed = False # Should be easier as well + if control_speed: + self.joints[0].motorSpeed = float(SPEED_HIP * np.clip(action[0], -1, 1)) + self.joints[1].motorSpeed = float(SPEED_KNEE * np.clip(action[1], -1, 1)) + self.joints[2].motorSpeed = float(SPEED_HIP * np.clip(action[2], -1, 1)) + self.joints[3].motorSpeed = float(SPEED_KNEE * np.clip(action[3], -1, 1)) + else: + self.joints[0].motorSpeed = float(SPEED_HIP * np.sign(action[0])) + self.joints[0].maxMotorTorque = float(MOTORS_TORQUE * np.clip(np.abs(action[0]), 0, 1)) + self.joints[1].motorSpeed = float(SPEED_KNEE * np.sign(action[1])) + self.joints[1].maxMotorTorque = float(MOTORS_TORQUE * np.clip(np.abs(action[1]), 0, 1)) + self.joints[2].motorSpeed = float(SPEED_HIP * np.sign(action[2])) + self.joints[2].maxMotorTorque = float(MOTORS_TORQUE * np.clip(np.abs(action[2]), 0, 1)) + self.joints[3].motorSpeed = float(SPEED_KNEE * np.sign(action[3])) + self.joints[3].maxMotorTorque = float(MOTORS_TORQUE * np.clip(np.abs(action[3]), 0, 1)) + + self.world.Step(1.0/FPS, 6*30, 2*30) + + pos = self.hull.position + vel = self.hull.linearVelocity + + for i in range(10): + self.lidar[i].fraction = 1.0 + self.lidar[i].p1 = pos + self.lidar[i].p2 = ( + pos[0] + math.sin(1.5*i/10.0)*LIDAR_RANGE, + pos[1] - math.cos(1.5*i/10.0)*LIDAR_RANGE) + self.world.RayCast(self.lidar[i], self.lidar[i].p1, self.lidar[i].p2) + + state = [ + self.hull.angle, # Normal angles up to 0.5 here, but sure more is possible. + 2.0*self.hull.angularVelocity/FPS, + 0.3*vel.x*(VIEWPORT_W/SCALE)/FPS, # Normalized to get -1..1 range + 0.3*vel.y*(VIEWPORT_H/SCALE)/FPS, + self.joints[0].angle, # This will give 1.1 on high up, but it's still OK (and there should be spikes on hiting the ground, that's normal too) + self.joints[0].speed / SPEED_HIP, + self.joints[1].angle + 1.0, + self.joints[1].speed / SPEED_KNEE, + 1.0 if self.legs[1].ground_contact else 0.0, + self.joints[2].angle, + self.joints[2].speed / SPEED_HIP, + self.joints[3].angle + 1.0, + self.joints[3].speed / SPEED_KNEE, + 1.0 if self.legs[3].ground_contact else 0.0 + ] + state += [l.fraction for l in self.lidar] + assert len(state)==24 + + self.scroll = pos.x - VIEWPORT_W/SCALE/5 + + shaping = 130*pos[0]/SCALE # moving forward is a way to receive reward (normalized to get 300 on completion) + shaping -= 5.0*abs(state[0]) # keep head straight, other than that and falling, any behavior is unpunished + + reward = 0 + if self.prev_shaping is not None: + reward = shaping - self.prev_shaping + self.prev_shaping = shaping + + for a in action: + reward -= 0.00035 * MOTORS_TORQUE * np.clip(np.abs(a), 0, 1) + # normalized to about -50.0 using heuristic, more optimal agent should spend less + + done = False + if self.game_over or pos[0] < 0: + reward = -100 + done = True + if pos[0] > (TERRAIN_LENGTH-TERRAIN_GRASS)*TERRAIN_STEP: + done = True + return np.array(state), reward, done, {} + + def render(self, mode='human'): + from gym.envs.classic_control import rendering + if self.viewer is None: + self.viewer = rendering.Viewer(VIEWPORT_W, VIEWPORT_H) + self.viewer.set_bounds(self.scroll, VIEWPORT_W/SCALE + self.scroll, 0, VIEWPORT_H/SCALE) + + self.viewer.draw_polygon( [ + (self.scroll, 0), + (self.scroll+VIEWPORT_W/SCALE, 0), + (self.scroll+VIEWPORT_W/SCALE, VIEWPORT_H/SCALE), + (self.scroll, VIEWPORT_H/SCALE), + ], color=(0.9, 0.9, 1.0) ) + for poly,x1,x2 in self.cloud_poly: + if x2 < self.scroll/2: continue + if x1 > self.scroll/2 + VIEWPORT_W/SCALE: continue + self.viewer.draw_polygon( [(p[0]+self.scroll/2, p[1]) for p in poly], color=(1,1,1)) + for poly, color in self.terrain_poly: + if poly[1][0] < self.scroll: continue + if poly[0][0] > self.scroll + VIEWPORT_W/SCALE: continue + self.viewer.draw_polygon(poly, color=color) + + self.lidar_render = (self.lidar_render+1) % 100 + i = self.lidar_render + if i < 2*len(self.lidar): + l = self.lidar[i] if i < len(self.lidar) else self.lidar[len(self.lidar)-i-1] + self.viewer.draw_polyline( [l.p1, l.p2], color=(1,0,0), linewidth=1 ) + + for obj in self.drawlist: + for f in obj.fixtures: + trans = f.body.transform + if type(f.shape) is circleShape: + t = rendering.Transform(translation=trans*f.shape.pos) + self.viewer.draw_circle(f.shape.radius, 30, color=obj.color1).add_attr(t) + self.viewer.draw_circle(f.shape.radius, 30, color=obj.color2, filled=False, linewidth=2).add_attr(t) + else: + path = [trans*v for v in f.shape.vertices] + self.viewer.draw_polygon(path, color=obj.color1) + path.append(path[0]) + self.viewer.draw_polyline(path, color=obj.color2, linewidth=2) + + flagy1 = TERRAIN_HEIGHT + flagy2 = flagy1 + 50/SCALE + x = TERRAIN_STEP*3 + self.viewer.draw_polyline( [(x, flagy1), (x, flagy2)], color=(0,0,0), linewidth=2 ) + f = [(x, flagy2), (x, flagy2-10/SCALE), (x+25/SCALE, flagy2-5/SCALE)] + self.viewer.draw_polygon(f, color=(0.9,0.2,0) ) + self.viewer.draw_polyline(f + [f[0]], color=(0,0,0), linewidth=2 ) + + return self.viewer.render(return_rgb_array = mode=='rgb_array') + + def close(self): + if self.viewer is not None: + self.viewer.close() + self.viewer = None + +class BipedalWalkerHardcore(BipedalWalker): + hardcore = True + +if __name__=="__main__": + # Heurisic: suboptimal, have no notion of balance. + env = BipedalWalker() + env.reset() + steps = 0 + total_reward = 0 + a = np.array([0.0, 0.0, 0.0, 0.0]) + STAY_ON_ONE_LEG, PUT_OTHER_DOWN, PUSH_OFF = 1,2,3 + SPEED = 0.29 # Will fall forward on higher speed + state = STAY_ON_ONE_LEG + moving_leg = 0 + supporting_leg = 1 - moving_leg + SUPPORT_KNEE_ANGLE = +0.1 + supporting_knee_angle = SUPPORT_KNEE_ANGLE + while True: + s, r, done, info = env.step(a) + total_reward += r + if steps % 20 == 0 or done: + print("\naction " + str(["{:+0.2f}".format(x) for x in a])) + print("step {} total_reward {:+0.2f}".format(steps, total_reward)) + print("hull " + str(["{:+0.2f}".format(x) for x in s[0:4] ])) + print("leg0 " + str(["{:+0.2f}".format(x) for x in s[4:9] ])) + print("leg1 " + str(["{:+0.2f}".format(x) for x in s[9:14]])) + steps += 1 + + contact0 = s[8] + contact1 = s[13] + moving_s_base = 4 + 5*moving_leg + supporting_s_base = 4 + 5*supporting_leg + + hip_targ = [None,None] # -0.8 .. +1.1 + knee_targ = [None,None] # -0.6 .. +0.9 + hip_todo = [0.0, 0.0] + knee_todo = [0.0, 0.0] + + if state==STAY_ON_ONE_LEG: + hip_targ[moving_leg] = 1.1 + knee_targ[moving_leg] = -0.6 + supporting_knee_angle += 0.03 + if s[2] > SPEED: supporting_knee_angle += 0.03 + supporting_knee_angle = min( supporting_knee_angle, SUPPORT_KNEE_ANGLE ) + knee_targ[supporting_leg] = supporting_knee_angle + if s[supporting_s_base+0] < 0.10: # supporting leg is behind + state = PUT_OTHER_DOWN + if state==PUT_OTHER_DOWN: + hip_targ[moving_leg] = +0.1 + knee_targ[moving_leg] = SUPPORT_KNEE_ANGLE + knee_targ[supporting_leg] = supporting_knee_angle + if s[moving_s_base+4]: + state = PUSH_OFF + supporting_knee_angle = min( s[moving_s_base+2], SUPPORT_KNEE_ANGLE ) + if state==PUSH_OFF: + knee_targ[moving_leg] = supporting_knee_angle + knee_targ[supporting_leg] = +1.0 + if s[supporting_s_base+2] > 0.88 or s[2] > 1.2*SPEED: + state = STAY_ON_ONE_LEG + moving_leg = 1 - moving_leg + supporting_leg = 1 - moving_leg + + if hip_targ[0]: hip_todo[0] = 0.9*(hip_targ[0] - s[4]) - 0.25*s[5] + if hip_targ[1]: hip_todo[1] = 0.9*(hip_targ[1] - s[9]) - 0.25*s[10] + if knee_targ[0]: knee_todo[0] = 4.0*(knee_targ[0] - s[6]) - 0.25*s[7] + if knee_targ[1]: knee_todo[1] = 4.0*(knee_targ[1] - s[11]) - 0.25*s[12] + + hip_todo[0] -= 0.9*(0-s[0]) - 1.5*s[1] # PID to keep head strait + hip_todo[1] -= 0.9*(0-s[0]) - 1.5*s[1] + knee_todo[0] -= 15.0*s[3] # vertical speed, to damp oscillations + knee_todo[1] -= 15.0*s[3] + + a[0] = hip_todo[0] + a[1] = knee_todo[0] + a[2] = hip_todo[1] + a[3] = knee_todo[1] + a = np.clip(0.5*a, -1.0, 1.0) + + env.render() + if done: break diff --git a/src/gym/envs/box2d/car_dynamics.py b/src/gym/envs/box2d/car_dynamics.py new file mode 100644 index 0000000..02f6815 --- /dev/null +++ b/src/gym/envs/box2d/car_dynamics.py @@ -0,0 +1,244 @@ +import numpy as np +import math +import Box2D +from Box2D.b2 import (edgeShape, circleShape, fixtureDef, polygonShape, revoluteJointDef, contactListener, shape) + +# Top-down car dynamics simulation. +# +# Some ideas are taken from this great tutorial http://www.iforce2d.net/b2dtut/top-down-car by Chris Campbell. +# This simulation is a bit more detailed, with wheels rotation. +# +# Created by Oleg Klimov. Licensed on the same terms as the rest of OpenAI Gym. + +SIZE = 0.02 +ENGINE_POWER = 100000000*SIZE*SIZE +WHEEL_MOMENT_OF_INERTIA = 4000*SIZE*SIZE +FRICTION_LIMIT = 1000000*SIZE*SIZE # friction ~= mass ~= size^2 (calculated implicitly using density) +WHEEL_R = 27 +WHEEL_W = 14 +WHEELPOS = [ + (-55,+80), (+55,+80), + (-55,-82), (+55,-82) + ] +HULL_POLY1 =[ + (-60,+130), (+60,+130), + (+60,+110), (-60,+110) + ] +HULL_POLY2 =[ + (-15,+120), (+15,+120), + (+20, +20), (-20, 20) + ] +HULL_POLY3 =[ + (+25, +20), + (+50, -10), + (+50, -40), + (+20, -90), + (-20, -90), + (-50, -40), + (-50, -10), + (-25, +20) + ] +HULL_POLY4 =[ + (-50,-120), (+50,-120), + (+50,-90), (-50,-90) + ] +WHEEL_COLOR = (0.0,0.0,0.0) +WHEEL_WHITE = (0.3,0.3,0.3) +MUD_COLOR = (0.4,0.4,0.0) + +class Car: + def __init__(self, world, init_angle, init_x, init_y): + self.world = world + self.hull = self.world.CreateDynamicBody( + position = (init_x, init_y), + angle = init_angle, + fixtures = [ + fixtureDef(shape = polygonShape(vertices=[ (x*SIZE,y*SIZE) for x,y in HULL_POLY1 ]), density=1.0), + fixtureDef(shape = polygonShape(vertices=[ (x*SIZE,y*SIZE) for x,y in HULL_POLY2 ]), density=1.0), + fixtureDef(shape = polygonShape(vertices=[ (x*SIZE,y*SIZE) for x,y in HULL_POLY3 ]), density=1.0), + fixtureDef(shape = polygonShape(vertices=[ (x*SIZE,y*SIZE) for x,y in HULL_POLY4 ]), density=1.0) + ] + ) + self.hull.color = (0.8,0.0,0.0) + self.wheels = [] + self.fuel_spent = 0.0 + WHEEL_POLY = [ + (-WHEEL_W,+WHEEL_R), (+WHEEL_W,+WHEEL_R), + (+WHEEL_W,-WHEEL_R), (-WHEEL_W,-WHEEL_R) + ] + for wx,wy in WHEELPOS: + front_k = 1.0 if wy > 0 else 1.0 + w = self.world.CreateDynamicBody( + position = (init_x+wx*SIZE, init_y+wy*SIZE), + angle = init_angle, + fixtures = fixtureDef( + shape=polygonShape(vertices=[ (x*front_k*SIZE,y*front_k*SIZE) for x,y in WHEEL_POLY ]), + density=0.1, + categoryBits=0x0020, + maskBits=0x001, + restitution=0.0) + ) + w.wheel_rad = front_k*WHEEL_R*SIZE + w.color = WHEEL_COLOR + w.gas = 0.0 + w.brake = 0.0 + w.steer = 0.0 + w.phase = 0.0 # wheel angle + w.omega = 0.0 # angular velocity + w.skid_start = None + w.skid_particle = None + rjd = revoluteJointDef( + bodyA=self.hull, + bodyB=w, + localAnchorA=(wx*SIZE,wy*SIZE), + localAnchorB=(0,0), + enableMotor=True, + enableLimit=True, + maxMotorTorque=180*900*SIZE*SIZE, + motorSpeed = 0, + lowerAngle = -0.4, + upperAngle = +0.4, + ) + w.joint = self.world.CreateJoint(rjd) + w.tiles = set() + w.userData = w + self.wheels.append(w) + self.drawlist = self.wheels + [self.hull] + self.particles = [] + + def gas(self, gas): + 'control: rear wheel drive' + gas = np.clip(gas, 0, 1) + for w in self.wheels[2:4]: + diff = gas - w.gas + if diff > 0.1: diff = 0.1 # gradually increase, but stop immediately + w.gas += diff + + def brake(self, b): + 'control: brake b=0..1, more than 0.9 blocks wheels to zero rotation' + for w in self.wheels: + w.brake = b + + def steer(self, s): + 'control: steer s=-1..1, it takes time to rotate steering wheel from side to side, s is target position' + self.wheels[0].steer = s + self.wheels[1].steer = s + + def step(self, dt): + for w in self.wheels: + # Steer each wheel + dir = np.sign(w.steer - w.joint.angle) + val = abs(w.steer - w.joint.angle) + w.joint.motorSpeed = dir*min(50.0*val, 3.0) + + # Position => friction_limit + grass = True + friction_limit = FRICTION_LIMIT*0.6 # Grass friction if no tile + for tile in w.tiles: + friction_limit = max(friction_limit, FRICTION_LIMIT*tile.road_friction) + grass = False + + # Force + forw = w.GetWorldVector( (0,1) ) + side = w.GetWorldVector( (1,0) ) + v = w.linearVelocity + vf = forw[0]*v[0] + forw[1]*v[1] # forward speed + vs = side[0]*v[0] + side[1]*v[1] # side speed + + # WHEEL_MOMENT_OF_INERTIA*np.square(w.omega)/2 = E -- energy + # WHEEL_MOMENT_OF_INERTIA*w.omega * domega/dt = dE/dt = W -- power + # domega = dt*W/WHEEL_MOMENT_OF_INERTIA/w.omega + w.omega += dt*ENGINE_POWER*w.gas/WHEEL_MOMENT_OF_INERTIA/(abs(w.omega)+5.0) # small coef not to divide by zero + self.fuel_spent += dt*ENGINE_POWER*w.gas + + if w.brake >= 0.9: + w.omega = 0 + elif w.brake > 0: + BRAKE_FORCE = 15 # radians per second + dir = -np.sign(w.omega) + val = BRAKE_FORCE*w.brake + if abs(val) > abs(w.omega): val = abs(w.omega) # low speed => same as = 0 + w.omega += dir*val + w.phase += w.omega*dt + + vr = w.omega*w.wheel_rad # rotating wheel speed + f_force = -vf + vr # force direction is direction of speed difference + p_force = -vs + + # Physically correct is to always apply friction_limit until speed is equal. + # But dt is finite, that will lead to oscillations if difference is already near zero. + f_force *= 205000*SIZE*SIZE # Random coefficient to cut oscillations in few steps (have no effect on friction_limit) + p_force *= 205000*SIZE*SIZE + force = np.sqrt(np.square(f_force) + np.square(p_force)) + + # Skid trace + if abs(force) > 2.0*friction_limit: + if w.skid_particle and w.skid_particle.grass==grass and len(w.skid_particle.poly) < 30: + w.skid_particle.poly.append( (w.position[0], w.position[1]) ) + elif w.skid_start is None: + w.skid_start = w.position + else: + w.skid_particle = self._create_particle( w.skid_start, w.position, grass ) + w.skid_start = None + else: + w.skid_start = None + w.skid_particle = None + + if abs(force) > friction_limit: + f_force /= force + p_force /= force + force = friction_limit # Correct physics here + f_force *= force + p_force *= force + + w.omega -= dt*f_force*w.wheel_rad/WHEEL_MOMENT_OF_INERTIA + + w.ApplyForceToCenter( ( + p_force*side[0] + f_force*forw[0], + p_force*side[1] + f_force*forw[1]), True ) + + def draw(self, viewer, draw_particles=True): + if draw_particles: + for p in self.particles: + viewer.draw_polyline(p.poly, color=p.color, linewidth=5) + for obj in self.drawlist: + for f in obj.fixtures: + trans = f.body.transform + path = [trans*v for v in f.shape.vertices] + viewer.draw_polygon(path, color=obj.color) + if "phase" not in obj.__dict__: continue + a1 = obj.phase + a2 = obj.phase + 1.2 # radians + s1 = math.sin(a1) + s2 = math.sin(a2) + c1 = math.cos(a1) + c2 = math.cos(a2) + if s1>0 and s2>0: continue + if s1>0: c1 = np.sign(c1) + if s2>0: c2 = np.sign(c2) + white_poly = [ + (-WHEEL_W*SIZE, +WHEEL_R*c1*SIZE), (+WHEEL_W*SIZE, +WHEEL_R*c1*SIZE), + (+WHEEL_W*SIZE, +WHEEL_R*c2*SIZE), (-WHEEL_W*SIZE, +WHEEL_R*c2*SIZE) + ] + viewer.draw_polygon([trans*v for v in white_poly], color=WHEEL_WHITE) + + def _create_particle(self, point1, point2, grass): + class Particle: + pass + p = Particle() + p.color = WHEEL_COLOR if not grass else MUD_COLOR + p.ttl = 1 + p.poly = [(point1[0],point1[1]), (point2[0],point2[1])] + p.grass = grass + self.particles.append(p) + while len(self.particles) > 30: + self.particles.pop(0) + return p + + def destroy(self): + self.world.DestroyBody(self.hull) + self.hull = None + for w in self.wheels: + self.world.DestroyBody(w) + self.wheels = [] + diff --git a/src/gym/envs/box2d/car_racing.py b/src/gym/envs/box2d/car_racing.py new file mode 100644 index 0000000..5586413 --- /dev/null +++ b/src/gym/envs/box2d/car_racing.py @@ -0,0 +1,498 @@ +import sys, math +import numpy as np + +import Box2D +from Box2D.b2 import (edgeShape, circleShape, fixtureDef, polygonShape, revoluteJointDef, contactListener) + +import gym +from gym import spaces +from gym.envs.box2d.car_dynamics import Car +from gym.utils import colorize, seeding, EzPickle + +import pyglet +from pyglet import gl + +# Easiest continuous control task to learn from pixels, a top-down racing environment. +# Discreet control is reasonable in this environment as well, on/off discretisation is +# fine. +# +# State consists of STATE_W x STATE_H pixels. +# +# Reward is -0.1 every frame and +1000/N for every track tile visited, where N is +# the total number of tiles in track. For example, if you have finished in 732 frames, +# your reward is 1000 - 0.1*732 = 926.8 points. +# +# Game is solved when agent consistently gets 900+ points. Track is random every episode. +# +# Episode finishes when all tiles are visited. Car also can go outside of PLAYFIELD, that +# is far off the track, then it will get -100 and die. +# +# Some indicators shown at the bottom of the window and the state RGB buffer. From +# left to right: true speed, four ABS sensors, steering wheel position, gyroscope. +# +# To play yourself (it's rather fast for humans), type: +# +# python gym/envs/box2d/car_racing.py +# +# Remember it's powerful rear-wheel drive car, don't press accelerator and turn at the +# same time. +# +# Created by Oleg Klimov. Licensed on the same terms as the rest of OpenAI Gym. + +STATE_W = 96 # less than Atari 160x192 +STATE_H = 96 +VIDEO_W = 600 +VIDEO_H = 400 +WINDOW_W = 1200 +WINDOW_H = 1000 + +SCALE = 6.0 # Track scale +TRACK_RAD = 900/SCALE # Track is heavily morphed circle with this radius +PLAYFIELD = 2000/SCALE # Game over boundary +FPS = 50 +ZOOM = 2.7 # Camera zoom +ZOOM_FOLLOW = True # Set to False for fixed view (don't use zoom) + + +TRACK_DETAIL_STEP = 21/SCALE +TRACK_TURN_RATE = 0.31 +TRACK_WIDTH = 40/SCALE +BORDER = 8/SCALE +BORDER_MIN_COUNT = 4 + +ROAD_COLOR = [0.4, 0.4, 0.4] + +class FrictionDetector(contactListener): + def __init__(self, env): + contactListener.__init__(self) + self.env = env + def BeginContact(self, contact): + self._contact(contact, True) + def EndContact(self, contact): + self._contact(contact, False) + def _contact(self, contact, begin): + tile = None + obj = None + u1 = contact.fixtureA.body.userData + u2 = contact.fixtureB.body.userData + if u1 and "road_friction" in u1.__dict__: + tile = u1 + obj = u2 + if u2 and "road_friction" in u2.__dict__: + tile = u2 + obj = u1 + if not tile: return + + tile.color[0] = ROAD_COLOR[0] + tile.color[1] = ROAD_COLOR[1] + tile.color[2] = ROAD_COLOR[2] + if not obj or "tiles" not in obj.__dict__: return + if begin: + obj.tiles.add(tile) + #print tile.road_friction, "ADD", len(obj.tiles) + if not tile.road_visited: + tile.road_visited = True + self.env.reward += 1000.0/len(self.env.track) + self.env.tile_visited_count += 1 + else: + obj.tiles.remove(tile) + #print tile.road_friction, "DEL", len(obj.tiles) -- should delete to zero when on grass (this works) + +class CarRacing(gym.Env, EzPickle): + metadata = { + 'render.modes': ['human', 'rgb_array', 'state_pixels'], + 'video.frames_per_second' : FPS + } + + def __init__(self): + EzPickle.__init__(self) + self.seed() + self.contactListener_keepref = FrictionDetector(self) + self.world = Box2D.b2World((0,0), contactListener=self.contactListener_keepref) + self.viewer = None + self.invisible_state_window = None + self.invisible_video_window = None + self.road = None + self.car = None + self.reward = 0.0 + self.prev_reward = 0.0 + + self.action_space = spaces.Box( np.array([-1,0,0]), np.array([+1,+1,+1]), dtype=np.float32) # steer, gas, brake + self.observation_space = spaces.Box(low=0, high=255, shape=(STATE_H, STATE_W, 3), dtype=np.uint8) + + def seed(self, seed=None): + self.np_random, seed = seeding.np_random(seed) + return [seed] + + def _destroy(self): + if not self.road: return + for t in self.road: + self.world.DestroyBody(t) + self.road = [] + self.car.destroy() + + def _create_track(self): + CHECKPOINTS = 12 + + # Create checkpoints + checkpoints = [] + for c in range(CHECKPOINTS): + alpha = 2*math.pi*c/CHECKPOINTS + self.np_random.uniform(0, 2*math.pi*1/CHECKPOINTS) + rad = self.np_random.uniform(TRACK_RAD/3, TRACK_RAD) + if c==0: + alpha = 0 + rad = 1.5*TRACK_RAD + if c==CHECKPOINTS-1: + alpha = 2*math.pi*c/CHECKPOINTS + self.start_alpha = 2*math.pi*(-0.5)/CHECKPOINTS + rad = 1.5*TRACK_RAD + checkpoints.append( (alpha, rad*math.cos(alpha), rad*math.sin(alpha)) ) + + #print "\n".join(str(h) for h in checkpoints) + #self.road_poly = [ ( # uncomment this to see checkpoints + # [ (tx,ty) for a,tx,ty in checkpoints ], + # (0.7,0.7,0.9) ) ] + self.road = [] + + # Go from one checkpoint to another to create track + x, y, beta = 1.5*TRACK_RAD, 0, 0 + dest_i = 0 + laps = 0 + track = [] + no_freeze = 2500 + visited_other_side = False + while 1: + alpha = math.atan2(y, x) + if visited_other_side and alpha > 0: + laps += 1 + visited_other_side = False + if alpha < 0: + visited_other_side = True + alpha += 2*math.pi + while True: # Find destination from checkpoints + failed = True + while True: + dest_alpha, dest_x, dest_y = checkpoints[dest_i % len(checkpoints)] + if alpha <= dest_alpha: + failed = False + break + dest_i += 1 + if dest_i % len(checkpoints) == 0: break + if not failed: break + alpha -= 2*math.pi + continue + r1x = math.cos(beta) + r1y = math.sin(beta) + p1x = -r1y + p1y = r1x + dest_dx = dest_x - x # vector towards destination + dest_dy = dest_y - y + proj = r1x*dest_dx + r1y*dest_dy # destination vector projected on rad + while beta - alpha > 1.5*math.pi: beta -= 2*math.pi + while beta - alpha < -1.5*math.pi: beta += 2*math.pi + prev_beta = beta + proj *= SCALE + if proj > 0.3: beta -= min(TRACK_TURN_RATE, abs(0.001*proj)) + if proj < -0.3: beta += min(TRACK_TURN_RATE, abs(0.001*proj)) + x += p1x*TRACK_DETAIL_STEP + y += p1y*TRACK_DETAIL_STEP + track.append( (alpha,prev_beta*0.5 + beta*0.5,x,y) ) + if laps > 4: break + no_freeze -= 1 + if no_freeze==0: break + #print "\n".join([str(t) for t in enumerate(track)]) + + # Find closed loop range i1..i2, first loop should be ignored, second is OK + i1, i2 = -1, -1 + i = len(track) + while True: + i -= 1 + if i==0: return False # Failed + pass_through_start = track[i][0] > self.start_alpha and track[i-1][0] <= self.start_alpha + if pass_through_start and i2==-1: + i2 = i + elif pass_through_start and i1==-1: + i1 = i + break + print("Track generation: %i..%i -> %i-tiles track" % (i1, i2, i2-i1)) + assert i1!=-1 + assert i2!=-1 + + track = track[i1:i2-1] + + first_beta = track[0][1] + first_perp_x = math.cos(first_beta) + first_perp_y = math.sin(first_beta) + # Length of perpendicular jump to put together head and tail + well_glued_together = np.sqrt( + np.square( first_perp_x*(track[0][2] - track[-1][2]) ) + + np.square( first_perp_y*(track[0][3] - track[-1][3]) )) + if well_glued_together > TRACK_DETAIL_STEP: + return False + + # Red-white border on hard turns + border = [False]*len(track) + for i in range(len(track)): + good = True + oneside = 0 + for neg in range(BORDER_MIN_COUNT): + beta1 = track[i-neg-0][1] + beta2 = track[i-neg-1][1] + good &= abs(beta1 - beta2) > TRACK_TURN_RATE*0.2 + oneside += np.sign(beta1 - beta2) + good &= abs(oneside) == BORDER_MIN_COUNT + border[i] = good + for i in range(len(track)): + for neg in range(BORDER_MIN_COUNT): + border[i-neg] |= border[i] + + # Create tiles + for i in range(len(track)): + alpha1, beta1, x1, y1 = track[i] + alpha2, beta2, x2, y2 = track[i-1] + road1_l = (x1 - TRACK_WIDTH*math.cos(beta1), y1 - TRACK_WIDTH*math.sin(beta1)) + road1_r = (x1 + TRACK_WIDTH*math.cos(beta1), y1 + TRACK_WIDTH*math.sin(beta1)) + road2_l = (x2 - TRACK_WIDTH*math.cos(beta2), y2 - TRACK_WIDTH*math.sin(beta2)) + road2_r = (x2 + TRACK_WIDTH*math.cos(beta2), y2 + TRACK_WIDTH*math.sin(beta2)) + t = self.world.CreateStaticBody( fixtures = fixtureDef( + shape=polygonShape(vertices=[road1_l, road1_r, road2_r, road2_l]) + )) + t.userData = t + c = 0.01*(i%3) + t.color = [ROAD_COLOR[0] + c, ROAD_COLOR[1] + c, ROAD_COLOR[2] + c] + t.road_visited = False + t.road_friction = 1.0 + t.fixtures[0].sensor = True + self.road_poly.append(( [road1_l, road1_r, road2_r, road2_l], t.color )) + self.road.append(t) + if border[i]: + side = np.sign(beta2 - beta1) + b1_l = (x1 + side* TRACK_WIDTH *math.cos(beta1), y1 + side* TRACK_WIDTH *math.sin(beta1)) + b1_r = (x1 + side*(TRACK_WIDTH+BORDER)*math.cos(beta1), y1 + side*(TRACK_WIDTH+BORDER)*math.sin(beta1)) + b2_l = (x2 + side* TRACK_WIDTH *math.cos(beta2), y2 + side* TRACK_WIDTH *math.sin(beta2)) + b2_r = (x2 + side*(TRACK_WIDTH+BORDER)*math.cos(beta2), y2 + side*(TRACK_WIDTH+BORDER)*math.sin(beta2)) + self.road_poly.append(( [b1_l, b1_r, b2_r, b2_l], (1,1,1) if i%2==0 else (1,0,0) )) + self.track = track + return True + + def reset(self): + self._destroy() + self.reward = 0.0 + self.prev_reward = 0.0 + self.tile_visited_count = 0 + self.t = 0.0 + self.road_poly = [] + self.human_render = False + + while True: + success = self._create_track() + if success: break + print("retry to generate track (normal if there are not many of this messages)") + self.car = Car(self.world, *self.track[0][1:4]) + + return self.step(None)[0] + + def step(self, action): + if action is not None: + self.car.steer(-action[0]) + self.car.gas(action[1]) + self.car.brake(action[2]) + + self.car.step(1.0/FPS) + self.world.Step(1.0/FPS, 6*30, 2*30) + self.t += 1.0/FPS + + self.state = self.render("state_pixels") + + step_reward = 0 + done = False + if action is not None: # First step without action, called from reset() + self.reward -= 0.1 + # We actually don't want to count fuel spent, we want car to be faster. + #self.reward -= 10 * self.car.fuel_spent / ENGINE_POWER + self.car.fuel_spent = 0.0 + step_reward = self.reward - self.prev_reward + self.prev_reward = self.reward + if self.tile_visited_count==len(self.track): + done = True + x, y = self.car.hull.position + if abs(x) > PLAYFIELD or abs(y) > PLAYFIELD: + done = True + step_reward = -100 + + return self.state, step_reward, done, {} + + def render(self, mode='human'): + if self.viewer is None: + from gym.envs.classic_control import rendering + self.viewer = rendering.Viewer(WINDOW_W, WINDOW_H) + self.score_label = pyglet.text.Label('0000', font_size=36, + x=20, y=WINDOW_H*2.5/40.00, anchor_x='left', anchor_y='center', + color=(255,255,255,255)) + self.transform = rendering.Transform() + + if "t" not in self.__dict__: return # reset() not called yet + + zoom = 0.1*SCALE*max(1-self.t, 0) + ZOOM*SCALE*min(self.t, 1) # Animate zoom first second + zoom_state = ZOOM*SCALE*STATE_W/WINDOW_W + zoom_video = ZOOM*SCALE*VIDEO_W/WINDOW_W + scroll_x = self.car.hull.position[0] + scroll_y = self.car.hull.position[1] + angle = -self.car.hull.angle + vel = self.car.hull.linearVelocity + if np.linalg.norm(vel) > 0.5: + angle = math.atan2(vel[0], vel[1]) + self.transform.set_scale(zoom, zoom) + self.transform.set_translation( + WINDOW_W/2 - (scroll_x*zoom*math.cos(angle) - scroll_y*zoom*math.sin(angle)), + WINDOW_H/4 - (scroll_x*zoom*math.sin(angle) + scroll_y*zoom*math.cos(angle)) ) + self.transform.set_rotation(angle) + + self.car.draw(self.viewer, mode!="state_pixels") + + arr = None + win = self.viewer.window + if mode != 'state_pixels': + win.switch_to() + win.dispatch_events() + if mode=="rgb_array" or mode=="state_pixels": + win.clear() + t = self.transform + if mode=='rgb_array': + VP_W = VIDEO_W + VP_H = VIDEO_H + else: + VP_W = STATE_W + VP_H = STATE_H + gl.glViewport(0, 0, VP_W, VP_H) + t.enable() + self.render_road() + for geom in self.viewer.onetime_geoms: + geom.render() + t.disable() + self.render_indicators(WINDOW_W, WINDOW_H) # TODO: find why 2x needed, wtf + image_data = pyglet.image.get_buffer_manager().get_color_buffer().get_image_data() + arr = np.fromstring(image_data.data, dtype=np.uint8, sep='') + arr = arr.reshape(VP_H, VP_W, 4) + arr = arr[::-1, :, 0:3] + + if mode=="rgb_array" and not self.human_render: # agent can call or not call env.render() itself when recording video. + win.flip() + + if mode=='human': + self.human_render = True + win.clear() + t = self.transform + gl.glViewport(0, 0, WINDOW_W, WINDOW_H) + t.enable() + self.render_road() + for geom in self.viewer.onetime_geoms: + geom.render() + t.disable() + self.render_indicators(WINDOW_W, WINDOW_H) + win.flip() + + self.viewer.onetime_geoms = [] + return arr + + def close(self): + if self.viewer is not None: + self.viewer.close() + self.viewer = None + + def render_road(self): + gl.glBegin(gl.GL_QUADS) + gl.glColor4f(0.4, 0.8, 0.4, 1.0) + gl.glVertex3f(-PLAYFIELD, +PLAYFIELD, 0) + gl.glVertex3f(+PLAYFIELD, +PLAYFIELD, 0) + gl.glVertex3f(+PLAYFIELD, -PLAYFIELD, 0) + gl.glVertex3f(-PLAYFIELD, -PLAYFIELD, 0) + gl.glColor4f(0.4, 0.9, 0.4, 1.0) + k = PLAYFIELD/20.0 + for x in range(-20, 20, 2): + for y in range(-20, 20, 2): + gl.glVertex3f(k*x + k, k*y + 0, 0) + gl.glVertex3f(k*x + 0, k*y + 0, 0) + gl.glVertex3f(k*x + 0, k*y + k, 0) + gl.glVertex3f(k*x + k, k*y + k, 0) + for poly, color in self.road_poly: + gl.glColor4f(color[0], color[1], color[2], 1) + for p in poly: + gl.glVertex3f(p[0], p[1], 0) + gl.glEnd() + + def render_indicators(self, W, H): + gl.glBegin(gl.GL_QUADS) + s = W/40.0 + h = H/40.0 + gl.glColor4f(0,0,0,1) + gl.glVertex3f(W, 0, 0) + gl.glVertex3f(W, 5*h, 0) + gl.glVertex3f(0, 5*h, 0) + gl.glVertex3f(0, 0, 0) + def vertical_ind(place, val, color): + gl.glColor4f(color[0], color[1], color[2], 1) + gl.glVertex3f((place+0)*s, h + h*val, 0) + gl.glVertex3f((place+1)*s, h + h*val, 0) + gl.glVertex3f((place+1)*s, h, 0) + gl.glVertex3f((place+0)*s, h, 0) + def horiz_ind(place, val, color): + gl.glColor4f(color[0], color[1], color[2], 1) + gl.glVertex3f((place+0)*s, 4*h , 0) + gl.glVertex3f((place+val)*s, 4*h, 0) + gl.glVertex3f((place+val)*s, 2*h, 0) + gl.glVertex3f((place+0)*s, 2*h, 0) + true_speed = np.sqrt(np.square(self.car.hull.linearVelocity[0]) + np.square(self.car.hull.linearVelocity[1])) + vertical_ind(5, 0.02*true_speed, (1,1,1)) + vertical_ind(7, 0.01*self.car.wheels[0].omega, (0.0,0,1)) # ABS sensors + vertical_ind(8, 0.01*self.car.wheels[1].omega, (0.0,0,1)) + vertical_ind(9, 0.01*self.car.wheels[2].omega, (0.2,0,1)) + vertical_ind(10,0.01*self.car.wheels[3].omega, (0.2,0,1)) + horiz_ind(20, -10.0*self.car.wheels[0].joint.angle, (0,1,0)) + horiz_ind(30, -0.8*self.car.hull.angularVelocity, (1,0,0)) + gl.glEnd() + self.score_label.text = "%04i" % self.reward + self.score_label.draw() + + +if __name__=="__main__": + from pyglet.window import key + a = np.array( [0.0, 0.0, 0.0] ) + def key_press(k, mod): + global restart + if k==0xff0d: restart = True + if k==key.LEFT: a[0] = -1.0 + if k==key.RIGHT: a[0] = +1.0 + if k==key.UP: a[1] = +1.0 + if k==key.DOWN: a[2] = +0.8 # set 1.0 for wheels to block to zero rotation + def key_release(k, mod): + if k==key.LEFT and a[0]==-1.0: a[0] = 0 + if k==key.RIGHT and a[0]==+1.0: a[0] = 0 + if k==key.UP: a[1] = 0 + if k==key.DOWN: a[2] = 0 + env = CarRacing() + env.render() + record_video = False + if record_video: + env.monitor.start('/tmp/video-test', force=True) + env.viewer.window.on_key_press = key_press + env.viewer.window.on_key_release = key_release + while True: + env.reset() + total_reward = 0.0 + steps = 0 + restart = False + while True: + s, r, done, info = env.step(a) + total_reward += r + if steps % 200 == 0 or done: + print("\naction " + str(["{:+0.2f}".format(x) for x in a])) + print("step {} total_reward {:+0.2f}".format(steps, total_reward)) + #import matplotlib.pyplot as plt + #plt.imshow(s) + #plt.savefig("test.jpeg") + steps += 1 + if not record_video: # Faster, but you can as well call env.render() every time to play full window. + env.render() + if done or restart: break + env.close() diff --git a/src/gym/envs/box2d/lunar_lander.py b/src/gym/envs/box2d/lunar_lander.py new file mode 100644 index 0000000..22d6c6b --- /dev/null +++ b/src/gym/envs/box2d/lunar_lander.py @@ -0,0 +1,420 @@ +import sys, math +import numpy as np + +import Box2D +from Box2D.b2 import (edgeShape, circleShape, fixtureDef, polygonShape, revoluteJointDef, contactListener) + +import gym +from gym import spaces +from gym.utils import seeding, EzPickle + +# Rocket trajectory optimization is a classic topic in Optimal Control. +# +# According to Pontryagin's maximum principle it's optimal to fire engine full throttle or +# turn it off. That's the reason this environment is OK to have discreet actions (engine on or off). +# +# Landing pad is always at coordinates (0,0). Coordinates are the first two numbers in state vector. +# Reward for moving from the top of the screen to landing pad and zero speed is about 100..140 points. +# If lander moves away from landing pad it loses reward back. Episode finishes if the lander crashes or +# comes to rest, receiving additional -100 or +100 points. Each leg ground contact is +10. Firing main +# engine is -0.3 points each frame. Solved is 200 points. +# +# Landing outside landing pad is possible. Fuel is infinite, so an agent can learn to fly and then land +# on its first attempt. Please see source code for details. +# +# Too see heuristic landing, run: +# +# python gym/envs/box2d/lunar_lander.py +# +# To play yourself, run: +# +# python examples/agents/keyboard_agent.py LunarLander-v2 +# +# Created by Oleg Klimov. Licensed on the same terms as the rest of OpenAI Gym. + +FPS = 50 +SCALE = 30.0 # affects how fast-paced the game is, forces should be adjusted as well + +MAIN_ENGINE_POWER = 13.0 +SIDE_ENGINE_POWER = 0.6 + +INITIAL_RANDOM = 1000.0 # Set 1500 to make game harder + +LANDER_POLY =[ + (-14,+17), (-17,0), (-17,-10), + (+17,-10), (+17,0), (+14,+17) + ] +LEG_AWAY = 20 +LEG_DOWN = 18 +LEG_W, LEG_H = 2, 8 +LEG_SPRING_TORQUE = 40 + +SIDE_ENGINE_HEIGHT = 14.0 +SIDE_ENGINE_AWAY = 12.0 + +VIEWPORT_W = 600 +VIEWPORT_H = 400 + +class ContactDetector(contactListener): + def __init__(self, env): + contactListener.__init__(self) + self.env = env + def BeginContact(self, contact): + if self.env.lander==contact.fixtureA.body or self.env.lander==contact.fixtureB.body: + self.env.game_over = True + for i in range(2): + if self.env.legs[i] in [contact.fixtureA.body, contact.fixtureB.body]: + self.env.legs[i].ground_contact = True + def EndContact(self, contact): + for i in range(2): + if self.env.legs[i] in [contact.fixtureA.body, contact.fixtureB.body]: + self.env.legs[i].ground_contact = False + +class LunarLander(gym.Env, EzPickle): + metadata = { + 'render.modes': ['human', 'rgb_array'], + 'video.frames_per_second' : FPS + } + + continuous = False + + def __init__(self): + EzPickle.__init__(self) + self.seed() + self.viewer = None + + self.world = Box2D.b2World() + self.moon = None + self.lander = None + self.particles = [] + + self.prev_reward = None + + # useful range is -1 .. +1, but spikes can be higher + self.observation_space = spaces.Box(-np.inf, np.inf, shape=(8,), dtype=np.float32) + + if self.continuous: + # Action is two floats [main engine, left-right engines]. + # Main engine: -1..0 off, 0..+1 throttle from 50% to 100% power. Engine can't work with less than 50% power. + # Left-right: -1.0..-0.5 fire left engine, +0.5..+1.0 fire right engine, -0.5..0.5 off + self.action_space = spaces.Box(-1, +1, (2,), dtype=np.float32) + else: + # Nop, fire left engine, main engine, right engine + self.action_space = spaces.Discrete(4) + + self.reset() + + def seed(self, seed=None): + self.np_random, seed = seeding.np_random(seed) + return [seed] + + def _destroy(self): + if not self.moon: return + self.world.contactListener = None + self._clean_particles(True) + self.world.DestroyBody(self.moon) + self.moon = None + self.world.DestroyBody(self.lander) + self.lander = None + self.world.DestroyBody(self.legs[0]) + self.world.DestroyBody(self.legs[1]) + + def reset(self): + self._destroy() + self.world.contactListener_keepref = ContactDetector(self) + self.world.contactListener = self.world.contactListener_keepref + self.game_over = False + self.prev_shaping = None + + W = VIEWPORT_W/SCALE + H = VIEWPORT_H/SCALE + + # terrain + CHUNKS = 11 + height = self.np_random.uniform(0, H/2, size=(CHUNKS+1,) ) + chunk_x = [W/(CHUNKS-1)*i for i in range(CHUNKS)] + self.helipad_x1 = chunk_x[CHUNKS//2-1] + self.helipad_x2 = chunk_x[CHUNKS//2+1] + self.helipad_y = H/4 + height[CHUNKS//2-2] = self.helipad_y + height[CHUNKS//2-1] = self.helipad_y + height[CHUNKS//2+0] = self.helipad_y + height[CHUNKS//2+1] = self.helipad_y + height[CHUNKS//2+2] = self.helipad_y + smooth_y = [0.33*(height[i-1] + height[i+0] + height[i+1]) for i in range(CHUNKS)] + + self.moon = self.world.CreateStaticBody( shapes=edgeShape(vertices=[(0, 0), (W, 0)]) ) + self.sky_polys = [] + for i in range(CHUNKS-1): + p1 = (chunk_x[i], smooth_y[i]) + p2 = (chunk_x[i+1], smooth_y[i+1]) + self.moon.CreateEdgeFixture( + vertices=[p1,p2], + density=0, + friction=0.1) + self.sky_polys.append( [p1, p2, (p2[0],H), (p1[0],H)] ) + + self.moon.color1 = (0.0,0.0,0.0) + self.moon.color2 = (0.0,0.0,0.0) + + initial_y = VIEWPORT_H/SCALE + self.lander = self.world.CreateDynamicBody( + position = (VIEWPORT_W/SCALE/2, initial_y), + angle=0.0, + fixtures = fixtureDef( + shape=polygonShape(vertices=[ (x/SCALE,y/SCALE) for x,y in LANDER_POLY ]), + density=5.0, + friction=0.1, + categoryBits=0x0010, + maskBits=0x001, # collide only with ground + restitution=0.0) # 0.99 bouncy + ) + self.lander.color1 = (0.5,0.4,0.9) + self.lander.color2 = (0.3,0.3,0.5) + self.lander.ApplyForceToCenter( ( + self.np_random.uniform(-INITIAL_RANDOM, INITIAL_RANDOM), + self.np_random.uniform(-INITIAL_RANDOM, INITIAL_RANDOM) + ), True) + + self.legs = [] + for i in [-1,+1]: + leg = self.world.CreateDynamicBody( + position = (VIEWPORT_W/SCALE/2 - i*LEG_AWAY/SCALE, initial_y), + angle = (i*0.05), + fixtures = fixtureDef( + shape=polygonShape(box=(LEG_W/SCALE, LEG_H/SCALE)), + density=1.0, + restitution=0.0, + categoryBits=0x0020, + maskBits=0x001) + ) + leg.ground_contact = False + leg.color1 = (0.5,0.4,0.9) + leg.color2 = (0.3,0.3,0.5) + rjd = revoluteJointDef( + bodyA=self.lander, + bodyB=leg, + localAnchorA=(0, 0), + localAnchorB=(i*LEG_AWAY/SCALE, LEG_DOWN/SCALE), + enableMotor=True, + enableLimit=True, + maxMotorTorque=LEG_SPRING_TORQUE, + motorSpeed=+0.3*i # low enough not to jump back into the sky + ) + if i==-1: + rjd.lowerAngle = +0.9 - 0.5 # Yes, the most esoteric numbers here, angles legs have freedom to travel within + rjd.upperAngle = +0.9 + else: + rjd.lowerAngle = -0.9 + rjd.upperAngle = -0.9 + 0.5 + leg.joint = self.world.CreateJoint(rjd) + self.legs.append(leg) + + self.drawlist = [self.lander] + self.legs + + return self.step(np.array([0,0]) if self.continuous else 0)[0] + + def _create_particle(self, mass, x, y, ttl): + p = self.world.CreateDynamicBody( + position = (x,y), + angle=0.0, + fixtures = fixtureDef( + shape=circleShape(radius=2/SCALE, pos=(0,0)), + density=mass, + friction=0.1, + categoryBits=0x0100, + maskBits=0x001, # collide only with ground + restitution=0.3) + ) + p.ttl = ttl + self.particles.append(p) + self._clean_particles(False) + return p + + def _clean_particles(self, all): + while self.particles and (all or self.particles[0].ttl<0): + self.world.DestroyBody(self.particles.pop(0)) + + def step(self, action): + if self.continuous: + action = np.clip(action, -1, +1).astype(np.float32) + else: + assert self.action_space.contains(action), "%r (%s) invalid " % (action, type(action)) + + # Engines + tip = (math.sin(self.lander.angle), math.cos(self.lander.angle)) + side = (-tip[1], tip[0]); + dispersion = [self.np_random.uniform(-1.0, +1.0) / SCALE for _ in range(2)] + + m_power = 0.0 + if (self.continuous and action[0] > 0.0) or (not self.continuous and action==2): + # Main engine + if self.continuous: + m_power = (np.clip(action[0], 0.0,1.0) + 1.0)*0.5 # 0.5..1.0 + assert m_power>=0.5 and m_power <= 1.0 + else: + m_power = 1.0 + ox = tip[0]*(4/SCALE + 2*dispersion[0]) + side[0]*dispersion[1] # 4 is move a bit downwards, +-2 for randomness + oy = -tip[1]*(4/SCALE + 2*dispersion[0]) - side[1]*dispersion[1] + impulse_pos = (self.lander.position[0] + ox, self.lander.position[1] + oy) + p = self._create_particle(3.5, impulse_pos[0], impulse_pos[1], m_power) # particles are just a decoration, 3.5 is here to make particle speed adequate + p.ApplyLinearImpulse( ( ox*MAIN_ENGINE_POWER*m_power, oy*MAIN_ENGINE_POWER*m_power), impulse_pos, True) + self.lander.ApplyLinearImpulse( (-ox*MAIN_ENGINE_POWER*m_power, -oy*MAIN_ENGINE_POWER*m_power), impulse_pos, True) + + s_power = 0.0 + if (self.continuous and np.abs(action[1]) > 0.5) or (not self.continuous and action in [1,3]): + # Orientation engines + if self.continuous: + direction = np.sign(action[1]) + s_power = np.clip(np.abs(action[1]), 0.5,1.0) + assert s_power>=0.5 and s_power <= 1.0 + else: + direction = action-2 + s_power = 1.0 + ox = tip[0]*dispersion[0] + side[0]*(3*dispersion[1]+direction*SIDE_ENGINE_AWAY/SCALE) + oy = -tip[1]*dispersion[0] - side[1]*(3*dispersion[1]+direction*SIDE_ENGINE_AWAY/SCALE) + impulse_pos = (self.lander.position[0] + ox - tip[0]*17/SCALE, self.lander.position[1] + oy + tip[1]*SIDE_ENGINE_HEIGHT/SCALE) + p = self._create_particle(0.7, impulse_pos[0], impulse_pos[1], s_power) + p.ApplyLinearImpulse( ( ox*SIDE_ENGINE_POWER*s_power, oy*SIDE_ENGINE_POWER*s_power), impulse_pos, True) + self.lander.ApplyLinearImpulse( (-ox*SIDE_ENGINE_POWER*s_power, -oy*SIDE_ENGINE_POWER*s_power), impulse_pos, True) + + self.world.Step(1.0/FPS, 6*30, 2*30) + + pos = self.lander.position + vel = self.lander.linearVelocity + state = [ + (pos.x - VIEWPORT_W/SCALE/2) / (VIEWPORT_W/SCALE/2), + (pos.y - (self.helipad_y+LEG_DOWN/SCALE)) / (VIEWPORT_H/SCALE/2), + vel.x*(VIEWPORT_W/SCALE/2)/FPS, + vel.y*(VIEWPORT_H/SCALE/2)/FPS, + self.lander.angle, + 20.0*self.lander.angularVelocity/FPS, + 1.0 if self.legs[0].ground_contact else 0.0, + 1.0 if self.legs[1].ground_contact else 0.0 + ] + assert len(state)==8 + + reward = 0 + shaping = \ + - 100*np.sqrt(state[0]*state[0] + state[1]*state[1]) \ + - 100*np.sqrt(state[2]*state[2] + state[3]*state[3]) \ + - 100*abs(state[4]) + 10*state[6] + 10*state[7] # And ten points for legs contact, the idea is if you + # lose contact again after landing, you get negative reward + if self.prev_shaping is not None: + reward = shaping - self.prev_shaping + self.prev_shaping = shaping + + reward -= m_power*0.30 # less fuel spent is better, about -30 for heurisic landing + reward -= s_power*0.03 + + done = False + if self.game_over or abs(state[0]) >= 1.0: + done = True + reward = -100 + if not self.lander.awake: + done = True + reward = +100 + return np.array(state, dtype=np.float32), reward, done, {} + + def render(self, mode='human'): + from gym.envs.classic_control import rendering + if self.viewer is None: + self.viewer = rendering.Viewer(VIEWPORT_W, VIEWPORT_H) + self.viewer.set_bounds(0, VIEWPORT_W/SCALE, 0, VIEWPORT_H/SCALE) + + for obj in self.particles: + obj.ttl -= 0.15 + obj.color1 = (max(0.2,0.2+obj.ttl), max(0.2,0.5*obj.ttl), max(0.2,0.5*obj.ttl)) + obj.color2 = (max(0.2,0.2+obj.ttl), max(0.2,0.5*obj.ttl), max(0.2,0.5*obj.ttl)) + + self._clean_particles(False) + + for p in self.sky_polys: + self.viewer.draw_polygon(p, color=(0,0,0)) + + for obj in self.particles + self.drawlist: + for f in obj.fixtures: + trans = f.body.transform + if type(f.shape) is circleShape: + t = rendering.Transform(translation=trans*f.shape.pos) + self.viewer.draw_circle(f.shape.radius, 20, color=obj.color1).add_attr(t) + self.viewer.draw_circle(f.shape.radius, 20, color=obj.color2, filled=False, linewidth=2).add_attr(t) + else: + path = [trans*v for v in f.shape.vertices] + self.viewer.draw_polygon(path, color=obj.color1) + path.append(path[0]) + self.viewer.draw_polyline(path, color=obj.color2, linewidth=2) + + for x in [self.helipad_x1, self.helipad_x2]: + flagy1 = self.helipad_y + flagy2 = flagy1 + 50/SCALE + self.viewer.draw_polyline( [(x, flagy1), (x, flagy2)], color=(1,1,1) ) + self.viewer.draw_polygon( [(x, flagy2), (x, flagy2-10/SCALE), (x+25/SCALE, flagy2-5/SCALE)], color=(0.8,0.8,0) ) + + return self.viewer.render(return_rgb_array = mode=='rgb_array') + + def close(self): + if self.viewer is not None: + self.viewer.close() + self.viewer = None + +class LunarLanderContinuous(LunarLander): + continuous = True + +def heuristic(env, s): + # Heuristic for: + # 1. Testing. + # 2. Demonstration rollout. + angle_targ = s[0]*0.5 + s[2]*1.0 # angle should point towards center (s[0] is horizontal coordinate, s[2] hor speed) + if angle_targ > 0.4: angle_targ = 0.4 # more than 0.4 radians (22 degrees) is bad + if angle_targ < -0.4: angle_targ = -0.4 + hover_targ = 0.55*np.abs(s[0]) # target y should be proporional to horizontal offset + + # PID controller: s[4] angle, s[5] angularSpeed + angle_todo = (angle_targ - s[4])*0.5 - (s[5])*1.0 + #print("angle_targ=%0.2f, angle_todo=%0.2f" % (angle_targ, angle_todo)) + + # PID controller: s[1] vertical coordinate s[3] vertical speed + hover_todo = (hover_targ - s[1])*0.5 - (s[3])*0.5 + #print("hover_targ=%0.2f, hover_todo=%0.2f" % (hover_targ, hover_todo)) + + if s[6] or s[7]: # legs have contact + angle_todo = 0 + hover_todo = -(s[3])*0.5 # override to reduce fall speed, that's all we need after contact + + if env.continuous: + a = np.array( [hover_todo*20 - 1, -angle_todo*20] ) + a = np.clip(a, -1, +1) + else: + a = 0 + if hover_todo > np.abs(angle_todo) and hover_todo > 0.05: a = 2 + elif angle_todo < -0.05: a = 3 + elif angle_todo > +0.05: a = 1 + return a + +def demo_heuristic_lander(env, seed=None, render=False): + env.seed(seed) + total_reward = 0 + steps = 0 + s = env.reset() + while True: + a = heuristic(env, s) + s, r, done, info = env.step(a) + total_reward += r + + if render: + still_open = env.render() + if still_open == False: break + + if steps % 20 == 0 or done: + print("observations:", " ".join(["{:+0.2f}".format(x) for x in s])) + print("step {} total_reward {:+0.2f}".format(steps, total_reward)) + steps += 1 + if done: break + return total_reward + + +if __name__ == '__main__': + demo_heuristic_lander(LunarLander(), render=True) + + diff --git a/src/gym/envs/box2d/test_lunar_lander.py b/src/gym/envs/box2d/test_lunar_lander.py new file mode 100644 index 0000000..bdd81ce --- /dev/null +++ b/src/gym/envs/box2d/test_lunar_lander.py @@ -0,0 +1,13 @@ +from .lunar_lander import LunarLander, LunarLanderContinuous, demo_heuristic_lander + +def test_lunar_lander(): + _test_lander(LunarLander(), seed=0) + +def test_lunar_lander_continuous(): + _test_lander(LunarLanderContinuous(), seed=0) + +def _test_lander(env, seed=None, render=False): + total_reward = demo_heuristic_lander(env, seed=seed, render=render) + assert total_reward > 100 + + diff --git a/src/gym/envs/classic_control/__init__.py b/src/gym/envs/classic_control/__init__.py new file mode 100644 index 0000000..53b3ff3 --- /dev/null +++ b/src/gym/envs/classic_control/__init__.py @@ -0,0 +1,6 @@ +from gym.envs.classic_control.cartpole import CartPoleEnv +from gym.envs.classic_control.mountain_car import MountainCarEnv +from gym.envs.classic_control.continuous_mountain_car import Continuous_MountainCarEnv +from gym.envs.classic_control.pendulum import PendulumEnv +from gym.envs.classic_control.acrobot import AcrobotEnv + diff --git a/src/gym/envs/classic_control/acrobot.py b/src/gym/envs/classic_control/acrobot.py new file mode 100644 index 0000000..9a3ef4d --- /dev/null +++ b/src/gym/envs/classic_control/acrobot.py @@ -0,0 +1,304 @@ +"""classic Acrobot task""" +from gym import core, spaces +from gym.utils import seeding +import numpy as np +from numpy import sin, cos, pi + +__copyright__ = "Copyright 2013, RLPy http://acl.mit.edu/RLPy" +__credits__ = ["Alborz Geramifard", "Robert H. Klein", "Christoph Dann", + "William Dabney", "Jonathan P. How"] +__license__ = "BSD 3-Clause" +__author__ = "Christoph Dann " + +# SOURCE: +# https://github.com/rlpy/rlpy/blob/master/rlpy/Domains/Acrobot.py + +class AcrobotEnv(core.Env): + + """ + Acrobot is a 2-link pendulum with only the second joint actuated + Intitially, both links point downwards. The goal is to swing the + end-effector at a height at least the length of one link above the base. + Both links can swing freely and can pass by each other, i.e., they don't + collide when they have the same angle. + **STATE:** + The state consists of the sin() and cos() of the two rotational joint + angles and the joint angular velocities : + [cos(theta1) sin(theta1) cos(theta2) sin(theta2) thetaDot1 thetaDot2]. + For the first link, an angle of 0 corresponds to the link pointing downwards. + The angle of the second link is relative to the angle of the first link. + An angle of 0 corresponds to having the same angle between the two links. + A state of [1, 0, 1, 0, ..., ...] means that both links point downwards. + **ACTIONS:** + The action is either applying +1, 0 or -1 torque on the joint between + the two pendulum links. + .. note:: + The dynamics equations were missing some terms in the NIPS paper which + are present in the book. R. Sutton confirmed in personal correspondance + that the experimental results shown in the paper and the book were + generated with the equations shown in the book. + However, there is the option to run the domain with the paper equations + by setting book_or_nips = 'nips' + **REFERENCE:** + .. seealso:: + R. Sutton: Generalization in Reinforcement Learning: + Successful Examples Using Sparse Coarse Coding (NIPS 1996) + .. seealso:: + R. Sutton and A. G. Barto: + Reinforcement learning: An introduction. + Cambridge: MIT press, 1998. + .. warning:: + This version of the domain uses the Runge-Kutta method for integrating + the system dynamics and is more realistic, but also considerably harder + than the original version which employs Euler integration, + see the AcrobotLegacy class. + """ + + metadata = { + 'render.modes': ['human', 'rgb_array'], + 'video.frames_per_second' : 15 + } + + dt = .2 + + LINK_LENGTH_1 = 1. # [m] + LINK_LENGTH_2 = 1. # [m] + LINK_MASS_1 = 1. #: [kg] mass of link 1 + LINK_MASS_2 = 1. #: [kg] mass of link 2 + LINK_COM_POS_1 = 0.5 #: [m] position of the center of mass of link 1 + LINK_COM_POS_2 = 0.5 #: [m] position of the center of mass of link 2 + LINK_MOI = 1. #: moments of inertia for both links + + MAX_VEL_1 = 4 * np.pi + MAX_VEL_2 = 9 * np.pi + + AVAIL_TORQUE = [-1., 0., +1] + + torque_noise_max = 0. + + #: use dynamics equations from the nips paper or the book + book_or_nips = "book" + action_arrow = None + domain_fig = None + actions_num = 3 + + def __init__(self): + self.viewer = None + high = np.array([1.0, 1.0, 1.0, 1.0, self.MAX_VEL_1, self.MAX_VEL_2]) + low = -high + self.observation_space = spaces.Box(low=low, high=high) + self.action_space = spaces.Discrete(3) + self.state = None + self.seed() + + def seed(self, seed=None): + self.np_random, seed = seeding.np_random(seed) + return [seed] + + def reset(self): + self.state = self.np_random.uniform(low=-0.1, high=0.1, size=(4,)) + return self._get_ob() + + def step(self, a): + s = self.state + torque = self.AVAIL_TORQUE[a] + + # Add noise to the force action + if self.torque_noise_max > 0: + torque += self.np_random.uniform(-self.torque_noise_max, self.torque_noise_max) + + # Now, augment the state with our force action so it can be passed to + # _dsdt + s_augmented = np.append(s, torque) + + ns = rk4(self._dsdt, s_augmented, [0, self.dt]) + # only care about final timestep of integration returned by integrator + ns = ns[-1] + ns = ns[:4] # omit action + # ODEINT IS TOO SLOW! + # ns_continuous = integrate.odeint(self._dsdt, self.s_continuous, [0, self.dt]) + # self.s_continuous = ns_continuous[-1] # We only care about the state + # at the ''final timestep'', self.dt + + ns[0] = wrap(ns[0], -pi, pi) + ns[1] = wrap(ns[1], -pi, pi) + ns[2] = bound(ns[2], -self.MAX_VEL_1, self.MAX_VEL_1) + ns[3] = bound(ns[3], -self.MAX_VEL_2, self.MAX_VEL_2) + self.state = ns + terminal = self._terminal() + reward = -1. if not terminal else 0. + return (self._get_ob(), reward, terminal, {}) + + def _get_ob(self): + s = self.state + return np.array([cos(s[0]), np.sin(s[0]), cos(s[1]), sin(s[1]), s[2], s[3]]) + + def _terminal(self): + s = self.state + return bool(-np.cos(s[0]) - np.cos(s[1] + s[0]) > 1.) + + def _dsdt(self, s_augmented, t): + m1 = self.LINK_MASS_1 + m2 = self.LINK_MASS_2 + l1 = self.LINK_LENGTH_1 + lc1 = self.LINK_COM_POS_1 + lc2 = self.LINK_COM_POS_2 + I1 = self.LINK_MOI + I2 = self.LINK_MOI + g = 9.8 + a = s_augmented[-1] + s = s_augmented[:-1] + theta1 = s[0] + theta2 = s[1] + dtheta1 = s[2] + dtheta2 = s[3] + d1 = m1 * lc1 ** 2 + m2 * \ + (l1 ** 2 + lc2 ** 2 + 2 * l1 * lc2 * np.cos(theta2)) + I1 + I2 + d2 = m2 * (lc2 ** 2 + l1 * lc2 * np.cos(theta2)) + I2 + phi2 = m2 * lc2 * g * np.cos(theta1 + theta2 - np.pi / 2.) + phi1 = - m2 * l1 * lc2 * dtheta2 ** 2 * np.sin(theta2) \ + - 2 * m2 * l1 * lc2 * dtheta2 * dtheta1 * np.sin(theta2) \ + + (m1 * lc1 + m2 * l1) * g * np.cos(theta1 - np.pi / 2) + phi2 + if self.book_or_nips == "nips": + # the following line is consistent with the description in the + # paper + ddtheta2 = (a + d2 / d1 * phi1 - phi2) / \ + (m2 * lc2 ** 2 + I2 - d2 ** 2 / d1) + else: + # the following line is consistent with the java implementation and the + # book + ddtheta2 = (a + d2 / d1 * phi1 - m2 * l1 * lc2 * dtheta1 ** 2 * np.sin(theta2) - phi2) \ + / (m2 * lc2 ** 2 + I2 - d2 ** 2 / d1) + ddtheta1 = -(d2 * ddtheta2 + phi1) / d1 + return (dtheta1, dtheta2, ddtheta1, ddtheta2, 0.) + + def render(self, mode='human'): + from gym.envs.classic_control import rendering + + s = self.state + + if self.viewer is None: + self.viewer = rendering.Viewer(500,500) + bound = self.LINK_LENGTH_1 + self.LINK_LENGTH_2 + 0.2 # 2.2 for default + self.viewer.set_bounds(-bound,bound,-bound,bound) + + if s is None: return None + + p1 = [-self.LINK_LENGTH_1 * + np.cos(s[0]), self.LINK_LENGTH_1 * np.sin(s[0])] + + p2 = [p1[0] - self.LINK_LENGTH_2 * np.cos(s[0] + s[1]), + p1[1] + self.LINK_LENGTH_2 * np.sin(s[0] + s[1])] + + xys = np.array([[0,0], p1, p2])[:,::-1] + thetas = [s[0]-np.pi/2, s[0]+s[1]-np.pi/2] + link_lengths = [self.LINK_LENGTH_1, self.LINK_LENGTH_2] + + self.viewer.draw_line((-2.2, 1), (2.2, 1)) + for ((x,y),th,llen) in zip(xys, thetas, link_lengths): + l,r,t,b = 0, llen, .1, -.1 + jtransform = rendering.Transform(rotation=th, translation=(x,y)) + link = self.viewer.draw_polygon([(l,b), (l,t), (r,t), (r,b)]) + link.add_attr(jtransform) + link.set_color(0,.8, .8) + circ = self.viewer.draw_circle(.1) + circ.set_color(.8, .8, 0) + circ.add_attr(jtransform) + + return self.viewer.render(return_rgb_array = mode=='rgb_array') + + def close(self): + if self.viewer: + self.viewer.close() + self.viewer = None + +def wrap(x, m, M): + """ + :param x: a scalar + :param m: minimum possible value in range + :param M: maximum possible value in range + Wraps ``x`` so m <= x <= M; but unlike ``bound()`` which + truncates, ``wrap()`` wraps x around the coordinate system defined by m,M.\n + For example, m = -180, M = 180 (degrees), x = 360 --> returns 0. + """ + diff = M - m + while x > M: + x = x - diff + while x < m: + x = x + diff + return x + +def bound(x, m, M=None): + """ + :param x: scalar + Either have m as scalar, so bound(x,m,M) which returns m <= x <= M *OR* + have m as length 2 vector, bound(x,m, ) returns m[0] <= x <= m[1]. + """ + if M is None: + M = m[1] + m = m[0] + # bound x between min (m) and Max (M) + return min(max(x, m), M) + + +def rk4(derivs, y0, t, *args, **kwargs): + """ + Integrate 1D or ND system of ODEs using 4-th order Runge-Kutta. + This is a toy implementation which may be useful if you find + yourself stranded on a system w/o scipy. Otherwise use + :func:`scipy.integrate`. + *y0* + initial state vector + *t* + sample times + *derivs* + returns the derivative of the system and has the + signature ``dy = derivs(yi, ti)`` + *args* + additional arguments passed to the derivative function + *kwargs* + additional keyword arguments passed to the derivative function + Example 1 :: + ## 2D system + def derivs6(x,t): + d1 = x[0] + 2*x[1] + d2 = -3*x[0] + 4*x[1] + return (d1, d2) + dt = 0.0005 + t = arange(0.0, 2.0, dt) + y0 = (1,2) + yout = rk4(derivs6, y0, t) + Example 2:: + ## 1D system + alpha = 2 + def derivs(x,t): + return -alpha*x + exp(-t) + y0 = 1 + yout = rk4(derivs, y0, t) + If you have access to scipy, you should probably be using the + scipy.integrate tools rather than this function. + """ + + try: + Ny = len(y0) + except TypeError: + yout = np.zeros((len(t),), np.float_) + else: + yout = np.zeros((len(t), Ny), np.float_) + + yout[0] = y0 + + + for i in np.arange(len(t) - 1): + + thist = t[i] + dt = t[i + 1] - thist + dt2 = dt / 2.0 + y0 = yout[i] + + k1 = np.asarray(derivs(y0, thist, *args, **kwargs)) + k2 = np.asarray(derivs(y0 + dt2 * k1, thist + dt2, *args, **kwargs)) + k3 = np.asarray(derivs(y0 + dt2 * k2, thist + dt2, *args, **kwargs)) + k4 = np.asarray(derivs(y0 + dt * k3, thist + dt, *args, **kwargs)) + yout[i + 1] = y0 + dt / 6.0 * (k1 + 2 * k2 + 2 * k3 + k4) + return yout diff --git a/src/gym/envs/classic_control/assets/clockwise.png b/src/gym/envs/classic_control/assets/clockwise.png new file mode 100644 index 0000000000000000000000000000000000000000..1aa423652b279e6bf31cd1f06bed6a9c421f9323 GIT binary patch literal 6992 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\+8odP_4r{w5p|#McwnYwrp{>%xdfe zNxZoy&2%cs7bQxcQsEgiFji_;zk0k>4M1iJJx$y8O|^#3e{n{bS- z(|WD8D^2<-_)>g1dyKAoed#$H8-1HlH=&a#9m;j|3hzbtviL(i_Z-zjOZ1Ov zKP^S`Wa8I{@&X?mG1(MxcKMeEv0Mn(M;-hCNB@%uxe?kV7vqL)W@9u9q&KkZk62BQ%+obIJ-;vV`<8?|HAslnw7JNls zzt-7tQWprAvFa{rpVX2O)TtzLnKe zxBBm%sOhgxJs)Sk6aWn#=dQ1rdRk|1R%@M3hc7m+&?(l%vJaJe+zzo&TVK*=_-&ra z^ZN^=0J;%E-5l3c=24zNH@8LpqD@>myfT_|_n>Gq*I@q4{S zd4u1Tp!g@;O|#UpDcK4Bgp{VFJfR&F zvD5j_ba=IB^^zdH?&Fq6;0YSWEz_CAfOIl~(4me89o;-)Ls8UvFM- zPrG7jQe3M=Tw08-ThCFt4D~mHQcu(3VHE{!+Y=51?)na>%cp3GPW9!$zCBCAIBCRK z|6dp}0k6Ax$!A*7z;w>RL=bnutX5B#QP@x(1V6 zJd~J(k53ls zJXo-jV>xDS+A47AXb&GQpYuz>J^j8b*&n;gc%^4rm{zQ!)_{~E@NB(msPy& zW2#|>c6fAnOMhJ<7@Avne#e)YD+@P+-ng6t$SDV}?X~d)ite!Czg}v5xP3Oy8|QO= zrD4y_;g-|t^fTZ09dRKl3gfRFy=E`Xius;DlQ^nP@=(@%ahCMt1q0{rfC`5VPXwK4 z=c~H7r>^$kW=JTWTQ~dVOoEX3#e}+43hH^MCxln9dMzrJFfxBOZ zZ92AB{ZaDn)0Nmb1%o z3w)1^%LL4{?b)mDuI2nVBIx3SOXMM~Nlc5POAn&#nwd|aYdMQGgVmRk?4{*jCZir8 z%RQ$0D1l>}8zMi+T-fKU`h1UQekDNXdAGF06*jdnI!IVA)S55*rC)$l;LFgm8#>oR zSVi%u`Zz)SSt^^}yo_RkQ@kNz0sDQw4rjfiFtemLg80ohV#Lxeu}F!zb;gA!JD4C-Lg;944qi_# zaR3c!8~Ey_a;Y{oroC;H}mm7+Iq-7p= zXs self.x_threshold \ + or theta < -self.theta_threshold_radians \ + or theta > self.theta_threshold_radians + done = bool(done) + + if not done: + reward = 1.0 + elif self.steps_beyond_done is None: + # Pole just fell! + self.steps_beyond_done = 0 + reward = 1.0 + else: + if self.steps_beyond_done == 0: + logger.warn("You are calling 'step()' even though this environment has already returned done = True. You should always call 'reset()' once you receive 'done = True' -- any further steps are undefined behavior.") + self.steps_beyond_done += 1 + reward = 0.0 + + return np.array(self.state), reward, done, {} + + def reset(self): + self.state = self.np_random.uniform(low=-0.05, high=0.05, size=(4,)) + self.steps_beyond_done = None + return np.array(self.state) + + def render(self, mode='human'): + screen_width = 600 + screen_height = 400 + + world_width = self.x_threshold*2 + scale = screen_width/world_width + carty = 100 # TOP OF CART + polewidth = 10.0 + polelen = scale * (2 * self.length) + cartwidth = 50.0 + cartheight = 30.0 + + if self.viewer is None: + from gym.envs.classic_control import rendering + self.viewer = rendering.Viewer(screen_width, screen_height) + l,r,t,b = -cartwidth/2, cartwidth/2, cartheight/2, -cartheight/2 + axleoffset =cartheight/4.0 + cart = rendering.FilledPolygon([(l,b), (l,t), (r,t), (r,b)]) + self.carttrans = rendering.Transform() + cart.add_attr(self.carttrans) + self.viewer.add_geom(cart) + l,r,t,b = -polewidth/2,polewidth/2,polelen-polewidth/2,-polewidth/2 + pole = rendering.FilledPolygon([(l,b), (l,t), (r,t), (r,b)]) + pole.set_color(.8,.6,.4) + self.poletrans = rendering.Transform(translation=(0, axleoffset)) + pole.add_attr(self.poletrans) + pole.add_attr(self.carttrans) + self.viewer.add_geom(pole) + self.axle = rendering.make_circle(polewidth/2) + self.axle.add_attr(self.poletrans) + self.axle.add_attr(self.carttrans) + self.axle.set_color(.5,.5,.8) + self.viewer.add_geom(self.axle) + self.track = rendering.Line((0,carty), (screen_width,carty)) + self.track.set_color(0,0,0) + self.viewer.add_geom(self.track) + + self._pole_geom = pole + + if self.state is None: return None + + # Edit the pole polygon vertex + pole = self._pole_geom + l,r,t,b = -polewidth/2,polewidth/2,polelen-polewidth/2,-polewidth/2 + pole.v = [(l,b), (l,t), (r,t), (r,b)] + + x = self.state + cartx = x[0]*scale+screen_width/2.0 # MIDDLE OF CART + self.carttrans.set_translation(cartx, carty) + self.poletrans.set_rotation(-x[2]) + + return self.viewer.render(return_rgb_array = mode=='rgb_array') + + def close(self): + if self.viewer: + self.viewer.close() + self.viewer = None diff --git a/src/gym/envs/classic_control/continuous_mountain_car.py b/src/gym/envs/classic_control/continuous_mountain_car.py new file mode 100644 index 0000000..65bec62 --- /dev/null +++ b/src/gym/envs/classic_control/continuous_mountain_car.py @@ -0,0 +1,144 @@ +# -*- coding: utf-8 -*- +""" +@author: Olivier Sigaud + +A merge between two sources: + +* Adaptation of the MountainCar Environment from the "FAReinforcement" library +of Jose Antonio Martin H. (version 1.0), adapted by 'Tom Schaul, tom@idsia.ch' +and then modified by Arnaud de Broissia + +* the OpenAI/gym MountainCar environment +itself from +http://incompleteideas.net/sutton/MountainCar/MountainCar1.cp +permalink: https://perma.cc/6Z2N-PFWC +""" + +import math +import gym +from gym import spaces +from gym.utils import seeding +import numpy as np + +class Continuous_MountainCarEnv(gym.Env): + metadata = { + 'render.modes': ['human', 'rgb_array'], + 'video.frames_per_second': 30 + } + + def __init__(self): + self.min_action = -1.0 + self.max_action = 1.0 + self.min_position = -1.2 + self.max_position = 0.6 + self.max_speed = 0.07 + self.goal_position = 0.45 # was 0.5 in gym, 0.45 in Arnaud de Broissia's version + self.power = 0.0015 + + self.low_state = np.array([self.min_position, -self.max_speed]) + self.high_state = np.array([self.max_position, self.max_speed]) + + self.viewer = None + + self.action_space = spaces.Box(low=self.min_action, high=self.max_action, shape=(1,)) + self.observation_space = spaces.Box(low=self.low_state, high=self.high_state) + + self.seed() + self.reset() + + def seed(self, seed=None): + self.np_random, seed = seeding.np_random(seed) + return [seed] + + def step(self, action): + + position = self.state[0] + velocity = self.state[1] + force = min(max(action[0], -1.0), 1.0) + + velocity += force*self.power -0.0025 * math.cos(3*position) + if (velocity > self.max_speed): velocity = self.max_speed + if (velocity < -self.max_speed): velocity = -self.max_speed + position += velocity + if (position > self.max_position): position = self.max_position + if (position < self.min_position): position = self.min_position + if (position==self.min_position and velocity<0): velocity = 0 + + done = bool(position >= self.goal_position) + + reward = 0 + if done: + reward = 100.0 + reward-= math.pow(action[0],2)*0.1 + + self.state = np.array([position, velocity]) + return self.state, reward, done, {} + + def reset(self): + self.state = np.array([self.np_random.uniform(low=-0.6, high=-0.4), 0]) + return np.array(self.state) + +# def get_state(self): +# return self.state + + def _height(self, xs): + return np.sin(3 * xs)*.45+.55 + + def render(self, mode='human'): + screen_width = 600 + screen_height = 400 + + world_width = self.max_position - self.min_position + scale = screen_width/world_width + carwidth=40 + carheight=20 + + + if self.viewer is None: + from gym.envs.classic_control import rendering + self.viewer = rendering.Viewer(screen_width, screen_height) + xs = np.linspace(self.min_position, self.max_position, 100) + ys = self._height(xs) + xys = list(zip((xs-self.min_position)*scale, ys*scale)) + + self.track = rendering.make_polyline(xys) + self.track.set_linewidth(4) + self.viewer.add_geom(self.track) + + clearance = 10 + + l,r,t,b = -carwidth/2, carwidth/2, carheight, 0 + car = rendering.FilledPolygon([(l,b), (l,t), (r,t), (r,b)]) + car.add_attr(rendering.Transform(translation=(0, clearance))) + self.cartrans = rendering.Transform() + car.add_attr(self.cartrans) + self.viewer.add_geom(car) + frontwheel = rendering.make_circle(carheight/2.5) + frontwheel.set_color(.5, .5, .5) + frontwheel.add_attr(rendering.Transform(translation=(carwidth/4,clearance))) + frontwheel.add_attr(self.cartrans) + self.viewer.add_geom(frontwheel) + backwheel = rendering.make_circle(carheight/2.5) + backwheel.add_attr(rendering.Transform(translation=(-carwidth/4,clearance))) + backwheel.add_attr(self.cartrans) + backwheel.set_color(.5, .5, .5) + self.viewer.add_geom(backwheel) + flagx = (self.goal_position-self.min_position)*scale + flagy1 = self._height(self.goal_position)*scale + flagy2 = flagy1 + 50 + flagpole = rendering.Line((flagx, flagy1), (flagx, flagy2)) + self.viewer.add_geom(flagpole) + flag = rendering.FilledPolygon([(flagx, flagy2), (flagx, flagy2-10), (flagx+25, flagy2-5)]) + flag.set_color(.8,.8,0) + self.viewer.add_geom(flag) + + pos = self.state[0] + self.cartrans.set_translation((pos-self.min_position)*scale, self._height(pos)*scale) + self.cartrans.set_rotation(math.cos(3 * pos)) + + return self.viewer.render(return_rgb_array = mode=='rgb_array') + + def close(self): + if self.viewer: + self.viewer.close() + self.viewer = None diff --git a/src/gym/envs/classic_control/mountain_car.py b/src/gym/envs/classic_control/mountain_car.py new file mode 100644 index 0000000..40b5a63 --- /dev/null +++ b/src/gym/envs/classic_control/mountain_car.py @@ -0,0 +1,119 @@ +""" +http://incompleteideas.net/sutton/MountainCar/MountainCar1.cp +permalink: https://perma.cc/6Z2N-PFWC +""" + +import math +import gym +from gym import spaces +from gym.utils import seeding +import numpy as np + +class MountainCarEnv(gym.Env): + metadata = { + 'render.modes': ['human', 'rgb_array'], + 'video.frames_per_second': 30 + } + + def __init__(self): + self.min_position = -1.2 + self.max_position = 0.6 + self.max_speed = 0.07 + self.goal_position = 0.5 + + self.low = np.array([self.min_position, -self.max_speed]) + self.high = np.array([self.max_position, self.max_speed]) + + self.viewer = None + + self.action_space = spaces.Discrete(3) + self.observation_space = spaces.Box(self.low, self.high) + + self.seed() + self.reset() + + def seed(self, seed=None): + self.np_random, seed = seeding.np_random(seed) + return [seed] + + def step(self, action): + assert self.action_space.contains(action), "%r (%s) invalid" % (action, type(action)) + + position, velocity = self.state + velocity += (action-1)*0.001 + math.cos(3*position)*(-0.0025) + velocity = np.clip(velocity, -self.max_speed, self.max_speed) + position += velocity + position = np.clip(position, self.min_position, self.max_position) + if (position==self.min_position and velocity<0): velocity = 0 + + done = bool(position >= self.goal_position) + reward = -1.0 + + self.state = (position, velocity) + return np.array(self.state), reward, done, {} + + def reset(self): + self.state = np.array([self.np_random.uniform(low=-0.6, high=-0.4), 0]) + return np.array(self.state) + + def _height(self, xs): + return np.sin(3 * xs)*.45+.55 + + def render(self, mode='human'): + screen_width = 600 + screen_height = 400 + + world_width = self.max_position - self.min_position + scale = screen_width/world_width + carwidth=40 + carheight=20 + + + if self.viewer is None: + from gym.envs.classic_control import rendering + self.viewer = rendering.Viewer(screen_width, screen_height) + xs = np.linspace(self.min_position, self.max_position, 100) + ys = self._height(xs) + xys = list(zip((xs-self.min_position)*scale, ys*scale)) + + self.track = rendering.make_polyline(xys) + self.track.set_linewidth(4) + self.viewer.add_geom(self.track) + + clearance = 10 + + l,r,t,b = -carwidth/2, carwidth/2, carheight, 0 + car = rendering.FilledPolygon([(l,b), (l,t), (r,t), (r,b)]) + car.add_attr(rendering.Transform(translation=(0, clearance))) + self.cartrans = rendering.Transform() + car.add_attr(self.cartrans) + self.viewer.add_geom(car) + frontwheel = rendering.make_circle(carheight/2.5) + frontwheel.set_color(.5, .5, .5) + frontwheel.add_attr(rendering.Transform(translation=(carwidth/4,clearance))) + frontwheel.add_attr(self.cartrans) + self.viewer.add_geom(frontwheel) + backwheel = rendering.make_circle(carheight/2.5) + backwheel.add_attr(rendering.Transform(translation=(-carwidth/4,clearance))) + backwheel.add_attr(self.cartrans) + backwheel.set_color(.5, .5, .5) + self.viewer.add_geom(backwheel) + flagx = (self.goal_position-self.min_position)*scale + flagy1 = self._height(self.goal_position)*scale + flagy2 = flagy1 + 50 + flagpole = rendering.Line((flagx, flagy1), (flagx, flagy2)) + self.viewer.add_geom(flagpole) + flag = rendering.FilledPolygon([(flagx, flagy2), (flagx, flagy2-10), (flagx+25, flagy2-5)]) + flag.set_color(.8,.8,0) + self.viewer.add_geom(flag) + + pos = self.state[0] + self.cartrans.set_translation((pos-self.min_position)*scale, self._height(pos)*scale) + self.cartrans.set_rotation(math.cos(3 * pos)) + + return self.viewer.render(return_rgb_array = mode=='rgb_array') + + def close(self): + if self.viewer: + self.viewer.close() + self.viewer = None diff --git a/src/gym/envs/classic_control/pendulum.py b/src/gym/envs/classic_control/pendulum.py new file mode 100644 index 0000000..940c2e1 --- /dev/null +++ b/src/gym/envs/classic_control/pendulum.py @@ -0,0 +1,90 @@ +import gym +from gym import spaces +from gym.utils import seeding +import numpy as np +from os import path + +class PendulumEnv(gym.Env): + metadata = { + 'render.modes' : ['human', 'rgb_array'], + 'video.frames_per_second' : 30 + } + + def __init__(self): + self.max_speed=8 + self.max_torque=2. + self.dt=.05 + self.viewer = None + + high = np.array([1., 1., self.max_speed]) + self.action_space = spaces.Box(low=-self.max_torque, high=self.max_torque, shape=(1,), dtype=np.float32) + self.observation_space = spaces.Box(low=-high, high=high, dtype=np.float32) + + self.seed() + + def seed(self, seed=None): + self.np_random, seed = seeding.np_random(seed) + return [seed] + + def step(self,u): + th, thdot = self.state # th := theta + + g = 10. + m = 1. + l = 1. + dt = self.dt + + u = np.clip(u, -self.max_torque, self.max_torque)[0] + self.last_u = u # for rendering + costs = angle_normalize(th)**2 + .1*thdot**2 + .001*(u**2) + + newthdot = thdot + (-3*g/(2*l) * np.sin(th + np.pi) + 3./(m*l**2)*u) * dt + newth = th + newthdot*dt + newthdot = np.clip(newthdot, -self.max_speed, self.max_speed) #pylint: disable=E1111 + + self.state = np.array([newth, newthdot]) + return self._get_obs(), -costs, False, {} + + def reset(self): + high = np.array([np.pi, 1]) + self.state = self.np_random.uniform(low=-high, high=high) + self.last_u = None + return self._get_obs() + + def _get_obs(self): + theta, thetadot = self.state + return np.array([np.cos(theta), np.sin(theta), thetadot]) + + def render(self, mode='human'): + + if self.viewer is None: + from gym.envs.classic_control import rendering + self.viewer = rendering.Viewer(500,500) + self.viewer.set_bounds(-2.2,2.2,-2.2,2.2) + rod = rendering.make_capsule(1, .2) + rod.set_color(.8, .3, .3) + self.pole_transform = rendering.Transform() + rod.add_attr(self.pole_transform) + self.viewer.add_geom(rod) + axle = rendering.make_circle(.05) + axle.set_color(0,0,0) + self.viewer.add_geom(axle) + fname = path.join(path.dirname(__file__), "assets/clockwise.png") + self.img = rendering.Image(fname, 1., 1.) + self.imgtrans = rendering.Transform() + self.img.add_attr(self.imgtrans) + + self.viewer.add_onetime(self.img) + self.pole_transform.set_rotation(self.state[0] + np.pi/2) + if self.last_u: + self.imgtrans.scale = (-self.last_u/2, np.abs(self.last_u)/2) + + return self.viewer.render(return_rgb_array = mode=='rgb_array') + + def close(self): + if self.viewer: + self.viewer.close() + self.viewer = None + +def angle_normalize(x): + return (((x+np.pi) % (2*np.pi)) - np.pi) diff --git a/src/gym/envs/classic_control/rendering.py b/src/gym/envs/classic_control/rendering.py new file mode 100644 index 0000000..4fa23b2 --- /dev/null +++ b/src/gym/envs/classic_control/rendering.py @@ -0,0 +1,359 @@ +""" +2D rendering framework +""" +from __future__ import division +import os +import six +import sys + +if "Apple" in sys.version: + if 'DYLD_FALLBACK_LIBRARY_PATH' in os.environ: + os.environ['DYLD_FALLBACK_LIBRARY_PATH'] += ':/usr/lib' + # (JDS 2016/04/15): avoid bug on Anaconda 2.3.0 / Yosemite + +from gym.utils import reraise +from gym import error + +try: + import pyglet +except ImportError as e: + reraise(suffix="HINT: you can install pyglet directly via 'pip install pyglet'. But if you really just want to install all Gym dependencies and not have to think about it, 'pip install -e .[all]' or 'pip install gym[all]' will do it.") + +try: + from pyglet.gl import * +except ImportError as e: + reraise(prefix="Error occured while running `from pyglet.gl import *`",suffix="HINT: make sure you have OpenGL install. On Ubuntu, you can run 'apt-get install python-opengl'. If you're running on a server, you may need a virtual frame buffer; something like this should work: 'xvfb-run -s \"-screen 0 1400x900x24\" python '") + +import math +import numpy as np + +RAD2DEG = 57.29577951308232 + +def get_display(spec): + """Convert a display specification (such as :0) into an actual Display + object. + + Pyglet only supports multiple Displays on Linux. + """ + if spec is None: + return None + elif isinstance(spec, six.string_types): + return pyglet.canvas.Display(spec) + else: + raise error.Error('Invalid display specification: {}. (Must be a string like :0 or None.)'.format(spec)) + +class Viewer(object): + def __init__(self, width, height, display=None): + display = get_display(display) + + self.width = width + self.height = height + self.window = pyglet.window.Window(width=width, height=height, display=display) + self.window.on_close = self.window_closed_by_user + self.isopen = True + self.geoms = [] + self.onetime_geoms = [] + self.transform = Transform() + + glEnable(GL_BLEND) + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) + + def close(self): + self.window.close() + + def window_closed_by_user(self): + self.isopen = False + + def set_bounds(self, left, right, bottom, top): + assert right > left and top > bottom + scalex = self.width/(right-left) + scaley = self.height/(top-bottom) + self.transform = Transform( + translation=(-left*scalex, -bottom*scaley), + scale=(scalex, scaley)) + + def add_geom(self, geom): + self.geoms.append(geom) + + def add_onetime(self, geom): + self.onetime_geoms.append(geom) + + def render(self, return_rgb_array=False): + glClearColor(1,1,1,1) + self.window.clear() + self.window.switch_to() + self.window.dispatch_events() + self.transform.enable() + for geom in self.geoms: + geom.render() + for geom in self.onetime_geoms: + geom.render() + self.transform.disable() + arr = None + if return_rgb_array: + buffer = pyglet.image.get_buffer_manager().get_color_buffer() + image_data = buffer.get_image_data() + arr = np.fromstring(image_data.data, dtype=np.uint8, sep='') + # In https://github.com/openai/gym-http-api/issues/2, we + # discovered that someone using Xmonad on Arch was having + # a window of size 598 x 398, though a 600 x 400 window + # was requested. (Guess Xmonad was preserving a pixel for + # the boundary.) So we use the buffer height/width rather + # than the requested one. + arr = arr.reshape(buffer.height, buffer.width, 4) + arr = arr[::-1,:,0:3] + self.window.flip() + self.onetime_geoms = [] + return arr if return_rgb_array else self.isopen + + # Convenience + def draw_circle(self, radius=10, res=30, filled=True, **attrs): + geom = make_circle(radius=radius, res=res, filled=filled) + _add_attrs(geom, attrs) + self.add_onetime(geom) + return geom + + def draw_polygon(self, v, filled=True, **attrs): + geom = make_polygon(v=v, filled=filled) + _add_attrs(geom, attrs) + self.add_onetime(geom) + return geom + + def draw_polyline(self, v, **attrs): + geom = make_polyline(v=v) + _add_attrs(geom, attrs) + self.add_onetime(geom) + return geom + + def draw_line(self, start, end, **attrs): + geom = Line(start, end) + _add_attrs(geom, attrs) + self.add_onetime(geom) + return geom + + def get_array(self): + self.window.flip() + image_data = pyglet.image.get_buffer_manager().get_color_buffer().get_image_data() + self.window.flip() + arr = np.fromstring(image_data.data, dtype=np.uint8, sep='') + arr = arr.reshape(self.height, self.width, 4) + return arr[::-1,:,0:3] + + def __del__(self): + self.close() + +def _add_attrs(geom, attrs): + if "color" in attrs: + geom.set_color(*attrs["color"]) + if "linewidth" in attrs: + geom.set_linewidth(attrs["linewidth"]) + +class Geom(object): + def __init__(self): + self._color=Color((0, 0, 0, 1.0)) + self.attrs = [self._color] + def render(self): + for attr in reversed(self.attrs): + attr.enable() + self.render1() + for attr in self.attrs: + attr.disable() + def render1(self): + raise NotImplementedError + def add_attr(self, attr): + self.attrs.append(attr) + def set_color(self, r, g, b): + self._color.vec4 = (r, g, b, 1) + +class Attr(object): + def enable(self): + raise NotImplementedError + def disable(self): + pass + +class Transform(Attr): + def __init__(self, translation=(0.0, 0.0), rotation=0.0, scale=(1,1)): + self.set_translation(*translation) + self.set_rotation(rotation) + self.set_scale(*scale) + def enable(self): + glPushMatrix() + glTranslatef(self.translation[0], self.translation[1], 0) # translate to GL loc ppint + glRotatef(RAD2DEG * self.rotation, 0, 0, 1.0) + glScalef(self.scale[0], self.scale[1], 1) + def disable(self): + glPopMatrix() + def set_translation(self, newx, newy): + self.translation = (float(newx), float(newy)) + def set_rotation(self, new): + self.rotation = float(new) + def set_scale(self, newx, newy): + self.scale = (float(newx), float(newy)) + +class Color(Attr): + def __init__(self, vec4): + self.vec4 = vec4 + def enable(self): + glColor4f(*self.vec4) + +class LineStyle(Attr): + def __init__(self, style): + self.style = style + def enable(self): + glEnable(GL_LINE_STIPPLE) + glLineStipple(1, self.style) + def disable(self): + glDisable(GL_LINE_STIPPLE) + +class LineWidth(Attr): + def __init__(self, stroke): + self.stroke = stroke + def enable(self): + glLineWidth(self.stroke) + +class Point(Geom): + def __init__(self): + Geom.__init__(self) + def render1(self): + glBegin(GL_POINTS) # draw point + glVertex3f(0.0, 0.0, 0.0) + glEnd() + +class FilledPolygon(Geom): + def __init__(self, v): + Geom.__init__(self) + self.v = v + def render1(self): + if len(self.v) == 4 : glBegin(GL_QUADS) + elif len(self.v) > 4 : glBegin(GL_POLYGON) + else: glBegin(GL_TRIANGLES) + for p in self.v: + glVertex3f(p[0], p[1],0) # draw each vertex + glEnd() + +def make_circle(radius=10, res=30, filled=True): + points = [] + for i in range(res): + ang = 2*math.pi*i / res + points.append((math.cos(ang)*radius, math.sin(ang)*radius)) + if filled: + return FilledPolygon(points) + else: + return PolyLine(points, True) + +def make_polygon(v, filled=True): + if filled: return FilledPolygon(v) + else: return PolyLine(v, True) + +def make_polyline(v): + return PolyLine(v, False) + +def make_capsule(length, width): + l, r, t, b = 0, length, width/2, -width/2 + box = make_polygon([(l,b), (l,t), (r,t), (r,b)]) + circ0 = make_circle(width/2) + circ1 = make_circle(width/2) + circ1.add_attr(Transform(translation=(length, 0))) + geom = Compound([box, circ0, circ1]) + return geom + +class Compound(Geom): + def __init__(self, gs): + Geom.__init__(self) + self.gs = gs + for g in self.gs: + g.attrs = [a for a in g.attrs if not isinstance(a, Color)] + def render1(self): + for g in self.gs: + g.render() + +class PolyLine(Geom): + def __init__(self, v, close): + Geom.__init__(self) + self.v = v + self.close = close + self.linewidth = LineWidth(1) + self.add_attr(self.linewidth) + def render1(self): + glBegin(GL_LINE_LOOP if self.close else GL_LINE_STRIP) + for p in self.v: + glVertex3f(p[0], p[1],0) # draw each vertex + glEnd() + def set_linewidth(self, x): + self.linewidth.stroke = x + +class Line(Geom): + def __init__(self, start=(0.0, 0.0), end=(0.0, 0.0)): + Geom.__init__(self) + self.start = start + self.end = end + self.linewidth = LineWidth(1) + self.add_attr(self.linewidth) + + def render1(self): + glBegin(GL_LINES) + glVertex2f(*self.start) + glVertex2f(*self.end) + glEnd() + +class Image(Geom): + def __init__(self, fname, width, height): + Geom.__init__(self) + self.width = width + self.height = height + img = pyglet.image.load(fname) + self.img = img + self.flip = False + def render1(self): + self.img.blit(-self.width/2, -self.height/2, width=self.width, height=self.height) + +# ================================================================ + +class SimpleImageViewer(object): + def __init__(self, display=None, maxwidth=500): + self.window = None + self.isopen = False + self.display = display + self.maxwidth = maxwidth + def imshow(self, arr): + if self.window is None: + height, width, _channels = arr.shape + if width > self.maxwidth: + scale = self.maxwidth / width + width = int(scale * width) + height = int(scale * height) + self.window = pyglet.window.Window(width=width, height=height, + display=self.display, vsync=False, resizable=True) + self.width = width + self.height = height + self.isopen = True + + @self.window.event + def on_resize(width, height): + self.width = width + self.height = height + + @self.window.event + def on_close(): + self.isopen = False + + assert len(arr.shape) == 3, "You passed in an image with the wrong number shape" + image = pyglet.image.ImageData(arr.shape[1], arr.shape[0], + 'RGB', arr.tobytes(), pitch=arr.shape[1]*-3) + gl.glTexParameteri(gl.GL_TEXTURE_2D, + gl.GL_TEXTURE_MAG_FILTER, gl.GL_NEAREST) + texture = image.get_texture() + texture.width = self.width + texture.height = self.height + self.window.clear() + self.window.switch_to() + self.window.dispatch_events() + texture.blit(0, 0) # draw + self.window.flip() + def close(self): + if self.isopen: + self.window.close() + self.isopen = False + + def __del__(self): + self.close() diff --git a/src/gym/envs/mujoco/__init__.py b/src/gym/envs/mujoco/__init__.py new file mode 100644 index 0000000..ec1e3b0 --- /dev/null +++ b/src/gym/envs/mujoco/__init__.py @@ -0,0 +1,16 @@ +from gym.envs.mujoco.mujoco_env import MujocoEnv +# ^^^^^ so that user gets the correct error +# message if mujoco is not installed correctly +from gym.envs.mujoco.ant import AntEnv +from gym.envs.mujoco.half_cheetah import HalfCheetahEnv +from gym.envs.mujoco.hopper import HopperEnv +from gym.envs.mujoco.walker2d import Walker2dEnv +from gym.envs.mujoco.humanoid import HumanoidEnv +from gym.envs.mujoco.inverted_pendulum import InvertedPendulumEnv +from gym.envs.mujoco.inverted_double_pendulum import InvertedDoublePendulumEnv +from gym.envs.mujoco.reacher import ReacherEnv +from gym.envs.mujoco.swimmer import SwimmerEnv +from gym.envs.mujoco.humanoidstandup import HumanoidStandupEnv +from gym.envs.mujoco.pusher import PusherEnv +from gym.envs.mujoco.thrower import ThrowerEnv +from gym.envs.mujoco.striker import StrikerEnv diff --git a/src/gym/envs/mujoco/ant.py b/src/gym/envs/mujoco/ant.py new file mode 100644 index 0000000..550fb64 --- /dev/null +++ b/src/gym/envs/mujoco/ant.py @@ -0,0 +1,45 @@ +import numpy as np +from gym import utils +from gym.envs.mujoco import mujoco_env + +class AntEnv(mujoco_env.MujocoEnv, utils.EzPickle): + def __init__(self): + mujoco_env.MujocoEnv.__init__(self, 'ant.xml', 5) + utils.EzPickle.__init__(self) + + def step(self, a): + xposbefore = self.get_body_com("torso")[0] + self.do_simulation(a, self.frame_skip) + xposafter = self.get_body_com("torso")[0] + forward_reward = (xposafter - xposbefore)/self.dt + ctrl_cost = .5 * np.square(a).sum() + contact_cost = 0.5 * 1e-3 * np.sum( + np.square(np.clip(self.sim.data.cfrc_ext, -1, 1))) + survive_reward = 1.0 + reward = forward_reward - ctrl_cost - contact_cost + survive_reward + state = self.state_vector() + notdone = np.isfinite(state).all() \ + and state[2] >= 0.2 and state[2] <= 1.0 + done = not notdone + ob = self._get_obs() + return ob, reward, done, dict( + reward_forward=forward_reward, + reward_ctrl=-ctrl_cost, + reward_contact=-contact_cost, + reward_survive=survive_reward) + + def _get_obs(self): + return np.concatenate([ + self.sim.data.qpos.flat[2:], + self.sim.data.qvel.flat, + np.clip(self.sim.data.cfrc_ext, -1, 1).flat, + ]) + + def reset_model(self): + qpos = self.init_qpos + self.np_random.uniform(size=self.model.nq, low=-.1, high=.1) + qvel = self.init_qvel + self.np_random.randn(self.model.nv) * .1 + self.set_state(qpos, qvel) + return self._get_obs() + + def viewer_setup(self): + self.viewer.cam.distance = self.model.stat.extent * 0.5 diff --git a/src/gym/envs/mujoco/assets/ant.xml b/src/gym/envs/mujoco/assets/ant.xml new file mode 100644 index 0000000..ee4d679 --- /dev/null +++ b/src/gym/envs/mujoco/assets/ant.xml @@ -0,0 +1,81 @@ + + + diff --git a/src/gym/envs/mujoco/assets/half_cheetah.xml b/src/gym/envs/mujoco/assets/half_cheetah.xml new file mode 100644 index 0000000..338c2e8 --- /dev/null +++ b/src/gym/envs/mujoco/assets/half_cheetah.xml @@ -0,0 +1,96 @@ + + + + + + + + + + diff --git a/src/gym/envs/mujoco/assets/hopper.xml b/src/gym/envs/mujoco/assets/hopper.xml new file mode 100644 index 0000000..f18bc46 --- /dev/null +++ b/src/gym/envs/mujoco/assets/hopper.xml @@ -0,0 +1,48 @@ + + + + + + + + diff --git a/src/gym/envs/mujoco/assets/humanoid.xml b/src/gym/envs/mujoco/assets/humanoid.xml new file mode 100755 index 0000000..db19261 --- /dev/null +++ b/src/gym/envs/mujoco/assets/humanoid.xml @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/gym/envs/mujoco/assets/humanoidstandup.xml b/src/gym/envs/mujoco/assets/humanoidstandup.xml new file mode 100755 index 0000000..854dbc9 --- /dev/null +++ b/src/gym/envs/mujoco/assets/humanoidstandup.xml @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/gym/envs/mujoco/assets/inverted_double_pendulum.xml b/src/gym/envs/mujoco/assets/inverted_double_pendulum.xml new file mode 100644 index 0000000..a274e8c --- /dev/null +++ b/src/gym/envs/mujoco/assets/inverted_double_pendulum.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/src/gym/envs/mujoco/assets/inverted_pendulum.xml b/src/gym/envs/mujoco/assets/inverted_pendulum.xml new file mode 100644 index 0000000..b778ba0 --- /dev/null +++ b/src/gym/envs/mujoco/assets/inverted_pendulum.xml @@ -0,0 +1,27 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/gym/envs/mujoco/assets/point.xml b/src/gym/envs/mujoco/assets/point.xml new file mode 100644 index 0000000..e35ef3d --- /dev/null +++ b/src/gym/envs/mujoco/assets/point.xml @@ -0,0 +1,31 @@ + + + diff --git a/src/gym/envs/mujoco/assets/pusher.xml b/src/gym/envs/mujoco/assets/pusher.xml new file mode 100644 index 0000000..31a5ef7 --- /dev/null +++ b/src/gym/envs/mujoco/assets/pusher.xml @@ -0,0 +1,91 @@ + + + diff --git a/src/gym/envs/mujoco/assets/reacher.xml b/src/gym/envs/mujoco/assets/reacher.xml new file mode 100644 index 0000000..28ebd67 --- /dev/null +++ b/src/gym/envs/mujoco/assets/reacher.xml @@ -0,0 +1,39 @@ + + + + + + + \ No newline at end of file diff --git a/src/gym/envs/mujoco/assets/striker.xml b/src/gym/envs/mujoco/assets/striker.xml new file mode 100644 index 0000000..f66f808 --- /dev/null +++ b/src/gym/envs/mujoco/assets/striker.xml @@ -0,0 +1,101 @@ + + + diff --git a/src/gym/envs/mujoco/assets/swimmer.xml b/src/gym/envs/mujoco/assets/swimmer.xml new file mode 100644 index 0000000..cda25da --- /dev/null +++ b/src/gym/envs/mujoco/assets/swimmer.xml @@ -0,0 +1,38 @@ + + + diff --git a/src/gym/envs/mujoco/assets/thrower.xml b/src/gym/envs/mujoco/assets/thrower.xml new file mode 100644 index 0000000..b68f256 --- /dev/null +++ b/src/gym/envs/mujoco/assets/thrower.xml @@ -0,0 +1,127 @@ + + + diff --git a/src/gym/envs/mujoco/assets/walker2d.xml b/src/gym/envs/mujoco/assets/walker2d.xml new file mode 100644 index 0000000..3342571 --- /dev/null +++ b/src/gym/envs/mujoco/assets/walker2d.xml @@ -0,0 +1,62 @@ + + + + + + + diff --git a/src/gym/envs/mujoco/half_cheetah.py b/src/gym/envs/mujoco/half_cheetah.py new file mode 100644 index 0000000..ea9761c --- /dev/null +++ b/src/gym/envs/mujoco/half_cheetah.py @@ -0,0 +1,34 @@ +import numpy as np +from gym import utils +from gym.envs.mujoco import mujoco_env + +class HalfCheetahEnv(mujoco_env.MujocoEnv, utils.EzPickle): + def __init__(self): + mujoco_env.MujocoEnv.__init__(self, 'half_cheetah.xml', 5) + utils.EzPickle.__init__(self) + + def step(self, action): + xposbefore = self.sim.data.qpos[0] + self.do_simulation(action, self.frame_skip) + xposafter = self.sim.data.qpos[0] + ob = self._get_obs() + reward_ctrl = - 0.1 * np.square(action).sum() + reward_run = (xposafter - xposbefore)/self.dt + reward = reward_ctrl + reward_run + done = False + return ob, reward, done, dict(reward_run=reward_run, reward_ctrl=reward_ctrl) + + def _get_obs(self): + return np.concatenate([ + self.sim.data.qpos.flat[1:], + self.sim.data.qvel.flat, + ]) + + def reset_model(self): + qpos = self.init_qpos + self.np_random.uniform(low=-.1, high=.1, size=self.model.nq) + qvel = self.init_qvel + self.np_random.randn(self.model.nv) * .1 + self.set_state(qpos, qvel) + return self._get_obs() + + def viewer_setup(self): + self.viewer.cam.distance = self.model.stat.extent * 0.5 diff --git a/src/gym/envs/mujoco/hopper.py b/src/gym/envs/mujoco/hopper.py new file mode 100644 index 0000000..be826a4 --- /dev/null +++ b/src/gym/envs/mujoco/hopper.py @@ -0,0 +1,40 @@ +import numpy as np +from gym import utils +from gym.envs.mujoco import mujoco_env + +class HopperEnv(mujoco_env.MujocoEnv, utils.EzPickle): + def __init__(self): + mujoco_env.MujocoEnv.__init__(self, 'hopper.xml', 4) + utils.EzPickle.__init__(self) + + def step(self, a): + posbefore = self.sim.data.qpos[0] + self.do_simulation(a, self.frame_skip) + posafter, height, ang = self.sim.data.qpos[0:3] + alive_bonus = 1.0 + reward = (posafter - posbefore) / self.dt + reward += alive_bonus + reward -= 1e-3 * np.square(a).sum() + s = self.state_vector() + done = not (np.isfinite(s).all() and (np.abs(s[2:]) < 100).all() and + (height > .7) and (abs(ang) < .2)) + ob = self._get_obs() + return ob, reward, done, {} + + def _get_obs(self): + return np.concatenate([ + self.sim.data.qpos.flat[1:], + np.clip(self.sim.data.qvel.flat, -10, 10) + ]) + + def reset_model(self): + qpos = self.init_qpos + self.np_random.uniform(low=-.005, high=.005, size=self.model.nq) + qvel = self.init_qvel + self.np_random.uniform(low=-.005, high=.005, size=self.model.nv) + self.set_state(qpos, qvel) + return self._get_obs() + + def viewer_setup(self): + self.viewer.cam.trackbodyid = 2 + self.viewer.cam.distance = self.model.stat.extent * 0.75 + self.viewer.cam.lookat[2] = 1.15 + self.viewer.cam.elevation = -20 diff --git a/src/gym/envs/mujoco/humanoid.py b/src/gym/envs/mujoco/humanoid.py new file mode 100644 index 0000000..021733e --- /dev/null +++ b/src/gym/envs/mujoco/humanoid.py @@ -0,0 +1,51 @@ +import numpy as np +from gym.envs.mujoco import mujoco_env +from gym import utils + +def mass_center(model, sim): + mass = np.expand_dims(model.body_mass, 1) + xpos = sim.data.xipos + return (np.sum(mass * xpos, 0) / np.sum(mass))[0] + +class HumanoidEnv(mujoco_env.MujocoEnv, utils.EzPickle): + def __init__(self): + mujoco_env.MujocoEnv.__init__(self, 'humanoid.xml', 5) + utils.EzPickle.__init__(self) + + def _get_obs(self): + data = self.sim.data + return np.concatenate([data.qpos.flat[2:], + data.qvel.flat, + data.cinert.flat, + data.cvel.flat, + data.qfrc_actuator.flat, + data.cfrc_ext.flat]) + + def step(self, a): + pos_before = mass_center(self.model, self.sim) + self.do_simulation(a, self.frame_skip) + pos_after = mass_center(self.model, self.sim) + alive_bonus = 5.0 + data = self.sim.data + lin_vel_cost = 0.25 * (pos_after - pos_before) / self.model.opt.timestep + quad_ctrl_cost = 0.1 * np.square(data.ctrl).sum() + quad_impact_cost = .5e-6 * np.square(data.cfrc_ext).sum() + quad_impact_cost = min(quad_impact_cost, 10) + reward = lin_vel_cost - quad_ctrl_cost - quad_impact_cost + alive_bonus + qpos = self.sim.data.qpos + done = bool((qpos[2] < 1.0) or (qpos[2] > 2.0)) + return self._get_obs(), reward, done, dict(reward_linvel=lin_vel_cost, reward_quadctrl=-quad_ctrl_cost, reward_alive=alive_bonus, reward_impact=-quad_impact_cost) + + def reset_model(self): + c = 0.01 + self.set_state( + self.init_qpos + self.np_random.uniform(low=-c, high=c, size=self.model.nq), + self.init_qvel + self.np_random.uniform(low=-c, high=c, size=self.model.nv,) + ) + return self._get_obs() + + def viewer_setup(self): + self.viewer.cam.trackbodyid = 1 + self.viewer.cam.distance = self.model.stat.extent * 1.0 + self.viewer.cam.lookat[2] = 2.0 + self.viewer.cam.elevation = -20 diff --git a/src/gym/envs/mujoco/humanoidstandup.py b/src/gym/envs/mujoco/humanoidstandup.py new file mode 100644 index 0000000..6ab595b --- /dev/null +++ b/src/gym/envs/mujoco/humanoidstandup.py @@ -0,0 +1,45 @@ +from gym.envs.mujoco import mujoco_env +from gym import utils +import numpy as np + +class HumanoidStandupEnv(mujoco_env.MujocoEnv, utils.EzPickle): + def __init__(self): + mujoco_env.MujocoEnv.__init__(self, 'humanoidstandup.xml', 5) + utils.EzPickle.__init__(self) + + def _get_obs(self): + data = self.sim.data + return np.concatenate([data.qpos.flat[2:], + data.qvel.flat, + data.cinert.flat, + data.cvel.flat, + data.qfrc_actuator.flat, + data.cfrc_ext.flat]) + + def step(self, a): + self.do_simulation(a, self.frame_skip) + pos_after = self.sim.data.qpos[2] + data = self.sim.data + uph_cost = (pos_after - 0) / self.model.opt.timestep + + quad_ctrl_cost = 0.1 * np.square(data.ctrl).sum() + quad_impact_cost = .5e-6 * np.square(data.cfrc_ext).sum() + quad_impact_cost = min(quad_impact_cost, 10) + reward = uph_cost - quad_ctrl_cost - quad_impact_cost + 1 + + done = bool(False) + return self._get_obs(), reward, done, dict(reward_linup=uph_cost, reward_quadctrl=-quad_ctrl_cost, reward_impact=-quad_impact_cost) + + def reset_model(self): + c = 0.01 + self.set_state( + self.init_qpos + self.np_random.uniform(low=-c, high=c, size=self.model.nq), + self.init_qvel + self.np_random.uniform(low=-c, high=c, size=self.model.nv,) + ) + return self._get_obs() + + def viewer_setup(self): + self.viewer.cam.trackbodyid = 1 + self.viewer.cam.distance = self.model.stat.extent * 1.0 + self.viewer.cam.lookat[2] = 0.8925 + self.viewer.cam.elevation = -20 diff --git a/src/gym/envs/mujoco/inverted_double_pendulum.py b/src/gym/envs/mujoco/inverted_double_pendulum.py new file mode 100644 index 0000000..f461066 --- /dev/null +++ b/src/gym/envs/mujoco/inverted_double_pendulum.py @@ -0,0 +1,43 @@ +import numpy as np +from gym import utils +from gym.envs.mujoco import mujoco_env + +class InvertedDoublePendulumEnv(mujoco_env.MujocoEnv, utils.EzPickle): + + def __init__(self): + mujoco_env.MujocoEnv.__init__(self, 'inverted_double_pendulum.xml', 5) + utils.EzPickle.__init__(self) + + def step(self, action): + self.do_simulation(action, self.frame_skip) + ob = self._get_obs() + x, _, y = self.sim.data.site_xpos[0] + dist_penalty = 0.01 * x ** 2 + (y - 2) ** 2 + v1, v2 = self.sim.data.qvel[1:3] + vel_penalty = 1e-3 * v1**2 + 5e-3 * v2**2 + alive_bonus = 10 + r = alive_bonus - dist_penalty - vel_penalty + done = bool(y <= 1) + return ob, r, done, {} + + def _get_obs(self): + return np.concatenate([ + self.sim.data.qpos[:1], # cart x pos + np.sin(self.sim.data.qpos[1:]), # link angles + np.cos(self.sim.data.qpos[1:]), + np.clip(self.sim.data.qvel, -10, 10), + np.clip(self.sim.data.qfrc_constraint, -10, 10) + ]).ravel() + + def reset_model(self): + self.set_state( + self.init_qpos + self.np_random.uniform(low=-.1, high=.1, size=self.model.nq), + self.init_qvel + self.np_random.randn(self.model.nv) * .1 + ) + return self._get_obs() + + def viewer_setup(self): + v = self.viewer + v.cam.trackbodyid = 0 + v.cam.distance = self.model.stat.extent * 0.5 + v.cam.lookat[2] = 0.12250000000000005 # v.model.stat.center[2] diff --git a/src/gym/envs/mujoco/inverted_pendulum.py b/src/gym/envs/mujoco/inverted_pendulum.py new file mode 100644 index 0000000..b2ed6bd --- /dev/null +++ b/src/gym/envs/mujoco/inverted_pendulum.py @@ -0,0 +1,30 @@ +import numpy as np +from gym import utils +from gym.envs.mujoco import mujoco_env + +class InvertedPendulumEnv(mujoco_env.MujocoEnv, utils.EzPickle): + def __init__(self): + utils.EzPickle.__init__(self) + mujoco_env.MujocoEnv.__init__(self, 'inverted_pendulum.xml', 2) + + def step(self, a): + reward = 1.0 + self.do_simulation(a, self.frame_skip) + ob = self._get_obs() + notdone = np.isfinite(ob).all() and (np.abs(ob[1]) <= .2) + done = not notdone + return ob, reward, done, {} + + def reset_model(self): + qpos = self.init_qpos + self.np_random.uniform(size=self.model.nq, low=-0.01, high=0.01) + qvel = self.init_qvel + self.np_random.uniform(size=self.model.nv, low=-0.01, high=0.01) + self.set_state(qpos, qvel) + return self._get_obs() + + def _get_obs(self): + return np.concatenate([self.sim.data.qpos, self.sim.data.qvel]).ravel() + + def viewer_setup(self): + v = self.viewer + v.cam.trackbodyid = 0 + v.cam.distance = self.model.stat.extent diff --git a/src/gym/envs/mujoco/mujoco_env.py b/src/gym/envs/mujoco/mujoco_env.py new file mode 100644 index 0000000..11cf9ba --- /dev/null +++ b/src/gym/envs/mujoco/mujoco_env.py @@ -0,0 +1,145 @@ +import os + +from gym import error, spaces +from gym.utils import seeding +import numpy as np +from os import path +import gym +import six + +try: + import mujoco_py +except ImportError as e: + raise error.DependencyNotInstalled("{}. (HINT: you need to install mujoco_py, and also perform the setup instructions here: https://github.com/openai/mujoco-py/.)".format(e)) + +DEFAULT_SIZE = 500 + +class MujocoEnv(gym.Env): + """Superclass for all MuJoCo environments. + """ + + def __init__(self, model_path, frame_skip): + if model_path.startswith("/"): + fullpath = model_path + else: + fullpath = os.path.join(os.path.dirname(__file__), "assets", model_path) + if not path.exists(fullpath): + raise IOError("File %s does not exist" % fullpath) + self.frame_skip = frame_skip + self.model = mujoco_py.load_model_from_path(fullpath) + self.sim = mujoco_py.MjSim(self.model) + self.data = self.sim.data + self.viewer = None + self._viewers = {} + + self.metadata = { + 'render.modes': ['human', 'rgb_array', 'depth_array'], + 'video.frames_per_second': int(np.round(1.0 / self.dt)) + } + + self.init_qpos = self.sim.data.qpos.ravel().copy() + self.init_qvel = self.sim.data.qvel.ravel().copy() + observation, _reward, done, _info = self.step(np.zeros(self.model.nu)) + assert not done + self.obs_dim = observation.size + + bounds = self.model.actuator_ctrlrange.copy() + low = bounds[:, 0] + high = bounds[:, 1] + self.action_space = spaces.Box(low=low, high=high, dtype=np.float32) + + high = np.inf*np.ones(self.obs_dim) + low = -high + self.observation_space = spaces.Box(low, high, dtype=np.float32) + + self.seed() + + def seed(self, seed=None): + self.np_random, seed = seeding.np_random(seed) + return [seed] + + # methods to override: + # ---------------------------- + + def reset_model(self): + """ + Reset the robot degrees of freedom (qpos and qvel). + Implement this in each subclass. + """ + raise NotImplementedError + + def viewer_setup(self): + """ + This method is called when the viewer is initialized. + Optionally implement this method, if you need to tinker with camera position + and so forth. + """ + pass + + # ----------------------------- + + def reset(self): + self.sim.reset() + ob = self.reset_model() + return ob + + def set_state(self, qpos, qvel): + assert qpos.shape == (self.model.nq,) and qvel.shape == (self.model.nv,) + old_state = self.sim.get_state() + new_state = mujoco_py.MjSimState(old_state.time, qpos, qvel, + old_state.act, old_state.udd_state) + self.sim.set_state(new_state) + self.sim.forward() + + @property + def dt(self): + return self.model.opt.timestep * self.frame_skip + + def do_simulation(self, ctrl, n_frames): + self.sim.data.ctrl[:] = ctrl + for _ in range(n_frames): + self.sim.step() + + def render(self, mode='human', width=DEFAULT_SIZE, height=DEFAULT_SIZE): + if mode == 'rgb_array': + self._get_viewer(mode).render(width, height) + # window size used for old mujoco-py: + data = self._get_viewer(mode).read_pixels(width, height, depth=False) + # original image is upside-down, so flip it + return data[::-1, :, :] + elif mode == 'depth_array': + self._get_viewer(mode).render(width, height) + # window size used for old mujoco-py: + # Extract depth part of the read_pixels() tuple + data = self._get_viewer(mode).read_pixels(width, height, depth=True)[1] + # original image is upside-down, so flip it + return data[::-1, :] + elif mode == 'human': + self._get_viewer(mode).render() + + def close(self): + if self.viewer is not None: + # self.viewer.finish() + self.viewer = None + self._viewers = {} + + def _get_viewer(self, mode): + self.viewer = self._viewers.get(mode) + if self.viewer is None: + if mode == 'human': + self.viewer = mujoco_py.MjViewer(self.sim) + elif mode == 'rgb_array' or mode == 'depth_array': + self.viewer = mujoco_py.MjRenderContextOffscreen(self.sim, -1) + + self.viewer_setup() + self._viewers[mode] = self.viewer + return self.viewer + + def get_body_com(self, body_name): + return self.data.get_body_xpos(body_name) + + def state_vector(self): + return np.concatenate([ + self.sim.data.qpos.flat, + self.sim.data.qvel.flat + ]) diff --git a/src/gym/envs/mujoco/pusher.py b/src/gym/envs/mujoco/pusher.py new file mode 100644 index 0000000..78670e6 --- /dev/null +++ b/src/gym/envs/mujoco/pusher.py @@ -0,0 +1,57 @@ +import numpy as np +from gym import utils +from gym.envs.mujoco import mujoco_env + +import mujoco_py + +class PusherEnv(mujoco_env.MujocoEnv, utils.EzPickle): + def __init__(self): + utils.EzPickle.__init__(self) + mujoco_env.MujocoEnv.__init__(self, 'pusher.xml', 5) + + def step(self, a): + vec_1 = self.get_body_com("object") - self.get_body_com("tips_arm") + vec_2 = self.get_body_com("object") - self.get_body_com("goal") + + reward_near = - np.linalg.norm(vec_1) + reward_dist = - np.linalg.norm(vec_2) + reward_ctrl = - np.square(a).sum() + reward = reward_dist + 0.1 * reward_ctrl + 0.5 * reward_near + + self.do_simulation(a, self.frame_skip) + ob = self._get_obs() + done = False + return ob, reward, done, dict(reward_dist=reward_dist, + reward_ctrl=reward_ctrl) + + def viewer_setup(self): + self.viewer.cam.trackbodyid = -1 + self.viewer.cam.distance = 4.0 + + def reset_model(self): + qpos = self.init_qpos + + self.goal_pos = np.asarray([0, 0]) + while True: + self.cylinder_pos = np.concatenate([ + self.np_random.uniform(low=-0.3, high=0, size=1), + self.np_random.uniform(low=-0.2, high=0.2, size=1)]) + if np.linalg.norm(self.cylinder_pos - self.goal_pos) > 0.17: + break + + qpos[-4:-2] = self.cylinder_pos + qpos[-2:] = self.goal_pos + qvel = self.init_qvel + self.np_random.uniform(low=-0.005, + high=0.005, size=self.model.nv) + qvel[-4:] = 0 + self.set_state(qpos, qvel) + return self._get_obs() + + def _get_obs(self): + return np.concatenate([ + self.sim.data.qpos.flat[:7], + self.sim.data.qvel.flat[:7], + self.get_body_com("tips_arm"), + self.get_body_com("object"), + self.get_body_com("goal"), + ]) diff --git a/src/gym/envs/mujoco/reacher.py b/src/gym/envs/mujoco/reacher.py new file mode 100644 index 0000000..53a16ab --- /dev/null +++ b/src/gym/envs/mujoco/reacher.py @@ -0,0 +1,43 @@ +import numpy as np +from gym import utils +from gym.envs.mujoco import mujoco_env + +class ReacherEnv(mujoco_env.MujocoEnv, utils.EzPickle): + def __init__(self): + utils.EzPickle.__init__(self) + mujoco_env.MujocoEnv.__init__(self, 'reacher.xml', 2) + + def step(self, a): + vec = self.get_body_com("fingertip")-self.get_body_com("target") + reward_dist = - np.linalg.norm(vec) + reward_ctrl = - np.square(a).sum() + reward = reward_dist + reward_ctrl + self.do_simulation(a, self.frame_skip) + ob = self._get_obs() + done = False + return ob, reward, done, dict(reward_dist=reward_dist, reward_ctrl=reward_ctrl) + + def viewer_setup(self): + self.viewer.cam.trackbodyid = 0 + + def reset_model(self): + qpos = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq) + self.init_qpos + while True: + self.goal = self.np_random.uniform(low=-.2, high=.2, size=2) + if np.linalg.norm(self.goal) < 2: + break + qpos[-2:] = self.goal + qvel = self.init_qvel + self.np_random.uniform(low=-.005, high=.005, size=self.model.nv) + qvel[-2:] = 0 + self.set_state(qpos, qvel) + return self._get_obs() + + def _get_obs(self): + theta = self.sim.data.qpos.flat[:2] + return np.concatenate([ + np.cos(theta), + np.sin(theta), + self.sim.data.qpos.flat[2:], + self.sim.data.qvel.flat[:2], + self.get_body_com("fingertip") - self.get_body_com("target") + ]) diff --git a/src/gym/envs/mujoco/striker.py b/src/gym/envs/mujoco/striker.py new file mode 100644 index 0000000..2efb27e --- /dev/null +++ b/src/gym/envs/mujoco/striker.py @@ -0,0 +1,75 @@ +import numpy as np +from gym import utils +from gym.envs.mujoco import mujoco_env + +class StrikerEnv(mujoco_env.MujocoEnv, utils.EzPickle): + def __init__(self): + utils.EzPickle.__init__(self) + self._striked = False + self._min_strike_dist = np.inf + self.strike_threshold = 0.1 + mujoco_env.MujocoEnv.__init__(self, 'striker.xml', 5) + + def step(self, a): + vec_1 = self.get_body_com("object") - self.get_body_com("tips_arm") + vec_2 = self.get_body_com("object") - self.get_body_com("goal") + self._min_strike_dist = min(self._min_strike_dist, np.linalg.norm(vec_2)) + + if np.linalg.norm(vec_1) < self.strike_threshold: + self._striked = True + self._strike_pos = self.get_body_com("tips_arm") + + if self._striked: + vec_3 = self.get_body_com("object") - self._strike_pos + reward_near = - np.linalg.norm(vec_3) + else: + reward_near = - np.linalg.norm(vec_1) + + reward_dist = - np.linalg.norm(self._min_strike_dist) + reward_ctrl = - np.square(a).sum() + reward = 3 * reward_dist + 0.1 * reward_ctrl + 0.5 * reward_near + + self.do_simulation(a, self.frame_skip) + ob = self._get_obs() + done = False + return ob, reward, done, dict(reward_dist=reward_dist, + reward_ctrl=reward_ctrl) + + def viewer_setup(self): + self.viewer.cam.trackbodyid = 0 + self.viewer.cam.distance = 4.0 + + def reset_model(self): + self._min_strike_dist = np.inf + self._striked = False + self._strike_pos = None + + qpos = self.init_qpos + + self.ball = np.array([0.5, -0.175]) + while True: + self.goal = np.concatenate([ + self.np_random.uniform(low=0.15, high=0.7, size=1), + self.np_random.uniform(low=0.1, high=1.0, size=1)]) + if np.linalg.norm(self.ball - self.goal) > 0.17: + break + + qpos[-9:-7] = [self.ball[1], self.ball[0]] + qpos[-7:-5] = self.goal + diff = self.ball - self.goal + angle = -np.arctan(diff[0] / (diff[1] + 1e-8)) + qpos[-1] = angle / 3.14 + qvel = self.init_qvel + self.np_random.uniform(low=-.1, high=.1, + size=self.model.nv) + qvel[7:] = 0 + self.set_state(qpos, qvel) + return self._get_obs() + + def _get_obs(self): + return np.concatenate([ + self.sim.data.qpos.flat[:7], + self.sim.data.qvel.flat[:7], + self.get_body_com("tips_arm"), + self.get_body_com("object"), + self.get_body_com("goal"), + ]) diff --git a/src/gym/envs/mujoco/swimmer.py b/src/gym/envs/mujoco/swimmer.py new file mode 100644 index 0000000..42574fa --- /dev/null +++ b/src/gym/envs/mujoco/swimmer.py @@ -0,0 +1,31 @@ +import numpy as np +from gym import utils +from gym.envs.mujoco import mujoco_env + +class SwimmerEnv(mujoco_env.MujocoEnv, utils.EzPickle): + def __init__(self): + mujoco_env.MujocoEnv.__init__(self, 'swimmer.xml', 4) + utils.EzPickle.__init__(self) + + def step(self, a): + ctrl_cost_coeff = 0.0001 + xposbefore = self.sim.data.qpos[0] + self.do_simulation(a, self.frame_skip) + xposafter = self.sim.data.qpos[0] + reward_fwd = (xposafter - xposbefore) / self.dt + reward_ctrl = - ctrl_cost_coeff * np.square(a).sum() + reward = reward_fwd + reward_ctrl + ob = self._get_obs() + return ob, reward, False, dict(reward_fwd=reward_fwd, reward_ctrl=reward_ctrl) + + def _get_obs(self): + qpos = self.sim.data.qpos + qvel = self.sim.data.qvel + return np.concatenate([qpos.flat[2:], qvel.flat]) + + def reset_model(self): + self.set_state( + self.init_qpos + self.np_random.uniform(low=-.1, high=.1, size=self.model.nq), + self.init_qvel + self.np_random.uniform(low=-.1, high=.1, size=self.model.nv) + ) + return self._get_obs() diff --git a/src/gym/envs/mujoco/thrower.py b/src/gym/envs/mujoco/thrower.py new file mode 100644 index 0000000..1e8ca8d --- /dev/null +++ b/src/gym/envs/mujoco/thrower.py @@ -0,0 +1,60 @@ +import numpy as np +from gym import utils +from gym.envs.mujoco import mujoco_env + +class ThrowerEnv(mujoco_env.MujocoEnv, utils.EzPickle): + def __init__(self): + utils.EzPickle.__init__(self) + self._ball_hit_ground = False + self._ball_hit_location = None + mujoco_env.MujocoEnv.__init__(self, 'thrower.xml', 5) + + def step(self, a): + ball_xy = self.get_body_com("ball")[:2] + goal_xy = self.get_body_com("goal")[:2] + + if not self._ball_hit_ground and self.get_body_com("ball")[2] < -0.25: + self._ball_hit_ground = True + self._ball_hit_location = self.get_body_com("ball") + + if self._ball_hit_ground: + ball_hit_xy = self._ball_hit_location[:2] + reward_dist = -np.linalg.norm(ball_hit_xy - goal_xy) + else: + reward_dist = -np.linalg.norm(ball_xy - goal_xy) + reward_ctrl = - np.square(a).sum() + + reward = reward_dist + 0.002 * reward_ctrl + self.do_simulation(a, self.frame_skip) + ob = self._get_obs() + done = False + return ob, reward, done, dict(reward_dist=reward_dist, + reward_ctrl=reward_ctrl) + + def viewer_setup(self): + self.viewer.cam.trackbodyid = 0 + self.viewer.cam.distance = 4.0 + + def reset_model(self): + self._ball_hit_ground = False + self._ball_hit_location = None + + qpos = self.init_qpos + self.goal = np.array([self.np_random.uniform(low=-0.3, high=0.3), + self.np_random.uniform(low=-0.3, high=0.3)]) + + qpos[-9:-7] = self.goal + qvel = self.init_qvel + self.np_random.uniform(low=-0.005, + high=0.005, size=self.model.nv) + qvel[7:] = 0 + self.set_state(qpos, qvel) + return self._get_obs() + + def _get_obs(self): + return np.concatenate([ + self.sim.data.qpos.flat[:7], + self.sim.data.qvel.flat[:7], + self.get_body_com("r_wrist_roll_link"), + self.get_body_com("ball"), + self.get_body_com("goal"), + ]) diff --git a/src/gym/envs/mujoco/walker2d.py b/src/gym/envs/mujoco/walker2d.py new file mode 100644 index 0000000..805f2dd --- /dev/null +++ b/src/gym/envs/mujoco/walker2d.py @@ -0,0 +1,40 @@ +import numpy as np +from gym import utils +from gym.envs.mujoco import mujoco_env + +class Walker2dEnv(mujoco_env.MujocoEnv, utils.EzPickle): + + def __init__(self): + mujoco_env.MujocoEnv.__init__(self, "walker2d.xml", 4) + utils.EzPickle.__init__(self) + + def step(self, a): + posbefore = self.sim.data.qpos[0] + self.do_simulation(a, self.frame_skip) + posafter, height, ang = self.sim.data.qpos[0:3] + alive_bonus = 1.0 + reward = ((posafter - posbefore) / self.dt) + reward += alive_bonus + reward -= 1e-3 * np.square(a).sum() + done = not (height > 0.8 and height < 2.0 and + ang > -1.0 and ang < 1.0) + ob = self._get_obs() + return ob, reward, done, {} + + def _get_obs(self): + qpos = self.sim.data.qpos + qvel = self.sim.data.qvel + return np.concatenate([qpos[1:], np.clip(qvel, -10, 10)]).ravel() + + def reset_model(self): + self.set_state( + self.init_qpos + self.np_random.uniform(low=-.005, high=.005, size=self.model.nq), + self.init_qvel + self.np_random.uniform(low=-.005, high=.005, size=self.model.nv) + ) + return self._get_obs() + + def viewer_setup(self): + self.viewer.cam.trackbodyid = 2 + self.viewer.cam.distance = self.model.stat.extent * 0.5 + self.viewer.cam.lookat[2] = 1.15 + self.viewer.cam.elevation = -20 diff --git a/src/gym/envs/pilesos/__init__.py b/src/gym/envs/pilesos/__init__.py new file mode 100644 index 0000000..be7e1ab --- /dev/null +++ b/src/gym/envs/pilesos/__init__.py @@ -0,0 +1 @@ +from gym.envs.pilesos.pilesos import PilesosEnv diff --git a/src/gym/envs/pilesos/__pycache__/__init__.cpython-37.pyc b/src/gym/envs/pilesos/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..14f39913fdfc8aa190a7f22ef9c6f5aee8af992d GIT binary patch literal 207 zcmZ?b<>g`k0==0Rq78ubV-N=hn1BoiATAaF5-AKRj5!Rsj8Tk?3@J>(44TX@fuanW zjJLP~GILUk^NU^c%KS8$q9oEQbM;d5%8K<0AmT8(2xQ($h9YJl1txyk>W3Dm78UC! zCKV;>7Zl}Zr6!jY>qE8a7Z)Y#1I^M0nFSY&kI&4@EQycTE2zB1VUwGmQks)$#|SjB H7>F4Fp_evu literal 0 HcmV?d00001 diff --git a/src/gym/envs/pilesos/__pycache__/pilesos.cpython-37.pyc b/src/gym/envs/pilesos/__pycache__/pilesos.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8585697b1992d98d94d4401adfad657363b554c5 GIT binary patch literal 1787 zcmZ`(OK%)S5bmCynH}%TFGylu0to~QB6~&1LLrF(OJsv$=h8@w#?x)@Ec2qf*TL5M zf_>#Tus-r{IQNy4k6bxX)#J4{QRtbju6}=2Uv)j~_1Xl=KY#r7<7Yl0e`9A+pidq^ z)n9@TM9`dY3ayuW1>>ynxleJNOGSfnc|8?2|#%ORUd$m?oRGKCmG>PQ0@zl2ZG^EA{4EofQPar zBN1&Au_D?Rgs+H>=tA2TJ<*4@Bkqbdv3@~$S8Rw)80m>O#GBCe#T~$R&$fTaa;Yo5 zQy%YsV=4U4EdAcnJxlj(pdCUAV6ZT#i0~0q{Syd5W+Wzt&OJf#J7SmgjJm!j;B$S? zu!%pTGtU6_-x=%(4V$-we@Q`)%*wodiRW}?WYU>;o!%1!&;=ufS6`tRFw64lh4shT z(bxvUoYe9P!3_F5JkI0`sjOGlHb|68P834r>|yn*Wm#$LdUc?sI!;Vhm9gW1M~^d| zDruzcCh6_CLh5Zx$irls8`Z&cR*$5K)2ULjG%=iHJ4+n^=4+WBsvay=eGq>VwFS+; z+r#H@sU9W=DjC+Qn#k1XVcqz9s8u>VIw^*-JiZ;gp1fb5*eH&(GBa_!24`tJm(Y-| z!M8!XUYnk7-ZFQ8u{K>$g{=qGQMCbzA#>_n>&?iVU7~yGXy7|@)g4&iOtq~TZLJOl zRNcctG^7!4fo20GwKS+|^b?_gV{HkCn@;g!EVu-#1MvkYz%ZFXoNSRTat1&q5IHl? z#Q~c^y!`B)L43@81UjLUV8$|X=mS*NM1sN>I|yy->qq;$Pe*$VJq-9$cVR}o1A+${ zpBk8k2H3D6mv^p7PREJj-EpGhLvXJiOYy3WzBaOc5BBN^1fhMe??v9}>XMnb!Up4M zk(4*aqS5GeXDs40=tz{3kV}Ac9g2rz-v(YMJ42`KthN&82uQ| z($1yybbSd#Gy4+bH}|90uWxpz{vVxbUTOL1(gn+8y2+Q$4`HRV?-Nikq70G<&-;9# z1vgrF?$SYHeM_yw4uyfJHc=p5yp1#*Op96y9-%HWWq2#o@wh7F>oGfyKZo55muxJ# zpF literal 0 HcmV?d00001 diff --git a/src/gym/envs/pilesos/pilesos.py b/src/gym/envs/pilesos/pilesos.py new file mode 100644 index 0000000..06dd124 --- /dev/null +++ b/src/gym/envs/pilesos/pilesos.py @@ -0,0 +1,46 @@ +import numpy as np + +from gym import core, spaces +from pilesos.mapstate import MapState + + +class PilesosEnv(core.Env): + metadata = {} + + IS_HOME = True + DIRT = False + ACTIONS = ['F', 'R', 'L', 'S', 'T'] + + state: MapState + + def __init__(self): + self.viewer = None + low = np.array([0, 0, 0]) + high = np.array([1, 1, 1]) + self.observation_space = spaces.Box(low=low, high=high, dtype=int) + self.action_space = spaces.Discrete(5) + + self.state = MapState.default() + self.current_obs = self.state.get_current_obs() + + def reset(self): + self.state = MapState.default() + return self._get_ob() + + def step(self, action): + action_char = self.ACTIONS[action] + + self.current_obs = self.state.act(action_char) + + has_finished = action_char == 'T' + + return self._get_ob(), self.state.last_reward, has_finished, {} + + def render(self, mode='human'): + raise NotImplementedError() + + def close(self): + pass + + def _get_ob(self): + return np.array([int(self.current_obs.has_bumped), int(self.current_obs.has_dirt), int(self.current_obs.is_home)]) diff --git a/src/gym/envs/registration.py b/src/gym/envs/registration.py new file mode 100644 index 0000000..655a7d7 --- /dev/null +++ b/src/gym/envs/registration.py @@ -0,0 +1,191 @@ +import re +from gym import error, logger + +# This format is true today, but it's *not* an official spec. +# [username/](env-name)-v(version) env-name is group 1, version is group 2 +# +# 2016-10-31: We're experimentally expanding the environment ID format +# to include an optional username. +env_id_re = re.compile(r'^(?:[\w:-]+\/)?([\w:.-]+)-v(\d+)$') + +def load(name): + import pkg_resources # takes ~400ms to load, so we import it lazily + entry_point = pkg_resources.EntryPoint.parse('x={}'.format(name)) + result = entry_point.load(False) + return result + +class EnvSpec(object): + """A specification for a particular instance of the environment. Used + to register the parameters for official evaluations. + + Args: + id (str): The official environment ID + entry_point (Optional[str]): The Python entrypoint of the environment class (e.g. module.name:Class) + trials (int): The number of trials to average reward over + reward_threshold (Optional[int]): The reward threshold before the task is considered solved + local_only: True iff the environment is to be used only on the local machine (e.g. debugging envs) + kwargs (dict): The kwargs to pass to the environment class + nondeterministic (bool): Whether this environment is non-deterministic even after seeding + tags (dict[str:any]): A set of arbitrary key-value tags on this environment, including simple property=True tags + + Attributes: + id (str): The official environment ID + trials (int): The number of trials run in official evaluation + """ + + def __init__(self, id, entry_point=None, trials=100, reward_threshold=None, local_only=False, kwargs=None, nondeterministic=False, tags=None, max_episode_steps=None, max_episode_seconds=None, timestep_limit=None): + self.id = id + # Evaluation parameters + self.trials = trials + self.reward_threshold = reward_threshold + # Environment properties + self.nondeterministic = nondeterministic + + if tags is None: + tags = {} + self.tags = tags + + # BACKWARDS COMPAT 2017/1/18 + if tags.get('wrapper_config.TimeLimit.max_episode_steps'): + max_episode_steps = tags.get('wrapper_config.TimeLimit.max_episode_steps') + # TODO: Add the following deprecation warning after 2017/02/18 + # warnings.warn("DEPRECATION WARNING wrapper_config.TimeLimit has been deprecated. Replace any calls to `register(tags={'wrapper_config.TimeLimit.max_episode_steps': 200)}` with `register(max_episode_steps=200)`. This change was made 2017/1/31 and is included in gym version 0.8.0. If you are getting many of these warnings, you may need to update universe past version 0.21.3") + + tags['wrapper_config.TimeLimit.max_episode_steps'] = max_episode_steps + ###### + + # BACKWARDS COMPAT 2017/1/31 + if timestep_limit is not None: + max_episode_steps = timestep_limit + # TODO: Add the following deprecation warning after 2017/03/01 + # warnings.warn("register(timestep_limit={}) is deprecated. Use register(max_episode_steps={}) instead.".format(timestep_limit, timestep_limit)) + ###### + + self.max_episode_steps = max_episode_steps + self.max_episode_seconds = max_episode_seconds + + # We may make some of these other parameters public if they're + # useful. + match = env_id_re.search(id) + if not match: + raise error.Error('Attempted to register malformed environment ID: {}. (Currently all IDs must be of the form {}.)'.format(id, env_id_re.pattern)) + self._env_name = match.group(1) + self._entry_point = entry_point + self._local_only = local_only + self._kwargs = {} if kwargs is None else kwargs + + def make(self): + """Instantiates an instance of the environment with appropriate kwargs""" + if self._entry_point is None: + raise error.Error('Attempting to make deprecated env {}. (HINT: is there a newer registered version of this env?)'.format(self.id)) + + elif callable(self._entry_point): + env = self._entry_point(**self._kwargs) + else: + cls = load(self._entry_point) + env = cls(**self._kwargs) + + # Make the enviroment aware of which spec it came from. + env.unwrapped.spec = self + + return env + + def __repr__(self): + return "EnvSpec({})".format(self.id) + + @property + def timestep_limit(self): + return self.max_episode_steps + + @timestep_limit.setter + def timestep_limit(self, value): + self.max_episode_steps = value + + +class EnvRegistry(object): + """Register an env by ID. IDs remain stable over time and are + guaranteed to resolve to the same environment dynamics (or be + desupported). The goal is that results on a particular environment + should always be comparable, and not depend on the version of the + code that was running. + """ + + def __init__(self): + self.env_specs = {} + + def make(self, id): + logger.info('Making new env: %s', id) + spec = self.spec(id) + env = spec.make() + # We used to have people override _reset/_step rather than + # reset/step. Set _gym_disable_underscore_compat = True on + # your environment if you use these methods and don't want + # compatibility code to be invoked. + if hasattr(env, "_reset") and hasattr(env, "_step") and not getattr(env, "_gym_disable_underscore_compat", False): + patch_deprecated_methods(env) + if (env.spec.timestep_limit is not None) and not spec.tags.get('vnc'): + from gym.wrappers.time_limit import TimeLimit + env = TimeLimit(env, + max_episode_steps=env.spec.max_episode_steps, + max_episode_seconds=env.spec.max_episode_seconds) + return env + + + def all(self): + return self.env_specs.values() + + def spec(self, id): + match = env_id_re.search(id) + if not match: + raise error.Error('Attempted to look up malformed environment ID: {}. (Currently all IDs must be of the form {}.)'.format(id.encode('utf-8'), env_id_re.pattern)) + + try: + return self.env_specs[id] + except KeyError: + # Parse the env name and check to see if it matches the non-version + # part of a valid env (could also check the exact number here) + env_name = match.group(1) + matching_envs = [valid_env_name for valid_env_name, valid_env_spec in self.env_specs.items() + if env_name == valid_env_spec._env_name] + if matching_envs: + raise error.DeprecatedEnv('Env {} not found (valid versions include {})'.format(id, matching_envs)) + else: + raise error.UnregisteredEnv('No registered env with id: {}'.format(id)) + + def register(self, id, **kwargs): + if id in self.env_specs: + raise error.Error('Cannot re-register id: {}'.format(id)) + self.env_specs[id] = EnvSpec(id, **kwargs) + +# Have a global registry +registry = EnvRegistry() + +def register(id, **kwargs): + return registry.register(id, **kwargs) + +def make(id): + return registry.make(id) + +def spec(id): + return registry.spec(id) + +warn_once = True + +def patch_deprecated_methods(env): + """ + Methods renamed from '_method' to 'method', render() no longer has 'close' parameter, close is a separate method. + For backward compatibility, this makes it possible to work with unmodified environments. + """ + global warn_once + if warn_once: + logger.warn("Environment '%s' has deprecated methods '_step' and '_reset' rather than 'step' and 'reset'. Compatibility code invoked. Set _gym_disable_underscore_compat = True to disable this behavior." % str(type(env))) + warn_once = False + env.reset = env._reset + env.step = env._step + env.seed = env._seed + def render(mode): + return env._render(mode, close=False) + def close(): + env._render("human", close=True) + env.render = render + env.close = close diff --git a/src/gym/envs/robotics/README.md b/src/gym/envs/robotics/README.md new file mode 100644 index 0000000..5dbbfda --- /dev/null +++ b/src/gym/envs/robotics/README.md @@ -0,0 +1,54 @@ +# Robotics environments + +Details and documentation on these robotics environments are available in our [blog post](https://blog.openai.com/ingredients-for-robotics-research/), the accompanying [technical report](https://arxiv.org/abs/1802.09464), and the [Gym website](https://gym.openai.com/envs/#robotics). + +If you use these environments, please cite the following paper: + +``` +@misc{1802.09464, + Author = {Matthias Plappert and Marcin Andrychowicz and Alex Ray and Bob McGrew and Bowen Baker and Glenn Powell and Jonas Schneider and Josh Tobin and Maciek Chociej and Peter Welinder and Vikash Kumar and Wojciech Zaremba}, + Title = {Multi-Goal Reinforcement Learning: Challenging Robotics Environments and Request for Research}, + Year = {2018}, + Eprint = {arXiv:1802.09464}, +} +``` + +## Fetch environments + + +[FetchReach-v0](https://gym.openai.com/envs/FetchReach-v0/): Fetch has to move its end-effector to the desired goal position. + + + + +[FetchSlide-v0](https://gym.openai.com/envs/FetchSlide-v0/): Fetch has to hit a puck across a long table such that it slides and comes to rest on the desired goal. + + + + +[FetchPush-v0](https://gym.openai.com/envs/FetchPush-v0/): Fetch has to move a box by pushing it until it reaches a desired goal position. + + + + +[FetchPickAndPlace-v0](https://gym.openai.com/envs/FetchPickAndPlace-v0/): Fetch has to pick up a box from a table using its gripper and move it to a desired goal above the table. + +## Shadow Dexterous Hand environments + + +[HandReach-v0](https://gym.openai.com/envs/HandReach-v0/): ShadowHand has to reach with its thumb and a selected finger until they meet at a desired goal position above the palm. + + + + +[HandManipulateBlock-v0](https://gym.openai.com/envs/HandManipulateBlock-v0/): ShadowHand has to manipulate a block until it achieves a desired goal position and rotation. + + + + +[HandManipulateEgg-v0](https://gym.openai.com/envs/HandManipulateEgg-v0/): ShadowHand has to manipulate an egg until it achieves a desired goal position and rotation. + + + + +[HandManipulatePen-v0](https://gym.openai.com/envs/HandManipulatePen-v0/): ShadowHand has to manipulate a pen until it achieves a desired goal position and rotation. diff --git a/src/gym/envs/robotics/__init__.py b/src/gym/envs/robotics/__init__.py new file mode 100644 index 0000000..ee17769 --- /dev/null +++ b/src/gym/envs/robotics/__init__.py @@ -0,0 +1,10 @@ +from gym.envs.robotics.fetch_env import FetchEnv +from gym.envs.robotics.fetch.slide import FetchSlideEnv +from gym.envs.robotics.fetch.pick_and_place import FetchPickAndPlaceEnv +from gym.envs.robotics.fetch.push import FetchPushEnv +from gym.envs.robotics.fetch.reach import FetchReachEnv + +from gym.envs.robotics.hand.reach import HandReachEnv +from gym.envs.robotics.hand.manipulate import HandBlockEnv +from gym.envs.robotics.hand.manipulate import HandEggEnv +from gym.envs.robotics.hand.manipulate import HandPenEnv diff --git a/src/gym/envs/robotics/assets/LICENSE.md b/src/gym/envs/robotics/assets/LICENSE.md new file mode 100644 index 0000000..22ce901 --- /dev/null +++ b/src/gym/envs/robotics/assets/LICENSE.md @@ -0,0 +1,222 @@ +# Fetch Robotics +The model of the [Fetch](http://fetchrobotics.com/platforms-research-development/) is based on [models provided by Fetch](https://github.com/fetchrobotics/fetch_ros/tree/indigo-devel/fetch_description). It was adapted and refined by OpenAI. + +# ShadowHand +The model of the [ShadowHand](https://www.shadowrobot.com/products/dexterous-hand/) is based on [models provided by ShadowRobot](https://github.com/shadow-robot/sr_common/tree/kinetic-devel/sr_description/hand/model), and on code used under the following license: + +(C) Vikash Kumar, CSE, UW. Licensed under Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0. Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +Additional license notices: + + Sources : 1) Manipulator and Manipulation in High Dimensional Spaces. Vikash Kumar, Ph.D. Thesis, CSE, Univ. of Washington. 2016. + + Mujoco :: Advanced physics simulation engine + Source : www.roboti.us + Version : 1.40 + Released : 17Jan'17 + + Author :: Vikash Kumar + Contacts : vikash@openai.com + Last edits : 3Apr'17 diff --git a/src/gym/envs/robotics/assets/fetch/pick_and_place.xml b/src/gym/envs/robotics/assets/fetch/pick_and_place.xml new file mode 100644 index 0000000..337032a --- /dev/null +++ b/src/gym/envs/robotics/assets/fetch/pick_and_place.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/gym/envs/robotics/assets/fetch/push.xml b/src/gym/envs/robotics/assets/fetch/push.xml new file mode 100644 index 0000000..8e12db2 --- /dev/null +++ b/src/gym/envs/robotics/assets/fetch/push.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/gym/envs/robotics/assets/fetch/reach.xml b/src/gym/envs/robotics/assets/fetch/reach.xml new file mode 100644 index 0000000..c73d624 --- /dev/null +++ b/src/gym/envs/robotics/assets/fetch/reach.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/gym/envs/robotics/assets/fetch/robot.xml b/src/gym/envs/robotics/assets/fetch/robot.xml new file mode 100644 index 0000000..9ee7723 --- /dev/null +++ b/src/gym/envs/robotics/assets/fetch/robot.xml @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/gym/envs/robotics/assets/fetch/shared.xml b/src/gym/envs/robotics/assets/fetch/shared.xml new file mode 100644 index 0000000..5d61fef --- /dev/null +++ b/src/gym/envs/robotics/assets/fetch/shared.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/gym/envs/robotics/assets/fetch/slide.xml b/src/gym/envs/robotics/assets/fetch/slide.xml new file mode 100644 index 0000000..efbfb51 --- /dev/null +++ b/src/gym/envs/robotics/assets/fetch/slide.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/gym/envs/robotics/assets/hand/manipulate_block.xml b/src/gym/envs/robotics/assets/hand/manipulate_block.xml new file mode 100644 index 0000000..83a6517 --- /dev/null +++ b/src/gym/envs/robotics/assets/hand/manipulate_block.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/gym/envs/robotics/assets/hand/manipulate_egg.xml b/src/gym/envs/robotics/assets/hand/manipulate_egg.xml new file mode 100644 index 0000000..46d1dbb --- /dev/null +++ b/src/gym/envs/robotics/assets/hand/manipulate_egg.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/gym/envs/robotics/assets/hand/manipulate_pen.xml b/src/gym/envs/robotics/assets/hand/manipulate_pen.xml new file mode 100644 index 0000000..20a6fb5 --- /dev/null +++ b/src/gym/envs/robotics/assets/hand/manipulate_pen.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/gym/envs/robotics/assets/hand/reach.xml b/src/gym/envs/robotics/assets/hand/reach.xml new file mode 100644 index 0000000..71f6dfe --- /dev/null +++ b/src/gym/envs/robotics/assets/hand/reach.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/gym/envs/robotics/assets/hand/robot.xml b/src/gym/envs/robotics/assets/hand/robot.xml new file mode 100644 index 0000000..dbb9e43 --- /dev/null +++ b/src/gym/envs/robotics/assets/hand/robot.xml @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/gym/envs/robotics/assets/hand/shared.xml b/src/gym/envs/robotics/assets/hand/shared.xml new file mode 100644 index 0000000..f27f265 --- /dev/null +++ b/src/gym/envs/robotics/assets/hand/shared.xml @@ -0,0 +1,254 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/gym/envs/robotics/assets/hand/shared_asset.xml b/src/gym/envs/robotics/assets/hand/shared_asset.xml new file mode 100644 index 0000000..ec9a0b0 --- /dev/null +++ b/src/gym/envs/robotics/assets/hand/shared_asset.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/gym/envs/robotics/assets/stls/.get b/src/gym/envs/robotics/assets/stls/.get new file mode 100644 index 0000000..e69de29 diff --git a/src/gym/envs/robotics/assets/stls/fetch/base_link_collision.stl b/src/gym/envs/robotics/assets/stls/fetch/base_link_collision.stl new file mode 100644 index 0000000000000000000000000000000000000000..1ef459fd5bb63e2e5391b6166bc3231b37d07170 GIT binary patch literal 236084 zcmb5Xby!x*8#O!zSYTpfcXt4L-(z+gNn_Pqam=Z|x7IkTqr%v$%FnZ2L-V}}hLF{*d3f_+8|9bB-^px#4z^&U~Ka`_rn z3YHw{?_029De?d7zhPO0`0y)Ox~^Z8wEbkxZEse@(#)tlNtxSjp!fW@(_QDJk0lq; zNB;ZKl6Q%Yza14!l#c&jIQ>s`M@p%Um(3JJTM_$y1j~QJ(%32wpBs<40++{8{zDh1A59I}2lJaF2an$M>xy zEJ=t`_k(5R>X){{kNbIIOEA}jrLmOPEno8QI=*}lmY=5P)7pO=R1?d^`trxc($sXj z|Fr7)$zZu)d=7p4qXrrx+?U1Dq_SdH79MG=Pl)VygXNW8pKOzU26$ran9I3uEFE4j z+2*o$B|ndBj5yT$lP&gcfG4KJ500gZmHcgvwqr>`?0FR|3-#ZnHCp>49$STN&%oo> zEZ6Zr{dmazcs4nQUi?D?4cm_B%Qa#tONFgkPVSQsOAZ9c(f70JO9HwPB9>O1Nhhw< zOT2k{>t8*;us>Mlxlr6V^RB*zy>>68`zOS< zUBPnWs@nQs*FaA!*ET(tUbIZ7IiAP1y0H{Ec#ZkD5L+41pAmC^1bAW!)`uktv5{Mq zV_#PNEw>8C3R@Lcc_!sdlRL>V(n73H4v?;Q3mZiPyAh_~=weAi)aoBB=bn!+N){Vg z6Gs;jzU5;n;ADb1(n8c>#JzJ7MtR$?nwZk5M=b5!7is3gl7vV-B3RzBO*Lv}4o<+Q zhPe6Ffq^)(# z;pfrwL1AMWx5~$ep=-VgHpi2~(Z%N^#PRIGvha_M#>Kdz2{^ilXj~$e3Z_?op2v-5 zW962u_jO->=I0*8P`4vh^d`KDu;O#^==B>z3qLfn@9m!S3q5K68ro3C{aIgSNS5(y#E0u|ALK%lgVG(V28x(<_#gUlXHgo4!qR zj1|sMA&RC5mbHfM(2v?mBn)~zle!GP|DPvleIEAiLDFUZ1O3{N8XC42pE>rA8LnR| zsh>%2o3X}CV(oM1MAOPy3CRcZ#ao_}5Y^rL$m#A~jJ;cKTGj_X&FU0Qm;LV89DNdE zNc;qO`21_*;J}GGJ_CGeFD}H;iLNz_w&oMe!O#3DKlAbY%rONK`22c69mEv?P#mt5C%8JO?s+H`WH-(;Mj`f)% z!gX;pZJJm-(eeC+2)`aAOT6B#H+z*n5$6)l%4{!ZQuD75%o!>~LBAkbcJd+Oe&HQI{3o#-$BYYNkdteGa4=hQD5MTL<6JOY&VH>6z49Yg?M(WuRL4ix-s?c8A8PO{xhiS%xcC3ewx;qXs;Y3 z6Pms;c66?&7F$D9dce`Zo2LN!h07Hh$0D8jP4-{JQZ^n(h~FTv{r*95L8L<_Nj*GJnHhxPqKtm^~U1ePSk zQ_q$%)uHYB`o(TCP5Eg0c44b_fY$-84_s+nN6S`nE3c>}yrK|+vl7ulEV~dSBdYGx zTgJF1;+nu2Ze3BGY6eN4>~Hh|UO5tRL~*2X-3Za4sjEz1+Lk{ zS(c_TeyhQaV#DP7ANP#fAJU+}((l)?NIe)EI6W76vD>1ZvX?1gkB= z)(Ags(x_QnwWy?155h72CMNJJi==bQ?OOoKkoUN2{M(BliK@gKq9Uv ztRrQ+nY65}`=3@F?LS_AJXM;~blFn%xkn7`c-&U+$Fm)0xOGJxW<aE1y|yNj=EKddm_dwrYy=0s8--_d$r9v_@zh!!GerRGx9 z%0}b)dEop(1ePSkfk`fMk-}-Zb$T;UDGLj?XB7^lSQNJx=OeF|7s})TM?KG z=bI2aS9YT-3$i6Qc^P1ti8W%U)26!d$qypq3Fnv){`p;{KhMM}TnEl2%r$1zbn+>B z+xELvFUPl#`KvxKGS79BIIj?mb4&>5OTFa9L;2L0DVHoW4s#hv(R8?jw{eu$yb$R+ zjF;)c%c>StCMDqP!&zBtV+`$nMSnOkWux)3(W7!|U(Y=?aQ=KL5kozmw>NWH5l)Oq z%ZO1<`)Xhc)`2Anak1%W+2dp>m3>Dy!W5jl)_ydrGfrkIRgX09mDO=3;yix1ZU!Cv zJiwgOLeyu(Oh%09x}`d%ERUT*1-1>*m#kZ9nbSf{c|20yrp}amdN;y3iuDDl=~T7d zT-~{yW9RNxn_e<^uVz&6@F@#o=AI}@SUFwa#m~Sxck@?hF6+x|RA;`MbgvglInVj) z4h_e-YemfG**=eF`%s?kAC5-R<3;YeWB%aWMYIrME4tBAzjRvZ=K&IP`IVVY>teTP z_j&GGXZyd5I2M^Lxg*c^WecX$(>BEt9WxwfyA|QzpS9^~8(U$n17|oQth4=#vx|H< zB+jVB>jP7k^^Bq^1sWTUQNWomL@Hh%$;{Lp=DA6n;g}22teh`<%5z&AsI5(}5h9lE zh@h*v!;O5*MAms#+Gm{nvb(n0Q+#Ry&TyQS)l$b0C3gL@KAy*qls^}CQ}3d!a~I1^ z&10A;Y`#&>oF(5+1jsQnd(er+4K-db-PyZMSx|t z$~UHw;aIgeU#*Bu3!2Kg zu2odEzh*lka2^YheDSUJ3BTHIX!71~o_= zZmyLZp3&sqI@X zA}g0kPd9&O(%nnJa=-I5n(%3W?LC)^>(PpMd)}K~u54;^ZqKtGRw^Qbr%$Je*^im= zoDloBcA;iB-kIwh5i8zBQm*&KjsLE5+qN#0{?E(sXZ;fGp zF~itT;q-PwjB%KsCa!t*IP;sz_bydb$pvl_QxJh`p3jON_{zrpTc{CZE)X&Rt|-(i z-Vx?HhBEs+V{XT?unsIqh)dlA<-!}yb=;poQFJ?Fx7bvg0 zw5Elx5)*MfPm7*GOREkwS1_`K5Oc~0$gR5vklV6Bo-KJ-#bf>~GZ(H@WDFttUka2r z!zt{%0b=t@d={T^$g5NQW=B_g{P@|T`tF60;?G6ZMQ z<4275D#2WGzjOrc-}gXsC^E8-6>;3jMc*+dyVuk!!7`20G`iqJnuBqWOAyVG<$`qj zgN|<#Q(Oy{x3W*8r33aQI}peph!*12{B-)eV(`oL}1-Q94r?ovlZ&3&Xqrxh%AHb zGrG+Tx}0(BANE;0F+iTud#mx0pKD?+WSn||(d2d{;tygeBf3*>G1oESm6Ah73k9*qKs|m+f$bE?DKO&6WqaJJTnEBYTq;%2UH)r<>V-`gO=0bKA z;`+cJH9yr(Q^Rq~4cQWN-G9|x*|+RCD3;yO~vATk2^nPW=O_i5CB%nXxjkx_Z~ynb5w zt5tT@D$vTi$hD(aO{4pJ7a70Lin=c9NdCcO^!tn3u?|EFQRQTJ89ysRxvxHJVQS=H zkP6WN2y3eemPx(lyxjVu9TZkEq zh-SoX<4OXiAO~YfLfmiWFUJMMs;^zzdtyHj(QRWSofx<6PaO_K5F-wBZ|{jI*mEpN zh+lR-UGkeoWmozoAUh*#Bj>Z{+&x;BVMP8#JuGTa;(Zh?+_PLaZ|MQg3z3i2U@WV_ ziI+-JlaKfpLDaR z0harcrc$Od&-Hoj9lN#hQ=O#SN)H;yOpT0;e2xsxcMY1?k|ArB(ee#$^25?lYT5j; zUX3FbL|_YrNDOaJU-$ax(|HY6xEM~;_e?Y+VdQpe9XE$$(l0$e;T7tL`hfK}pPfQ^ z4>r}`Fkd0(^J(~`_T;j|M}NX~V7XWymL$ZE#u@d+#x$=x%y3v1ayu#m@6a#%RdaWi zdM3A9asi(s&-1BF=g&2>X6(7e!PLn5$lA#BLYylnJW^!r6z@PFzancRT8NN7uKL*$ zE0T+_sv%w-pP00C)i+m4NdE8_w<7}iScoGzGwQdWe@R}=&jVBD z&6`Z_Sp$vNTn93$5Qmtl&$iC4QZrK{4`Re>W$F!ky(wq)0mf9`Z^sm5XKNjoGIo&# z8pJ4XkDC^LJ#~Ky`PDmYl;K%v<*S)L>&te1Le&QLgUHC(LPYb)D05;?=ES1RiMdiu zrDDxq8aa7QB0pN|_?Bg`Oufmbu54JNBaWymN${eQt%ybN@{u@*pzm+^&%{e8H|ioH#0_zueYuwhHN1+yfDq3%Qc{>X^T* zTWAKw6!lL+jzWg3d@PC@zF%pw9k268Bjwpiag={#S5IUdM7IlwqU5~){6VZ^M1{$5 z)I4ujPfXdoDuRw?vzxiFB)&lx*-y^@v5TrT>~7&i zGf!XFG_56lRxhJlo2@K*uWcwbIQU3E&oKj{g?Kx)JssHXqwipbYwRCJ>)lqHEQ$(lE&$5(kRFMquq9jShtViCUUxWeYaPvfQ+iBquX31YpEI%#G9PQV= zGQhaToQQRN%r}h=mt15<$W}y`lO1K*RU6f^DQ7L*hpe`6>tw3^`I(W|+#|d8t-f^W z9jd0YyTeu?0$a%UsY~~hDXu4|6TaOooQOPVt)uD1!7{Xkp^{yiYsh`yyM|GVV|R>v zek(0eCf~XHF-!&}ZB(0!`zIm~77-EjwC_Qa)vTP@YNEfaQD7#i$$gXh{u4#TkF7TO z1KG#QS0f6IkXN-elzmsdL|o^{KI{5LP>EA}{_xd;uOnqW*El-8zp5vei}fLo@k!i% zA31sGRkGLWZsCkv?I%;voo{+i))FiGH2T#_7HxQpD#l;5q+EOyOuBD6x^QZ%g~x<= zbYYmByI>QY7??K^ISTvKw@(B$fAYV6ykSHyMod_lClOPEcn500$Kz&iu_Ph36dWug zUhk&jH|u#~O8BX1R3z&;6R{#}Dpd%6@@K5JGh#d=ZtSh+i7CjOSdtL+f?89Cr89M3 zW;kTaw5KLffZHkkA^UzS!|nG?DKB5{MBaQi3K7Vh$f*1_M;b5LE>!|GUT)>x_xd>U z3rb6MIcBgTPLFL(OBT-5cX6w*CCI_nRwXxf)h{}^Y3-O3kq40<5iLZ`2QGTTgIiu( z{$grm&J%s6knjGkx+B)&yPV}yd918{x`u<{kQ0$bk@JN(Q!s-*X67faR?Jt}Dl8Z4 z)uk@oE#;o?FqvW=e>1K#`yd|+p`H(r*@qreuZM>x$|_-$y3swu z;boDjt%%EvSTp39nvyj<5mSz5o=R=@y)e;Ok`N2t50N{!#j8GAO;6-@tRu_GFmkGW z!$b=a$q3i&@hWh7O;1d*r~#aR3E}-^xV%zqEv?>G$HH*PiB@jk_^`LU6m*Lwp6#x0 z@(7`kMtb_EBaaU-HF6i9U@^DPV{X6B+>Qw3b42qySUY`WrO2yP&Td5@w?=V?4+ZO71_gmuhhT+t(?MdD71d(fz=Y_boYOuW0Q&CvO zCke>sh;XVNPRUtMnI$<+^#{mNGmp{yhwBq@Opxa*>Qkvt`R9KS-J+V2{nmQ@6Q6l) zd>BFlQa{ok@QOl4MF!^xz$c|lyx57N0=z8<%w=Wj5-Gi8*-i=l zBcocmy>0#)9V%bm~h_1+48cn`ta;UY<*Y<6IO@N^iFHdJrZPXs~RkComwy6 zBAcxk>j$P_xmXhKk*#S%TaqKpoo!@&R0Gr%Ap&}(ls-*5tMtRHiesxELOxmE7#Df& zBG2=CcR}g(FrVtSF&t%J?N|r)NeHj0t>yX^Csf5AXDy1;H0wm#c`mKm&XFam5ARdg zt0hmoUZ$K@S-ksS~IlR>i6RZ-1Gb<&3&`alb{QChwj?6=%LS z(WqB^U-bGAd9^}g)wyEe4Ic{>u zs$FD>ORuQno$hqzTrdrqmWebTE97}BiFeNE+CCsTp#pY?{# z|K9zGW5m0)XDDmCe=KT%3V~iHiMY9?V*fW&cU&u?XIKD!(b*yAxXWgw)73~l+1F}By zu9e$cTzArgYBts0u^J!(+wK+~MA?Sy)jyhXyMw8R{y&%+>p<2PVr1SL9?zQo)(^~u z%3wuwzM0zN$vj_Fak>w!uC3&G4J8)O4+#%EUSIKsjBzt`T7yw zDMBp~;&cmFBc-C`U5uE1WSVN0f1!EX44s7)p{LAXbbfz7c{L+2mouXamHUlG^%26i zmECsp=U*-EeqktK!7};Osan_cbLXUfYF!ckqM2Jt>{A9_#&#AyW z*F@xSRDgwFLaAuV)Z~cH`Q1J@KRKh%b2_rnB@t5w&kCVVyzk@4g(V4bd1@ayC-x@Y zI<0G1E-KETL6fOc!S8x}V~66Li}8`sr$5m7hb~E|I9TokuMjG*IsKnjon=HUBj!JL zNy3zQwIr|vpAM2is(WXr^7)M4BWi+Uj%8JzXw zN-1nSBs}3V_PM_kEWCpskSsbZVs4u6uP zip+NIJgwetRkdB!hSK4{ymXu6L`1XeXy>FSWUiuh=2eRtg=&B*!S^g%JL%u5{YGHh z5rHMKSF7XfQFUBZQ*lsP5P>Ce6dsYz=#|l3%fe&Ti1~HruLZh;Ur}+a`cbotixGKh znb%oHV6OA-Q=Gs1Q zKjszpj!#TL$*_giR<&&AVmz6cbm&!2-H5*MBa7I zpVk=krL@hH5tu7&=4t9pj#b7}Rvc6~{;Eo5%{HlRLh@?%gQ$=r`FR*i?ixS&d017A zSUD3So7-~o+(iVcs8u<4B&0Kj?yX@v!>$Nx$5vSpi}E^q3_D#q!QszQ)vzVQ3XG%U z<@o2NafyZp}2+-9^+ZZK~lq1K|lS`qDr zd?TY$hF+!a6kHTKQ>>s_5*v4kpZ9AGNL6T$~}CQh$$Fx;D`uO z{(A%Za%i8vn`4Hh_r}tr8XOxi4`MW6)$=KNQs}lfUA1w{aF}bt1Ap3o?5X~h8ON%e z2Bg#9y8PC2RAJP?xt-Y|cX?&{XlClz zX7oziU~J%4p&}#Nis;nULrw@%>hLD3OGOR;OVxUPqh{qo)I5K0*&}ca?MmaK96kdP zSU0cpxv)~J0#-?Y7-?HA8oOhE*Wf)IB)cb1FpzE!K7dsy~& zQNwi^M19(2RqZ-EZkRUa2;enG03I9xU@p{lYtQ5F_K?dPeO6z!@=2(|g`y|Yjbg5* z)}poxQS7##yw>uGN}X|C5^5@HJ1R9l^Y`6kg95*(@8esEYqpM~kK1yXT9mf-IC>M1 zlX7HQY1xzInaGGHj5v7jRwDXWR5C1yPXT&&mf1s{WYtnbG(=z>sBj!*6!MnkJEoN5 zCiGxm_^Yj+9uefY@5TOOWlH_i&mb+H*Eu3E7itNAiS6@S z@@W}E9r?5mYe!we)(Y{XZfSYCm zX^iD1t7wI}ABb?TJx%4Dx?F$EN``&nz1P|fjWpK@jmsOAGW06(YCVuJW$C{;ZU!HXmwPxz4u5=Ucfqth}`vts~$&$ zy6_(zto6Q`YTkOCagWy^s#j!Oh$<2I(tLNtTE~Ek?bPWpV~wtSeva)$9mM|eH|Rp! zutG)|AD#rr+;^v_#TgG6&;L?OL<`}vCauS*g3+dOPTM++3WoeLl@nFes+@PCerh{b z4KR0vQ8Q3|5Y3THt@`A=>!`7odyWWHIIF5fG^-?sxn5JjtemJ5sDm%x45E5D3#!hh zA8hUantDafR{dBxF&EZxrSBk;Nd?pc(>v$g-b3bm|5@d`n8TttsATr$K~$hpR#ScW z-9AQKfA?7}{FEaJQ&6K&yEr~<)>*zy|4u!m9;A$Mq&>{6CbKiaI#3_Ej`K}q!%KHm z>hqT@%88?ZCGi=3QWtr>ODg&8+L5H?R|2Vpd#?YenpLA(r|Kx%`=*nV3uQ>CyT_lZ z6ewsSP-RfBglNZzc8r*?JwpPfV0~B;zbg~mL|$!^RmP9(L0E2Jnmp*GdUW92jW;jIbpEZykd`U}=?Ko8OktI=SbVa;xJN%_}N|^33>K2glA#XUv(HUvs=Mf|`M9VAYSi54YLA zjqRwdeQMRgb?y78i(|9VWY$5{ME(wa<*&9zeL^((mkwgC3L64d*%Z$7!hC{>dI}?{ zWUw}nTZPK`=3TIAvHGKahjUqVaHm^ym7?iC`VVGNOsQoLQO|3?(62H-qCPUW&uODZ z6pPd+FkjU=#HWbGR_KnKfH(?P#GWx-Rr1S^S_G>aj?W)m(j8t6HIaWwU}ZOz@G*6b zV4l0H*!MZSWk&XWsEJlY)lV+=UvDCfV_(`y)H_5hJn`E>mN6Ob*tGR(#ju0M;XK1E z`hn=}EyLBT{R{uRv7RvRhwaw1|LP#>5-J>@RIguco12kr6<-ERO!;?74>jdV9(8)} z-}}39)tjqk6W1BvA6s=0^$InSW9nHA)b<<)j5GWMF(t=}aq8}5XXSW;*h1coI=)Wj zNqNu+(}zjyA!;8gDu3nQ)!F`_Ru%P@?;7}}4OhW+RvSlo6tPu^W@gBc&f}F|oOxc` zE&n6!(3r8R2S<~rqE_Wxcv$Gm-cGSy;0PHN5)sFyjwa8b49anLREVfkDRebpip`G^ zsGNwlB3gRZr%PLo8ozk%VhZXYmc(~I_SKWIdETk^6R#1f4C<>@aRTaBl8v0NsaXkb z7Oh2nMKs@A>diY*p|jPvaaLcuZTUdjU6mD?pCF=nba!-<&%garBR-W*LbbdXJ%N(O zWiu5SHQ4cM1#M;R)v4{x-Fnc9^dqR>iDIfBs|=#8{kRz4K^m9SNw28siB%enqWXgi z|3?R{s`hYLOWEU7c6nsT2n|&&|A8SiB)T+}y0U^$;dqymb?_$Z;0e}2_Z598tYiu|gb zyE|KRylaU%h-!&i!cMq&HA*@8m#MXw3l*;0te!NZQaRIE3Q_s)L&|kw1*Hu3mZ)Ty z3(-PMPN*c^`e&1A^W3oX12xgAgN;}@v#@fG-0fzm0}&}EwxfANB~3Kr#56~W@XgFG zH66Dsu!lwJ*PuRE8&fLQDAY$GZd^F#;qf7(?%3)Inr3gl#it_gvX4bX2 zw{zAVr+w%xG1s;nJyl$}5){t5D@2d^?bO({{`v@ZET}T5AE+yQmYVH^?U~zT?JfV3 z%g#H#%Jp+jYQ^k>T8niHk@x#Y+qU_0v<9r4sIQ2~+GnVGS0^|9FxkhAwKlHoZ>>cY zMy*8+<}=}pKW+U3XKOon*8mY%pS6xAYZ|EQWB2P0e zKu-QOMO8YnPj~EPpdwol?N+x@zLg{OuxD01M+BB6#N*fP)S!sb`VCebi~#U?;B#Uf zoY75nzHv!waQU|r{@-3PB2edrsK^mOJVyXQe?$a`x7DxwvVEx>WGl+E9U}l#WG{~4vZi3AHs@8t536l2Mv|=n#|%X~ z^ilp}v#D;piZEutl7zT>?zye|wWYR#TnB0@BGy+Kptjs8pfZ{(%5!~6d*Im)DvH19 zgc@ErZKz79{mT5h7{(GD0hIiq_UYr)#xeZOW$@(hMvYeiADoqA+%V!`UmMgwMWsGq z6nqsRv4_}mE28a^H1>|A^Q(j)Z;2y{k%e`1udPjE|4}QyTFkA&T!_Yag}>35&Dp-E zaTVqGz9{w_b9uCxs%CCKV4UMV@#*W6+P3`FoD73U*X>4kb!u&1)t8~Qx)3*u zp_j3E309qepGk8PgO3iQExet!B+j#ss~+KQc1ny5k)lb(4X!qL#L*& zU#qncpej}zZVq^WCiI{?s43@-S&0g77`oyQU z&pu<_XTVXwn25i!6O zM7EV9GK{0J4vd`m9vR11$N$7vn1Yd$HCpOY;I($zWv+Ia=Pt%Rhimv!-7h)mG0$*} zCHM<}>8p{S&oBKJGXo+p_G!M;hvtNprQe)*-~S3#>%N1;U(r&Y)a|IVko1}76{7j> zIY&!HIa>Oj`vzgWgZ;3^KGE$9%HBUy%iG7S(Gupu`uKbLMXPy)u1@dah?cOo7%f?Q z-tbamkHymhJsdY{Fj_)HP)JF7?c1IlcYpYovqpaO7}Cx~cYL)DV=6@7e2_uE{$(t^ zFcF@mPJ1-{l2Lb@J7Y|R=p%bSYi`FwXk(P4jt7hD@-3v_5gA5ay9V`E^~x5dusMJ4 ze!N&w*Vf&~*{lN*Sf2>(q*9(NO~22Cn}2<3+p=Jlc7o%puayU=f_Dp0X4WE%&a4rc z*TUDf<-M0`tr>w)7$UGFenVmRYunaNOSL9{)qyb;mc&uU+6GDw+^-+uC}=k9v?973OlkiT+nz?Tcg8xtlnGVS(!SL9^4zt? zSCgtc+ei6UqLGZilye^8>dVFzy5rlQ7Z`F8(8 z^GmMmYdIqGDgOFj(Go^TR>aP^8SEM40VAZWx5UT` z)fuBGAws=c+H)p9Fs4n*CNF1=P}`Qp8M#DyCVmYu6? zM|dV;Y=DTT8+)s{UyG>1yt;T^ZA)q2bEAVg+n2wW0Z|ynDAu@SS@j>vXf#fp;oIsM zg<*7tCGj1vFYi>1{n4r~Bf7L1raoQHtzK{(jZqkuB*d|{QuV)d%c#ifVvx_2Ay>Ynh^I8jmPOYJA7budZ!DHD{wZBQOfX zTu<_!))4YxfP&`dSGP=WaAdkhd%rz49Q&deUm@CxxV6hu zE}Wm%KFsqPVXTI+55{(UYFVVDERp)7N^!_dA_C(!jOTcV<>x)xb$pGohj`18bGp-@ z^p(te8JG)O%QG=&XIVRwv%UDHYe^XCVSM#5B7myZ&0|J@{KoqJM)LbwH+#lI*8MB& zhyR#fRJdSG_0Gp}%i`&{j@-6e9h|C&a4GwQ6>%7Y?)22$5gfUfxL4)bKcUcqt;a4B(cC)JaH;)w~ zJQ?w@XsRSk!B`7R5@J9M$qzw=WVVt%mVF;YG`ZJ-1|DcYy?h-#Z*t~^_VVg7O)>jm ze6`N07Y)0V-@K84@rn@dw!PKP&<5=h-`~Z^3lUh75I$2%Q|BSBbdzH^jJ&$EX-fxv zh@LX9U`hO|Rs;F>6Wi~gHj}(1#!-mCk~qGaSxGKlokNz|W!<^^c&R59j;T&7*u7wM zCPcaJx#hEmE;8zdo17KjhPwLHrYX!BSf3T4%=#1}7 zocHnA-Dso7PmcO9Rx6gljgF`5O^&ZoV06ZJAj7t6HRqhudS4BeSXRkd)o6We8}oT! zNkZhQ_{`(rkKZvI#%&nsS!1}G<%@X^DU@2jbHln17qqpezGTl>ddaOqH2-R--+Ei{ z`R4Q{KF|^;V!6Y=U($AD2&KSL4o;jJecf=im8Z|iffA#>D;fHznxBhOs&Rb31Y$=1 zin;BPtx(&wS}x{YOew?K_v333a%i75>Z{x)-Z(j`A%(dF%JZvxD(~DSDPVX!VSU!f z^4F%iwsifRb;pgAAK{C%$B`3%$D9y`Q)i>-GNn_L!Gg9Y?U>#T)VKmx)|U@ zd(sBVD_;hvkIM?u=V9@L5ug<@?OFr1d)Iz_81JfKJcw~3MuR-M8>BkW>bBmLPks_x z599Np-1LrD5hAcYKKW_?LmgTjNHzFWA9G=3X|2OJkC4HV&BlID&O$^ z`Y~2*A--`es`*tScaB9d1!GZ+QTZJcmBzmPhda6Q7ich7D&8YAYQ^b}Ju-|-`OUEC zboTiCDQF!>mKdcX0^?G?*}pT5J?njU`pG**mSo!E!dUbI$EZ*K#HhSeRIjD|SosG=v*2uIEb6$e>WD=#lEt`G zh&M-?+6!H+q;d{&v&6etF4o6iDJb639@6TLK4nif%bsN#9^FYix{jSqjDy+T&1z+L z+(P;^*cu@_a{aG`)>h?t@Y(jdQRQG9L|}dVMW9W!>;>{I zRsHxE5iqjc*EUpbJO0Z2wG(TETx*A?eQv`t>OJdjHxk>-k5i|n%^nUpSMyf&y^~={B7eH-$FtJj+-^6e)O)f-LFv#b%Vdq zgfTV7(Kusxhu*D`y_-*eHI-cv#?gqjBGPQDZ!cAGvKk)eCMSl6shPEsjgs6$95-te zo|L_j{e*9SRgQnf70be0SU2B$K#;$T#=0 z)_Gcp%Feq67)M(XZEJkelBzDS{mU^mM&1||V|>jKS+-&xvo54ebnMAIJyDZJk7}fT zv07pbkM#*L@MSNLEL*E4I`(}qSMMB6`KuAtl;bTrteZ=|Rhd>?PpM{c+>Q}4M#b1d zj*w4y%3*=&?E%Fu(z>d?G^$N?)rR98jCV0Q=Towr`K4`B8vBuhZn9Ic{T>2a=t zW~^?F+jBEw2_r^jiA=&2jKZ-bAzIF9Di0sXVV~fWjWD8jZ!?7Qo-3_<_+_gGp+ zmY-HPfer%WYyMt_R#&EsC??-E8Ka@+z;Y4Idl{c@YjyQiT3(KK(PyBW*wfsbPHZei zw|TAb`FWpvT0qoVEiLbIVhSRxZXzhOG*uqtN||2=$abM^DAgLBZm>tjT<9!>@O*lT z{z+x0FVWueQcO!~dATnAWVOUx=o9$<75k4(>_1%Cf1qo?@ky|IQ>(M}s5H+p*4Q@1 zfWRtMe!O$FM=iUJMQdQp0Z% zvF$^t&=AM-DD~ihv8a~^?Ji*TQRvkyo=VKW=cFP#yHk~e>~X-+p({cU$MIFRL?czP zCUoL{0N=9cq&}Z7LymKK^letJmiV}??fOz@-SG|<_7+FM;^D;hxOqmg`mHF0l@n81 zMlI0%GKHA+S?f3@v#D>{b5e@XK#6U~K3Tn5^9s4u(K~tReeOWZ*#sic_3_PRw@PaC z8)s_9HySYoeVf&*9Z&OKjXxbtI{(HY<}&#Fe9{MJI>Sta9**DV^!=ggZV#kO?7YyQ zVJ<`qvHN;0`^@S~=r+f@=+zLtbxf$b68lnjGo#mX&+FR{91Eq}i>!zW8^e^_(nQ_y zyF2LNnBfi;ve$F*qAjOtS)3Q_JA8z?!{LFck9#n}`3u%$zukWxpFZ4Tnvwxtk{ndi{ zDp&Xw3j!lq^lkhWoo7q?+OYe2)XZ#h%As)eqJEs-DyP+LSz8sKs-Nk+Y&|d2irSIN zZY<)Wvu*6}p0v&zxjT?HPnIxnmP>*n+G zZME#T3M^IWXYrdz%ciQ~#Sa?gcrKyyLTABWpxNbV4{V&My0FJVhlS1y(R>>IsEU10 z%vn{B&kfLRA^OqU;i}U1Jmwc~7;)#8>Uv<48d;UUEdrkG-l~D>c)dcZY*9xv@PE%m z_@4fQD)t%CXVt}JZWaXAXRV`E%1Y|FRz9pZ5`dyN4wkKybe)%;md?G9M=lgC&VSGb7IA_@xcMGFFB0y(RQcRz%pihuV_G%WR`K>YMSa zBjtHoRNdv60iBT5M;$3$*CX}xUjOlGSjYN2)k*DbVtP0s%GTbmRrfn>`^t(lVy&c& z`&uc-yIttp(Dm^zRHQ$s9m;FBrR0;J$Yb>>cl)~L{Tp<5h-P0~yT3<+Pc_U|4Ik2x z!r4LG<9=Y<5zSwXI8d1`9ZRVia`cM5?U2O3m)y0Yc@qqMBEP*nwSug=I){CW?=_1b zM0ba-kDs8bCF5>qv@e>u&4NHzgl>}04Kn4IFZf2)hVyO`Js_5A^@GFOT%-@L&6 z{Hm>wYqgOuzb(QRY7IBp!bcWNuM`e(Km zp6#E6t`R+8V${9VR4zfnYMzV2C0r~9aoTRA(ds2?uUjOlD=-Y%?#9l3ky;^tn zYUnf2e^{N@;PX%BZPdo%AS;gOLBq?FS>N849m%V91M_eG{aQw}V8r~^ZIUnr z%SEThUua5qOI!CYLHo%&Ea<$@bD#_3n*(W!P`Q2CsnlDmS3~Dz^&g))=ayX`xJd82 zR#${h2t6F1{5(8GHB#6qG{&(H_kYizFxUCJEoev8y5yLZ9K$UuEwAo%mpgY{v3ND~ zXE^G7!khV=c6`82tql9x{WV(9wXS?V#5eQMN8u>&Z=Y2=q8*4mt{rCfK`(%dVL;@>k*Jxbjz)#$zPHpSz~jZ{uO2_RRfx#t zorW@|8bnY3@`ijGzE^3L{qJcX_zV)q3R{9sk9&Txf@f1cB}>o!KzE1E3mqBnh5PJC zw#lyKo+419cS5w)M{QnH-ZRgng<9M9!Ln1AN%{(pv1Z%R8(RHf%YIcnb3VwZJI=hY zcJzRV=2&!dCu84gZ%Xwmz~b&^tV_`9tq&n5c68{F_~d7OsBzVvQp)lCcH{j^nzvgh zc@E`wiQv4>+K*)0ELFz+D#cCeVsUrq)lz2fqduf6M$w}kPw)aeuQu$w95=AhZK2b% zIIcbwx`qS{4G6~-hEW6^F^uk7`~GVXL@}1BZ<5b<52fMk2hjtfo3z&9KwM=98N!G~;o)jdhLw80zg#1h#CN<>H?gOz z(Tu+G`%&l=-42AS`ivp#qi$tpz=SAUD>P-5?$j!ElS0mTx9qtP zK1TQG?gsJuICsjGP}9t}2h#L!rc(57uRgf?TO8ysUQr9r6;+NEg>I7H1(u#_AB}Dzo zbJ?|JXKh42QY0#CIiiyQJw2(Zlh#4XY<=Js(`Q)#rYow?tb1g{J?v%M=zE^~GV7cgb*?C1C z(O%6yX>;7CMqi6w){00hbW+RLV6V;bDt#0y@Lvq>Y z&$vkK*SDt%i|VRVC$?Ig9(r8^6a#1_WkUHF$KMB@R-`G-}#9t8LFEmAODq?><$A_+acBhstrJBn( z7qNxt!ui*;x7L?os|rimIAgM%uNV6KqnZ8{ohf>1AsP;-B#$1fAQ!x`dS~>tREzGVbY%B=pNz2i7e_$<1DJOrG+x-K5P)ST6eLo4?vnnQu+a z*794XjF`fRnt_{>Fr~w~*0gv;b2`|01z}12MY+XSwAz&uwC219(Q~5DwEDsCnTt^5 z$?W9!Ccxq#(G^>r@cmR-rJUg=d!2TZ=&(EAla!`(JKD)J9DTG9dw(4uG2#eqoa`+J zkCe23b6d*J^A*drBI10D$sZYt$^#wFQ*v^Bn((oko|p2@OEFIQsV=WUY>CB9TFyBGcf@I4XI`1#Tt+X8e)(p6ZrZiK?;l^AdHx#h z*7gUQ<2%CWOc8;en(ughn53nA_*yH$-WfeII$?Ck{Ee-YGqm|DK4=k+I>1$93sVnv zqc`n_)9-uXqdX>hRGQ-A>9~`MZWQaV$EBv4wFjH-RftACGtzroDLTMoh2v9lQ#oqv z)04jN9trl3?+CvO^J=xZD~dpI1 zAotbrWOduaw8@^`QfJarG6LIBC0FiSNpd6h~BcagQ` z^--tR7o&1D;tA2{?s+e~d2My|Kx%o5?^&WJM<3n#=Ui=Ta0ofx*urSf90yCS8WB=GBGV%V#WDhkupMYSzxOX1Q1rGhEtIY8N@nm6yCNjvhzU_sA|S zEMF)k7jU%dTAw6!Ja8zT>HsW~S% zQLjqY^IAls)8~6+d{%TX_ADLe-=f2m8hi$|b9)|Y&Mazm^cf#lu{WD@mX7joFJsD1 z{{ZFD&6R300`~^^E$jpB>=z?8Q`ocHgf4#H%c*LRxUL^&zhm|1Z6aFPzji!H+h<&` zAh6tEc1x;i2AaTVzL!zGi~Yon7+T_agO(qSPz(IG>eo00UA(o9I*gdk2=x~N_X7~k zu}{rL_H`5c(ht5nh`G?+TOEDztWE4s4>qNYTdaEk=(er92B+CO*UtUjNXOn89d9u{ zi48Osn&-plUicIsO;dZ!Tb*Q>o8^QT>#+LsBYf`MfAbH06Q4WxtQx8A(4zly!uvl@ zZbhu&eTGo4ANmX4XTY;xM5EK^xIM79-G9S3ePRad9zax!C^fBhoSyj2x*xzdgm@32 zwU}F_?q7QV(|n^;P}ewf2Lbm3`0n|gzV<8uVYZ7$E?dS5bK$rN@sV%c+x(o3bj+gY z;?Ug>;v4waPLwuXpAe%5B&q+8t-FA#s%iVjzXcUkun7a~0J{bDo>9TVM8(2FMQlY8 zTLb|+5W8Cu^|k}fnK7{o3$Z(H>$cnfb&mM{zT@+M*Lv5w*R$uE*>TwJ>$9(!?fdnF zxK^hlze)G2Nt?@v%5=X%HBjG-{v#HMcUP~8u5?etR=db4kJ^?IG31o08ti!Z$n4O^ zOYESkmnk%RV0oePVie6Dz`arS?)67eZB0&{(Ah0&U}GbooF=I$y3 z5?nZX0t!O)*ibR#ZW%G{fTeOd8{HENJDw3OH>xs$(RiISZR~-Xa#6UW%zynp3!64v zy!}y3B1%K5(_5rs(5pm*&<#j z6RI> zp!qo1YGvJP`USgaF@omcpo);t*ShJ|?|W{uF&a^K0Q^pow%qE=$K}DNbjRiJTUt5n5OLV=SJebHKIV1n|i`elj#P% z8ASuYBUkmq>GVbYd*J_$f&F4nR4p>P3a>zxF_A2z;PAH0t#xCuner%f4HOG{+c#O~ zk7X&@drGh(9vIOtK9Fs0+Em==ZOMdFnw8?6Zj_Sen%rQh95|jj#we`-{}5F`E_ z4xnXVPnx!^cTu+aNm22}lB>a4L<#xp$ODhFyS67pvFU*v`^AV0z3Z_8@d4r!WiO;^ zyBqV#p2g+n?up4aT>G-`(`s1F0xd(;k48^?`R&uC<-GLx185{D6B8UdvzZh9L}cU| z8pDqw?omYIxA+6NWmsGg%P=>vj)y&I+S;`(`C&H~X;W=aGI|N_l}zr-t|eEuMpLdv zUXnmwl52rloq$&j9fihdQJ=e=EhjhR?xo|tV=LTSdK1^Q8c)4ag?CF2X6PcAtE>6> zos+eA$(l9!jhJydngv=0_C#-GYWeV!ODpr+d7mVAsojRvz0}<5A{c=xLbW)_C3wr3 zrTMbUw-{;!ssZkyrtSTnk2_5*$QMyPHOd5P1olMVeED>Yjq87sb)TYI#=mKd+5T+9 zEWahx1o|#Omm;iPZg;kV-i%@^%%jzaS-Y0%RWAK@hKoCkvew2xW)V}&=v8O<{_h68 zbcd&UcDg6x7IX$RKd)IdT90V^U0+KP8(s6Vz%9eA74c{Qs0lQudgK&++U)PTq(Vbe&=<~%6 z)eoJrHL}ncxbL`E*b~jK9g>?pI_<&M(e=P&!ZR(o5x zv7KcGvCr0fNo0;GKK3O3pXp6CS_TS&ZTBE!f1PMn#Ht@%?oBnNc6Z>9bF^0s0HYTU z|D=DV_pP;yTkco=dsg-yyJ)dKiu41|$)eWFjQgiXvWIl8P(?_Jwy*Gx&(sgxf_{N2 zLeFp+^Sl@So5z?yXLqP~l;IrnyCNQs1Ec9p!?)Y!MHe-0J2FUlM~{AiuAyo9FNT?~ z$K~Qah1Da+qg5lyn-_@S=hvtW z?kRSLd9YvfP7ot-Z|Q5zeKfK0l|7&PMBOXY5A|H#n{`es>UM{@J!zrr748Wt1-MCZ@#WVMrfSnCcMie;SJ6eo(!xoxCUo`4cU z^*$ehl`ZHRs$~p4&|2=RaE`gzUSYfLM2inCe;F&OU(^B~Yv6eFZxrcAebNt|^y4zU?|+r~z901iqv;8tn7_Prv>6K~Tf$ao3#b&D zc3>3A#D{O@6OI`S^BTdNm5GLk7bwcz*D_(U<;O?K2mOXe=hsDg|f@ia99xV42hf zV)NZ=V#f@s*aH1P%Ru9xFNUNfh`nwZB9bb$uwV2Gj3)Ql)mKjHzE_;t&{dHM%)GOl zixVHSzA#^IYkAV&65T_l&bc9Wz3s|cH;ocvzJq8Pn55KCsQS_MV`JGb@};)E<38f>tTN(@^-ewW1(!RQWs$bk zG8pbVx`t{QReINyEvn|0kMrMG!~-L$`wSHa8+z!7UeS=Q2cCDl9w-*{ z)#;I;GTAX+Y}~$9(GTo`D8_uC{~Hg#opzDyI@h8!~2plgf$Vl=G;O?7<* z8@3kF^t6Nmfm&DcekXD9as^?T%|&%Gx8uyy>e8ETdiGHwzVFjVY={z;`b0DiO*^`> zo;gTwDqLuW8*V|%K;xiV&eh9JrE&*}vDwFPY}LE&Cw+IDXi=KRK;xh~yUj6K(*#5H=pRxKlKVrB17opPH)C<3?S+T&*U{unO`(Yqp45lwUUDCzB5 z!qyx@UV_emt-Okd7%X;_u&i^aY4$GL^n3*#m@IFXP$1A2&>X0S<#j)=uGLOhEd%`m z$4k_6GGkePt837|23J~oKQ|>LzoBPpj5tL4@$mmwKgRFMY3xodXvRHz}jXR>iA$vGpfAv4eD-G1I5-pHJMw{_UF1Vkx6<%qz3pZarBk zy0(}Psu962Ht01v{%^L8xgqAb^i}r3X~z8d4cOfGqxq3Vd0D4*;p_+9Eip?~GvRqo zPmO-jI_pWZAh56D9}BWijfb)C6s<<|cwS#W*~Hc`lf7cb>tE`l(QkExwITuYXu6A5 znBg^Wy{|Rf#taf$r5<`~j1LWCmQ^aKPR4(bURBR#gppa6on*s24vc1&FGb>bcucfr z=CD01sAW1^I6F|$4?NSDN7IUnwX@Lb>or(wI&#da@hsq(rZ2LY*Rgx0A2Gf-kYis( z(%e|Ui$Sa+T}|wXj-yK@y=#&K|8$$y(}yYq%*j`;bTESNL^EmqJ8!k^fzPRRUDzA? zR}HgY%!)CZo)h=SnVgaxc>eS17}zi7xO9iRpUu1WG#mZ-k4TPLJYJi`p@)siGa@qU zGF%?5@GdmO(YQnZeqctA(Q1Bv)tK-7m@<0H+B+?O%`;jBMX{@N1@So42y?BA=8%Go zdCzn1yj|i|{n+GamOui5d8T?Co^xi2s_DKwdm^nTGqAJx9#Dx{Dwi>r#XMTm-Uf~m zV|^O&YAc*LZo$mkf7~A3cW^W-zQyuBYUIp^B0?+6m)vwyY7KafP;po<%kCcD%P_~K zCz<0rMUiDXpXXgr$+mH?aBns3+4?7<-X>4JZ@rqI;~1E$)9>nRX|ZmSAMbbGT~Px( zS9lJoBE>0}40-Ru_y2HFY7KDT1Db`3sDgA%);DpRJLi&(i@Wl{bJYlJrDofA{A$Vo zS4W<$$|Htb-j4_qKg}iCeR?a0SvbwXqHOyrW!s6AZDan5*|r+diL&i^r}i+<_8IJU zwpg+A@k?VrWx|+kV^*wbi*JRMuNIxi}KR_9MG0Nz1e=!1& zkJgB9)K|_cG@Z3;x{l$VU}maj^g*w>$+oX2vZo&DiUD9ItY-9H6jA;DMAoo+x{^C% z=B-AYf7V3K*x8kZ{-p+(lcNogz0w#9UQT2SJ<}QP31;-_7zaKMk%Q*jvYIE?E60In z0W)v<_Q1G));aEj-(LKaZCf*JY^A%-7AHpMG(S3N$vK;k4UuD#znN=MMvvJx=I5As z(@KST5192b{vwUmnZPUsvtl)4DRwwPq?F4LX;d49tuSB4ES%OPpV341jl3ahEbYo( zM#hK_cYm6PwM$a+Xw2bg#vw(VrHD5afjKfpV@^$Vug^Qnh57yy3GUt42LA|A{&F#K zlYZg&CSQ#(e`_pb7QGZ17u7ipomse8-o{wuk;>=a_1J5I~Snb88d9moiV4T zc@r+V?!0_;VcD#mhdjUH0c*T`uozvftZ2VwhmxzS`FT&7F2YT2 zGTqKo$&&ptb?V6*Ewjk#_pU2Ph)0f@x2EN-P+lgqc9RRY+)?s# z%*k?OSfnOZ{SY zuSPtjy>g+wszrN+t#Gf<14tmr07_>XK<^KW^bfhBthqjB_v&9%rEF8o!G+q2P?~p# z5d*;hFj~`szIQUGtqK%2G^-Iadh`H{CarBh$s8wb`gihWSk0HbqMnqr(THOjhHoThcmu}Ob^?}_OhJ;Pysj)Jg!cTwhAZ(!z3 zi}cu;`tCY!P4Sc)^l4U*)fgBiEMIX%4^Y)0@3LsGPR|P^TV}qXEzEA2jrn~XX!Q#< z!uiKq{hJ@HWKPebXbU)ox>u7^H|mSU6H~Uo^aG>Sh(=rTu>Q-+i_-KauEK~aO#JFD zzELKGGJ$7=zJ$3g59_{3kWJP03o^DY05LtH)uer;@tDwZ8Qw>XKr-A!d4p}*|2hA49iZ{0;;gQc71A0jnSD-UV>ww zm#F&jVR{4oT9~b|@-Hbu(Lpt$ISr5M>(3h78YYTB5ke_aBep%C;ngRq$^Y0AMmu$S zWn`^8j6Js6($wO+jn!WM%!`f#j}VU>_mE~tpI*lv*LuXh#;bCN?t>nrX;=SCU`^V; zVP_WwDz=0XuLd}=oi4+fkJWvKjjp6G+3vt6-3a6;H)uUuBZ7?c+oIV4YsATa9{9Mf z@525iDZ*ALEFRADjnR*zn2WXcW8j|4Cd024Usc4Jqom+?KW#qgZpA0DB3mu`advcm zpQpzi3^%$SH3zRZZX}IkmbokFKB^QoTzJ$gL$vYPME{L7u+E!NBc8R| z<{dmEx54ROXOtq;Asmn1E}0+rxUA~Js?nSuJVHEj?1|RQtaH)4(Wx;%e#Tun@){Se z=(VmzvxCWdnd&8>WJ_^mOOt7>;s>?o>yOSxS#1gB1_g=gOQwtwRWlm#d~?(YY^B;# zzR+4?=_Y?(Xs45+IJj48MA$()8I@X?4=wM?(P2<=P>pDQ)R|*q?)p|d{K{RnrFF2l zwXZr$UAK*49S9y1$waj*@>x@z?;id{X_c5eRQ%&xmer+mrH;|~TxoGV#*e3;Rpkzk z1BFe~c64!-9xuxB0^{E(QiR7;Yip=@>Qt89A7l9?UQMbX-@Pxy-Mimr=NAnYH)@q- z6)3wyTS9Z9S*F5UZgsThS;yRDr*jSyS$Gkq{o11l6h_k*@;)?{zN25V=$u!TRv4`+ zPHVEI1vQVdPsh75G$gboRdJl}g~*ulM_HELYJ{ub6cJzHwlRrvDz#cfZtXAMeMn-d zOS&rVgRL-{vh9LBJ#f(*oc|p z?SrMpNHPHQ64VyTIqMCO^-pX``TpP}LrJNXd$y>N+Q=MnJn2ugRbKv|$qXfv!3Z29 z^M5yfo6OG2Lxl6Y@8T$}+@e7qjyWJY3ax+j?_zN{;;EQRGsAF;qAJi6)f#*ck+tvK z6&155dyg{3ijuJ(%)ae{6>U*-=eZQImLm3QY6KbyYKx}5IN4e5ew0OS9CpvZR`bl` zM4rCRqI3HsMP6tP?4GUVueqPZ)RXHJhe4m&GA>;FN^}=FNI&VGXwyUO+pjR( zf--@kqiMaC=a!{&)|8ct-B*kx;dwvN#?eDO+Pzb;8q!+&hQhn!h2?X)`=F7a$=oCt z57*0z`{d%}qALr@qi;Rs`w90L_KVh|>c`+I55*gL2btrpn{v%@Javp@-+J;#vn;Z| z`MTmIc;t9SXokY>>e733NqHqDk@c-VOiWu)Mi>LODQct&3;*dWe}v|iy@#!5A6AYK zL(__j(p$GNG#S->ihcK%!E;=tP5Nd>cHd{3Co@_p!o=8{F zrG2=(bYhVxQGK!(j*bR&ZuLxIvuUNd0sY<3yVRET#mdyIvK`ex-lzGM1NKz3euou( z2LFO-K4(4;(cCM$jL!(;rI5WgzW1gBI)@GO$H-&6m>9e_l_1N zt?uA|wCzan_m=jK=Xuquyj; zFKg8h{pbl9l>?0=vXvVfP=1hAMJR*pH(5X8{moQ|#%T9B4;yf3xK)JEfK`9R zFY%qpjv}xXj)9^>E3qw{;uW5!R}q#87K~-uh4({$`W6Jp8_=VlvnYqe<>aaneX}R{o_p zXfmp>oCtrv^kDIwGFJN5)`9hG_|%7@Dw)jVOK$Aft3jeR zWhNMb=Z)&Z4|?+og{sIIKfWZRq@Z}9gwQYXd~JTGRtfXEtFoecK6YSkN3AXV1sF zjvB#yt(kD2c_D1Y9gS~Y5y&x%$LPCWwygE?u`I+IG4yEyyXOCftzS+n#6qPD`h}XG z`{iP~ciHU5Ai7_n4!mso%{Vk{to4h)s!aG@tgp{#`nygB1p;M4jaXA_uGfs%!QNl~ z%AGNK0wq_eYj#l;x&qCCfZ^qcM7Hy?^yn99(=dv z#8D&gdf;`^w8-iiOykwKO>QUt((J^xZ5qz9ZQjf9{9sR13HT*apSiUaf4165u?+N! zqKOX1zUq^hW0K`wGSVSlf3VJhw;}z&j2+=Sl)l&o?t}LEvJo= zgC<(PDxqoLhc(jM_U*zx(UT0GUEC}6IGpyZ5Hee5zL4hXqkh<&j!wD#&qTIm?slfC z!Hk4y!rQJZUzjC>p;?R{6R+=FIf>0r+o|+K->BN%K!oM!!7rbC!0-yzK6FLjaWk6D z`Dd@vlcufz;2=-6nJ@O{{Un|EAS_P6a-TI1|WCD!7{9z{iH zt*|zi!~y>nJhJR9=KiLSxR$drtJ{3LA|dD~G%NmD7P-2y!Mn}AuSDP;qPEZsH@hOT z{EzZn&UnC3InXs!%NYD7w+yEzjl>f7l?XiY^k@A9-D%k+%G*eza@3NWzq#{+4qFv3 z$*E1{*P@c&`qgA+SfEf zJi1(r?IH<5N1=*%I*vAU90nZ+Zoz%WW1=rx7Z@cU&$DA+x&|u3f~r!q>2&L z(xs`fnW4|ne4Kzmvf98gChe+Z5npDB{PV)h&kz4!zgD?XBPuQ#Wv#5q+57*-uxbsC zfx1K0pF8`@$vy*ox{W%+rWKei9JHE7%88^uduWYD1Jbm%9m0fb9Zk-m)q2o2} z$gI=*$*5fyg?D|2{irp^=$BEl*h_P@m~ISphwkk>L_WRqK+FrEwUfbpX6}v>OTOh4 zr6>ZehE{uX>mtYOv5^_Cig|ZlGEqFso=0%Xcu{fGh==4pC&_(c!|oXn}R`dWtqhEWgBxU zQJlcWLqy*39^&hvt%~T-{c2?^8JnJ8wrTsXfoHUFxe;RS(~{ysi6ljIXhyC}Gg*cg zl7oKUH&AXI&kYkpL(7Wee6un(RksBVmM4xUi%7Sv-smO2oTiC~-AJ%|*? zZL}P=qOIUlFDUMV*3-1mY|+PSn)%FxO>_m5+mDvb*3}SwUglTEzz7_VG^!9uQPU-2 zXIjStc;u)3PwZv?=YfhXVFU^i ztvlHHj=9V^O~%n&WZZ(Dgi1xv)YXQYH;v6DKNf4x(UUMb>(Y;U<&)9E&pHeHOmvh_ zl|@}d^7qjk)d|%I&52fH51DClYVRPo=4r1);CSj7O)kv#zEmcU`6WHQV!uu|=NaK$ zqQn)drL;D;%57?xQD0u4%g1M}CEhgSLd`L{)lO(u}@I4a94jH-RGL zF)A;MJP~rO&wL{uir^)x$)LmF z8KIeBbt;fEFj=5qo)mPdU9%dpSes5(FZr;oDQnt1(E8t&Z!cHi2^6tvV4f7*g4%*T z(cec7PyV_am!jUUWHhTQuAEgn(#_g$_je80s`f#dW9*`cuM{z%(XV9Og8gDo^fkdp zMfk374W#Yyo-B50CHCOtK(TCa62n$l&!lOA7xQtqm9^zR*)B4)uv6X!Ye|1;f@(k1 zh{=z#^MLH$(ti6rB?4XS=A8;`M0kJUZmp)W>G_@oM3;O)L6uEgt7q zQ*QilCK=5N&u+<7e`adXF7sT~ZQ{wj%5naFX2ldVB$TNI^9^>tTo3lK{4)BBI&q~K z-~72TztsGBGDb{ltFwMJgRQNMd$rhzpgx%qsT8q=B8oM6o{U>ihp;D2TNj_7zjpTL zKZII~6BAgHxo!<-D+eVh=0xinbhYQD>*+jV!d13pZ*kVdcNiN>XAyNswWVDx?YL8Q zohNs?uC&5v)iPEjhp=;RG%l%<19b>JNtGh+%5lu0$Y15dOs#-Ktn=vP@Q3kZxOvx!(4{PUt?gu*b_bbc>_>Ww5A5)p#z_D7;eWOsXx}|2W2m<*dWc7k1*wZSt`$4iU`xFO9-zve%pw_3}Gf z@kh&4_d#3oo*ZNpx0%FjtQs}GNW4BT(Sg@Z59Iqi<{PnHquDmPf*660LhjS|zWGaZ zFCKpO0Ykq)*Fa~YH`T{qm_{w@!=IkJ#ZaT#kFqtUN5`@=Cw4G3!slZapW7Gm8c%3W z9Lfzkld3rJje>n9-^p#5=nA3~p$@4Lt{#hh`fqVGEUV*VE3_s2#n9KF{%NF#PVK@< zd{J!)`z2rwYlDZ0Q);QXJV5>JZuznvoiGALN7HW2ohCv_ zqgwo>QAM3*>upZOux(woD`Qi&;X_|x#0B#=i*B*?w^H=U)nnQ6Iy)4B!YfNFE?#t$ za%)Zg-ub?wQGI6i7enTGvJ%ca82Sv&IP~5mf}V8X3%6ZY)Cu=}eYvjUZE{tX-^(H_ zTeOd2*h5-~d{&|o@p4sP;oPzs^UR;5m=o0@2ir=gX*zdVdr#SddxbJZl>_q&$@O17 z`O%nr3=Ii23YChaC~Iz+8e5b9SMWZ=elc1-a(nmc@@MN(yyBNl3uE!`W<@sP{p909X{_5Wrvun8MyO+aA@TZTm&Cdi zY{}+&%n$`??=p&zY@scw;OBLujH0TSz))wFjjCSI&ge@5baq$L**(8NJ-gTn&j?9s;s|-- zQ?lWuPhsd{Si_{M+EmBU(&tnO_QbW)pS;$vR+B)Y_2GEx7(Mpv5D9VKQj~Y$s6%LdsuV2`9wdFY zOYxKqI)IXb!h-InY2BCfm5ujZ5myrXnu5i3v}Od7}cN4yqAJ zU)sr~b#uur@v0|cbeZS~;hbJv%(CivrxR`E)Nc;*Oy38JKw>MDFk1PmprhRBUrSE? za!=7gbiW6M`-?F93gW@9?R2MpP4%Ki3tb)xeZuexqWhstYT8!v#4MqeWa3|*h=!<+ z@vL|$X^yQbPwU$m`W{B0M$&AjkcM*O;NsH#;A5jj-7xWVcX{FDpQuEu^;bu$wUL#A z^T?^E?9D$4TL${_Rr2^TTGv5Y>oXZJJ5j53cfLebo~& z8f{V2TF8bnz^=ILIqs2xTkx3F<7oQtPWKFh^4;c0y)cfx;fvM z4fMPE85Sv*pPpbYu<#!pTcJQcn>$w&D7nn!+ue;K91|j?d1ia_tglCP+=3D6UR@!x ztkPtOI5leV0X$czk-Mq7?a{`S=4RG^ofpTAkayqD5gPp;wnC@;^WXBn5wurpuZ@sj zPSQ#RkBjAo_JYR}Ou@t$~|);qWyP)S(U zJD`<~28v6ALA#7UvcLba$eEvUy2r& z=)D07q#DtyY?^s{uEsL(vb&<37_E9@!Ie=yscX9k=fBJ{Obap+YDbG=q-yAlWZ@yx zOdpaQWGa1i0sHFd;b6SI5iPDz7KZvsYxd{A z&W{l}D4Oal^QIZC>8*QnQcjG(F>q{6+qJ8qo}0`viOdq668%zD&aQ>#dDR&io&1TM z0k@!w`d@o)v_3dY{GN~F71>fhG~3qvjjjidfwGC>Nndeo5vJd~XJ@`hYhYum`#$~H3v|D_n7}r7dn0lzQ(Y9#=<%jbtVEUJqKUOasPc4Ap71Y|*$(APK?_BJ zM46<@vmsUa{c&DoePJmmbSQV|rR1WM%JKg5>&yK`|5aQx`{%mspi6I2`1NYm@ue3F z*L#WIa(A2}dQrsg;{PV&7L-&JPgY znzI>%0AM|5F3d$xrrRt*9quqJ+>`nQW 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 literal 0 HcmV?d00001 diff --git a/src/gym/envs/robotics/assets/stls/fetch/elbow_flex_link_collision.stl b/src/gym/envs/robotics/assets/stls/fetch/elbow_flex_link_collision.stl new file mode 100644 index 0000000000000000000000000000000000000000..b0eea0777a10b5aad2e9237c888883944492c42e GIT binary patch literal 48684 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 Y6^UnB`j9>c*2o*^q3|852u5k(*OVf literal 0 HcmV?d00001 diff --git a/src/gym/envs/robotics/assets/stls/fetch/estop_link.stl b/src/gym/envs/robotics/assets/stls/fetch/estop_link.stl new file mode 100644 index 0000000000000000000000000000000000000000..f6d1c72e85f9b028b8a6026278a1d99f1035f353 GIT binary patch literal 386884 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

3LY3g5ftm+sAu)+lIF+#5fA{<0RKZ0ExPsVvm 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 literal 0 HcmV?d00001 diff --git a/src/gym/envs/robotics/assets/stls/fetch/forearm_roll_link_collision.stl b/src/gym/envs/robotics/assets/stls/fetch/forearm_roll_link_collision.stl new file mode 100644 index 0000000000000000000000000000000000000000..fe468c540639d27015b8859a235bc10ce931ab8e GIT binary patch literal 50084 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 literal 0 HcmV?d00001 diff --git a/src/gym/envs/robotics/assets/stls/fetch/gripper_link.stl b/src/gym/envs/robotics/assets/stls/fetch/gripper_link.stl new file mode 100644 index 0000000000000000000000000000000000000000..8a1487401a6b3f85edd115fd76419851d0001a6f GIT binary patch literal 75384 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 literal 0 HcmV?d00001 diff --git a/src/gym/envs/robotics/assets/stls/fetch/head_pan_link_collision.stl b/src/gym/envs/robotics/assets/stls/fetch/head_pan_link_collision.stl new file mode 100644 index 0000000000000000000000000000000000000000..c77b5b187257f0ca97da05b5222d6115e01eff09 GIT binary patch literal 105984 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

S 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 Nl1|_{uob2W`G1MO%DVsn literal 0 HcmV?d00001 diff --git a/src/gym/envs/robotics/assets/stls/fetch/l_wheel_link_collision.stl b/src/gym/envs/robotics/assets/stls/fetch/l_wheel_link_collision.stl new file mode 100644 index 0000000000000000000000000000000000000000..5c1752487efc163453d32996e667e63713a6a398 GIT binary patch literal 68684 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̇$TcOX!1UeAh3gtKRUaFsV;yT0MQ0B24b7**GlxsL)F7rUBS8+hJcObYG%4ft|HG6gR z(Y*Xg-DA9u?045i<7Ye^%b(6`z;E24%(XGjvIUIY(TX&j;3W&EKY_>z#6FlGaDrQ* zoWtX=+Fiw1;i}rk^uOwnFbClpPVkb2T}vR&0P)I!;8rL{Up=jUiKZ2n`)T%AM!;N( zYdFD6*53MD1ERYF!L3l9_~VM&-G-|lxDKa;-?3hSIU(0@f|o4p6#?<2^BwDY2ZCFn zoP4UdDwKH(IEP#XW-VO933Hj(N+K#a5Znr7I?)WjoOC{|hs6fU@)vKK&inAvL^=6n z%?T*;8GVY#O|YNJHJsoj3-^}*kpM)lL1uzmp}cr?ta^V5uB3K=GJn>0t=2yTUP)qCgFGhXNePpg02R!_?Zvq-Mt z1eQ6ST!(XgKxEopPwVGEa4VD#{&7W}{Sa4cBY^l4(@OJ#c_-JP587$szU?VLcPoqb z1ok1hh7*_z$@@{|A>~JbIN?BWE1rk;@(BC>z%mN24?E&q!wLMl=eIG<{EA(-`;|0~F zDE>;Q3bfQ$fY=P{GF;|A$bFn& ztHt3~HncT}Xq3>Z-S9W6&-@mK)tYtJ)JKWU{~v(eyeScp@}fk!DGUSrla1dJKo|w6OOUs1X-c)FAs04`3B>y5sn0D(25iH za=%t*ZB5MwC&&uvy_fE(F^BPHRYxCmhb3Ck4Ty$3%2OO@+b9*{*CY*EJ#{T8!WTC( zN{~V_`7m;qG>$~sCAq}TI*n8D!3nZLx~Owb;oc=Rf;4FLDItR>6c=d3YDQaUp{#0} z>?0bp0Iiz-n^Sx})6^7q{C|m!ImE%+jKBmLWlkEj;xQ!OX!rB`Fnn-=tdOqPE4x?* zzEcvUK`T!1bigTWdBEayWwfz=MK@hK-hlc0_lly|5G+Akf#Yhy&JV?<2T=w=8cv|R z#HW%tZbjnh!jtOJeFrRiFWG%?f~>H`Sa7eJIJ^;w(L1KbJGGf$om6_L;e#|hT$E?* zttRfAL*na^$?+S9U9yI4>7IfhEA(;TpXy?baqnQYGry}#TTig|O!7e*9xlpT+SC*$ zx?(Nq-1C(Beds0YzRh+YoFFUo@!QSD!tx;yh*G{S;|utt)w=d*XT*v$JY1AtE^jOn zb2b6u{qUgpZFMSX0bBi25M+fu(mie>Tm~aC#Pv`A`QT%4k`L1Ga8cg1CP-ZU1Bqb+ zW~!0kqhOK`PLLJ)NbqVW&V&a8;guza|Bk&?wKcUX8?hn{4;ST~yW5M}hmg3DE_&r> z@G(5e2Peo1eUNObyTbPew+p1!fSqW+D;MHibxdu4ndGY+&B)7|Vu z&rEPLqL*E^tZXCdf53Z$*%xK_APs&WoFLyO!tlWfvO;>&+15gfOU(yq(25hOro)I8 zC&&uvDN&t8wz>`}H;6usn+w;(W=89CFjt6JQ8~nrN6c>~)+}bdK{Td_hlTRue(lBI zr-KcGe5Xt~X&ediZ6Z>ngRGFg^QoDrncg8C(OiQvCwMxP=*yErWW(6(#tq8UJLBER zT&9r$yquLLdgXr+WQG1n#&jsrr9TXpg^ZECm1}soC{s^u_*n5@1X*E7B-?$QDc@XnNpRM3s{7OBVd3z8@8oiVyORRt1Bfs4<1?F{Id&fS)p9N z$0c=O54@7PM=!}F24tZ9f* z9#qaq|99?^2CX>3YofW9aDuFm=HG{zSoS)D7zy#^F+q9Zk{_yTbZY4!jU$o5M>OUE z4+~|oLixY*iZqS{wGtTe&vY1dmlI@#G?mj&A{r&s&|5Mn)7v#DQ;z&3P%sG6I1-fW zDGAaz67(L=|0c)^Y5F!(67)Tz6}`2EGJXFk3DP(c$?p}h+%;0p39>@k6>86lR9hd? zpcNyDGAb`6({IrsQ*on71CAnWfQ-p+WL?NtvEq1T$y|r zHIWl!h4eE>M~75fAJU)|C+MZFls-5?R!CC~H4!Q5E+>-TL}F!bq=Ul3aLEc~`ff}< z4C41+3yaKcgN?Stx2n6ic+UO;1APTQiD;BCESfK&T;raT$WgP2sU`YJpkNS>eBDK@ z2h9vCdbI^<@7SWEI3N2&6G0lZ;sm`IgLXgL62k{4$O>tv8>PgwJ`Uq6gP?gPTJeU`dhggVvl<61)WW#5EP!VnYodTfKutIlH7SENBJPEh-pGFGHJ@1mi3W>9MD-ep6J&*S!8m8p{05#j zbc_}MirSwJ63yCnHrimS`6&s~V7Q#{ifteoda!gvBa2p?AS?X;QN6JkW5tuQjDMVkvFP`A%Eyx zL0m7}JC$^h27PeicuXnLBQdqyygD^7HHWfjA|q(+biiNaYd;^`9m7eyhZOb2Nki3%=4Tyl2sVbl^%kQLHX;7hyM zh_zSf%qT(9pcN-F&Gr+mU*SnvR(A~_oFFTt)wAWr>#}%8m=T5#(x4S5(k!VYya%&+ zl!5ZFP$nysyZ>2AO#jOvR)!DKI1-y;ONnhy*@!F}qsPNSnXFJAGqI?+<(LkGAdMq& z<&1}zKY*nJeHgLg1X&^d3BL2~j^$zaAPrh^;_`+3V$(C0@}E99K~_l9_lR-%*8YPbLzFr;iY^dT9mS2L#+l#?pP=o1Ci$;ev=jPpKpmJ4eJo$*4#tz{SSY#Hv|4QUjtyNzfr zUl&WKp%oF_3ja^1x8RGq>ZOkw(p*;0?_?09;e`3jUHIrh`jB1C}cCA+8$OwZV4JS}8(A-nB2O93u+f`Yw`KDL=rCcLZ5M+h5 zgid3_O@+33`i`_N)(>6-j9Nk(9)^sh ztVn~YB?5gE4!fs%#o_wy>}A3FuNeZgPh(w81h+yTlp~6g&H0QT7vif$+|8XLuP9uk zJLY?>mZ^{X=edFC3dH$T2(m(g@(tdCIG#^`I&!$SE@vJi<@9?DjLD-0=hToit&Flc znBlZ~It1Iq(|6kI->(eO;)4rYF)Y$>0_EgBYWJ>PdfQTcwfp1qn8M;#7}A_Gr_@R5 zu~$1>ahJaJTp#U2?pp>y8cy&&QBg7Tl@Hr^ZX9)Q1CsVJFd%+_N%4v>Geao73Flt^Tqv{t=duC>MdN@cs=3Hsx(?s8Sx zK%Hwif%2LHF>3L}_{*0iH5TZb4|bQK#TKR@$SN)LSM;ta{9bL|cD-T6FsWx;p<`Ha z6}PE>uIabx-t(2*)TS(`> zE*d^A_1LSr91b$Qk;`KXzr3HmUO!r|jhs9AtSKG*^;`4nryYTq1jL#tW`bMsG$~5j z9&>bUd3iakL0QRP1m-UgW2`O}y`XkkhW$Abb$}QE1lMq)2$V;B((A|YE`aY*-FNH3H^d+ktF+M=@x1#wQ z(ip4HD_^SH#x#K3EuU$QKJ{}}88RWjh!tr#F&1J)uUx|~CxI9TKK=k7JS=X-Uv7q* zxr^=5henOo2WROj+g46~`JKPFjUm1Ko>?ereTY?-5_|M}BS-5cf#6pBO>Z+H(rnao zJc`k83=1`4MPYG*zd8;h03Zqiam|6?R{SM(xbtke4emReV=WsHW*UWKOlahN6~@=6 z+tm?1F*v4nsg$7StbEG4>v9VtR-J>JiAjqCEREqkz#^N2g!o$Df^_-(0pe9Cro4QW zd3vFo`>p?0v!{bJoG1WvaqmXrbr&Q)R-UI{%dy{@-rr1^tbq7uLVyS>j6}IP+x4Yu z(`rS9y#$>uw-eXA8d~;)RepE)HOIjQMyx2dP#%9R(W@sa+F`hQ8{N7B6_+uOr+L`uI>I zOD>R~jtv)QI^fu6cJ{yYYu`Myzaz>^uDK2|sWYUbsPEg*NC%})Q7Sjuq_5X=Y4uKO zh7Zzk0`HbdAJbl(y@lUL1t7ZZ%cZ?JZYH=D&jm$!_kEQ<`$uyv;^71RB*b??fk9$P zwjj#^kdK8A6glIX8nHUB3=}SYIA-XveY?J)QhjY@CHr?y8cu8iddQ*v;$T5M@6%_g z)Gb45YNvn6WTb-#ZiVGE?n!SEmla3)D{KC$=jo$qziujE5TxP6DDa`3?jt7O!ZDo7 zm)ZI-#aBCXyts+rR_KGuNm2ZsT-BY%{?L}xT%l)v-Uqsn`bHmhyz*!f1ixgR0PnU1_l**lo3*lZ2RWkBXmQ^7CF`dh z_w>G@ZM529GfV`x!gSodK2($&h2uoH!dyQZ(@D!aVwujZ3PHG$v5{ir#%4wdCKI=N zt=9i}-duCN^1$#x8cyT_I(?={@wg58INW=+zV}me?b#+X!L2Y>RI>Ox`c-;cs8_e3 zUU3a4oenwgTLT`Ig%W!U+V1AOLdCSiY(l2;~Gxzch_Ki1w3)VWj;<<(s=9e~}08v7j zWo=N`OmHjyI)Q+=n2jZKBw`}0~hy`RSzvO2-0u@<>a-c zY0HY~N9y;JgQotTf*>oLvC{7@?dw-*iiOD%N$Xdn;o%}dYgy16z^a-ntg5YPeky^l zq~SY1<>3wbm+<-weg(;^YDdn)D>40h%k?F#CJiUduf$k@*ayUN2ZCGiH)fzMftwRV zrb+tg3;QkneH5(ur%P^CE8cHwdW#Z%SzM`;?4rHZ>-1h|$4MO35%-t>qd{@ReJ5`|NQ|IlF98O}IH*`MNQ`DFVNO;Lb&Z6~EU4<{xlV`p^NrWy^|I3(t4H0&Ony zo7GFmWm#*=hiM~?Hj!!rCwMNvTk&N|$U>KE$PRbsn+R@&a=M!_>WBLHMP(V*j8MAiu zAFq0&YPsxVT$(TA|F1h=QERy37_L=}mkeKASX$mB>Rf|0g9t3ZhKGwXtJBVFlusR0y)dklxq+s$SoOv!cg9Ovt#~w&e0v z!v|@2xG3Lgc~jlB3v0HAW+4R@Dwk2>44;N+Xuk6H0AYP_IkQIhhBs5Nqc!s?} zhuR}$;FTQuuWJrkxQ2(z`$t7tun6uPdNNTj6nWZ6Ifcco_#0)4vfQteyrG8a6>yBx!iKC{v4} zC?jTdlQrCr>2>dvPC<|r`k)#EH%CIR)-i9Qp0i4EgCGqL7iDTOpyveQujVgxH~&jE z9u~JkIl1R-46V-{XnpD?wLYZbgt_$@0xeug=$+R<@65yERwz?H5AXamnXT6uF-Y37 z*i8L7C-|y5+`jkfx*i`EE?=px#+;MF;#TGr`o6FyT=n=v+j`g&=KH{W-4FdG?+JIF zc3Xcsx`SS5bVp;=fHaN-t?0pv>07*H@Fbzn=x8w!7%o|1j$F_0E>`@B>u{61wbwUy zdSHFkyo0e5N4sIzztU|z*q_tx8Qe%(ahCqz%Uo-Yu%5=w4{11oGTm~dC{HHN)K^dK zV=b^aA_YNK=!5nO73JT2rsW!O=y|09nze~AGp2(m(g z?s|eT_4H9PPwi}Cd1hy$k8)p7O5E;e@0T9-t}N0e^;g^G!kMBTxH_0-#wdA3%O+fb zz`9EsY`Zv-@T#&nHV27SgF4CK9p4HM{hf(Gnyj!qrvF+>G>gXaXaa<1kGGXSoMhUJiQ9@n`u3;G-TGJT&5P{*66_$VU>4bGa!~-!D2(ED?l21VNp0!5z zS=G-{`AvTlfizk1lM%4b38yT^XCG&|1E(ywh794#ceAc!-Ip+ZWf7?RH0Q1( zk^DvVAJR#-{QNE9&?a*UVz^|*YY(Ix>eW|Uu7vVGvYBckw?g^gOn33gs8=Py$I3U~ z68_$7uUDku1ox*Xs&^;3Nj|sTKKsI`i9~QKlncIrH{5Pw-R-y4OZJAgq$IQ@T*C>> z1!`Ad#VgKBru%cdzIj+V6Tz)erkxZ;+2^9`zx{Ddf8DH^QG%r5gn6eS`}X_#=|#u% zCa)Wt2yVsqci=Vie?#Q?AI{oez4s*WSt_4@nol}iUJ)Xl&t}v5wcc*w8cv{GZ0$)k z;WCbv&I6Gfi1DcqWQ8GJ{C-G1u?UH_t3zb5;B?xGEA6dZ!^1^+{laT%Y#JQtcLJg? z5Ytj2$O=R9U3fv=G#AH-t=5IeZwU{qeLZ6gAEe>oqI}HvUp0CcuAa96;xiDvQX$9+ zeZ*EuRQ=qL2#5`l=l1Qk=G$@2@Ie|LF3NA3q!r~XIHvXj;wunQsSsp^K00((M2!i! z&$(_3_!u(QsHAGGVVrBD`1X(o!AHpMtShpN!6USmg zWW>hI)`|_XXk5d?MfqMvPmwqX3FXfa83n}kfRqGTVMw1Ac!(B@aE>!~VTg=d_NU*~ zW!ViMq~YPB967v_&u7)wQub zR~bG?!^1_H)&}4t2N0Ej=$i^bR_KFjKAbL9UF6!xl3Hz#PlgZD@NiL1KEv|b-$fn) zVs9!0S)mWA`EU|2*hP+-pHYh(;GuC14;SU+6GHca7z{+)R0y)dkf`RvUQvLHoarL1 zbtYCbe2|8Ri!zP7;C(e9rUBuW3PD!rgK9ps3^iQjgyjL&7ZVy7K1jpEMVZE3igKsA zi>wJm!-**gvO*tJ^WltFF&BC8)d#=%N1-+{4G$M(I)w&bZE+X*i}>Q#A{BzHFeIw^ z_S2vH;q<33oc>(OPJHrno!FPq9yF}IhR5n9JiVw4;pw zKkV051Z~AubQTa93SG3;ZBxu3NP~Gr1j@9p4m%CSOUTTHFIp$3LXZ{uSgiyLtrDgq z3;3|yTyNbiD;PdV!^1_HP82AL4-g-3thX*tg&-^R@ms$7qD@*XkGn8#?=mjdda=e@ zBX`HW=_Yz+YHH!Rfcf?{L#Rk_$9^y^5WnwRZhg=`-XKWB36v>E;3nvSon+m8!i*A2Pd31e2|8Ri!$X1e6>Jy0b*z>1X-bv?S4(g?ys1; zcY#=1HN^V4;w{4mX?VCOC+F1*AOe86lnOys=)=!eS3J6oxqEKrC^!|4*p|EoAFc}rT1sU3VfY{o4;SU+di4s3B0!W)g&-^R;ptmPbU%Z&Jx|FJ zvPFlS+8?{q8vO^I}veP|P-wWCuc@H!W)MrE4dp%v+R+gK?g4JQnFM?cYi z4xV~B55$x49-4be`SIFtI1uRH-KAl|_V2p$%<;wK|uH7a1ap60rnmbq9p)7dDbd5=RS zt0>!`H`oom+C%8o(26viz!*|*2d~6HEy)YDWN|9BgshOD8lxx&p*Oe${l`b>Ke&d6 zi*=V;2}P+6E2-uFIA$H;J;OwBD#5b%lHVXm!^1_HT5afSf!GB^{!|FELLXFP6y={@ zu$MaRt+o67KF0bkX?VEivmakeR+TThRMuW!Ze$|375}{voE`ieBHLaWq^~Kf7;`nx zUA08PeGQFM9idYjh*+4J;>@d%+DI%ph<)u7Af9erth>~CZsi&ru@Yg7Uh@Tup%UBO zWQ%^Dg;@fkMQPg#kl#ngLUdli0m=fUDDmAfl z@0w!yj7Fwf39qH?fjQ@b9ePeDVa&XE?IQwbUi1qkMF}ZWO?r&qr)RG1Vj{Q|rip4L zv~c-dWWi!5_0eT~4T3bBK$(8iq$sfvtK}7)~DG0JcA5<$9Ww29e`RC;f^0-qL zgCGqL7iId*7o7Krcac2@6_gpSXH7wn75boB3H^tki&XbllIhM~H&zWu!^1_HP9(vb ztU!ze!Zj6wtk4J5N*FU(T;%Fs>&m$^qYWRV;o+j3eEzB!5DS1&MMtRIJ( z32w!IuL>m?94Qk&g<1prTA6;yieDG~det1O#Umo+x&vX>?Td4mV#NuRlUHkh1L80c z4^tt?3VkH+pXVJJDZ3ACX1%_2yWxX0JY1A%O%`ei5WfN8u`DG)R_KFv`xRw15N%5P zSs#4NWaSzjF3Pkf3vD70nSmIW3PDyF5}jIr(Q8zs-1#Vv^^kuB!v|@2xG2+_EG&xx z@fnB~YD$8v&K4@QW9i^KIm)*lJ-ya)eI0_4CvcjQLNtf9mR`DJBp;?;bQqG?9oKN0Brj8Xm6sS6f9N-`8*co=3WOHWS>6|AG%naF&}~6t&3K+2L2% zc!rvOw~swFt#ZTbL+)p7-+M&q>eL~|c?Qxr63Jt@S4CZ9`|u$Bm0JT7f#H%Bjv10y z&u;-S28eG!aE&8DV@7yec0q_-o+XFgAh&%)MqwdMR^~5i91zWbC=CSHI1)6!Qk2&4 zMGf!P)fU{fgXxPxnyj!M)7Pvh-QfGkd;g#I&ED-c_%xail< zl{0*hh7%~$j0|3#1|qw+i=OFxN`kD=2d(HS%5@;p1eMlT1r{)TkcNkgGR?@~HCiC@ z0P#mE1X-aETA75MI2dKD9$rhYvGS!c_8|=q7iF4}!Eg0}=nh1|R0y&{AGE>>zq9~i zaLYFO@wPJzAEe>oqD(U~XiI>Y3dHGD2(m&Sv{DSQnhYbEz|Q(W<%H=MBRpL5Ty0_F z5wiN_>iVRN=HHlbt35M4Y--QJ;-xXWJDh$}?5Msz@|VTl#@z|@+j%^zM8DNXncg&k zT>$N1Y%w4v0MU3(4co&B57ZZ5n_1>`u3^go-oc!T?UX&w>@>kW$J{kM@$d!w{H69kv1#>#u zw;Q+XZ%D@p@WC~lFz3~t?^S#~`}@d=znKYcWsX&v4#WLQbn%fh*LZ7O!->KrYuH|| zzNhxwhvlKU)Y2R7swHdx;U~WV|!wIvG z4I3=-z{89BlZ;LhQ=4OcM$zecpixVfr_Cr99SgKf9Rl|eo_nWubip;5m4!a&qfcd% zrAL;RT!ZzB2u#z~9T~)7<8<`FHrZslA{peYKTDbjZpC8@Gy3oEb&o+=<%`7?OzGeR zro(kj261B>u6R8uTuXmgz)cn|S=&T#E1rjNXU+aH`qQ3n@^Z~OrrdQT=nfF*YrT5O z>(_?qJ=QMQv0k13l2KI1)WkAwO%2=X;1BA7+Cdhq#}R=};zeOxBg^?^xEwnijutH_ zq;m}?@av+x{GnI#8ZGCx{LOZ%%6=OsxE0FuvIpEoa>*i>ho+a6Z(i5=x6SJ=_XqpV z#e2ayfaUs{kl{MlaDsm~@XPyG!{t3sPrae*M;j-&6^|i|+ne^1u@ipN|GGO)=NeA% zZyruMLCTj!?XykuUu5G1x5EEZOQa|nzrEKdzb`LO*31Uwp8VzTFUnl6D!+NJulZPB zM%B({swJG@c?dPJXEwPXe)qHWVn!3et@u}C5VG)47HdJP+Y~``2dj zsozfh-|n|f1h?YfCcJ+RHL=9aVfxK=%XO~d1h1irQujdnSZH@OXm=&o@H&PqAKkGA ztpr^|Zb|n%iPC!L3kE_EEjpY3~|9bOVBa+n86>mT=#& z@0_oX&vS^?UI!nX;5h=bRJS}nWx&TM2ZCGi9D%bRo0rDD@8qK$_`}<%SJcYz7-CzJ z+%jYjKeel0KOe2?B5$KDAq^+Y=}79;H0ae#1h>L5JcR^nWa%gQ!U#Zv5rE_xPM}OD zv(bYRouOSlS$dJDK~N9LdjkxKZqaWlT z$!M=c-{0gRH{`Ex#ELXLTqNk0BRID-V77Ob%^q@U5*yw9K_ zp-Czt(rF$v2_gDk_j=a*y4F7Z{`;NJ=X|{FXI<-F>lxN?ulu_0-t8}|_5bsK{fa8J zW%N72@?!b^x})bs_k7ne-Rr9ycjA;H;Z4I+>AVU}T{ZTZVB`;9uixC|BG+G3EKusM zuZqOqmhI!;e&nBUz=p!1Al@JPXnOFfqk;VHu)T5c>$+}X&3k@w{yDoG5HGteqeFk> z`EH%lgARWb(TJV3x3r$Vbafy$?*BBso@-L-V9(-l%?tbZ3p>3Z@Rfnz^w9Ml8a@0; zu1TqdjZ4HAO}NJY&mu2m>x|%faUo$DNJeU*O8~kiIDO;GGbXY&ynZx zYUdgjTB$|d)803D=D9a*jOKMHrt3PRSgr8%9?P_iHmg4f*00*Ee|IhX9G>}a3*U&I z>v4^be?2KF)&+_G>)-gBdvTA~0%`5Y3u3hD&x&4n@WpHVGqx4?<-HLEo}_zd^x-Fy zw)b$AQcDFf_w3W~yH5T{f7^R^xV`_{8f`Aw*R9j`v(&cB_6DVzUhlf|4?US%epTSi z?5BTU^ua!~>ZhY#7`)m@`PX-Uh$ za|44;33^cLk%CBd9xw;3x*mu==*L|^a4AOTem`E<^mmPxrx4+t|87IK&_;A$Ga-KR zg9TBqOqLV3=3 zhveA=c&EYzHOA||M<4x&R{b{XA8*3IKJmrhHqX3?p?(twC|A&Vb&saHcD+R2p5Xbf zXE{opd39;;^;y@%oxUjI%U|S*l)&@QzvcNqd2(|~(6_u=2+zEH>2_YR>zc-cOSiNT z&m9^pZ+B4s%&RQ4Qo(O$>v#9=iwgUuE?4R@_8hTy{h&+qyF1~MLuggU3uicUPv-f< z7PasgA#a9^gY}n`L@9m~4-`4u>s~tFuQ(@ko6USTC8c&WS(oB(kiRaaPVc_YeWhr= ze<$t$BfL*$>6R>Qv(Lfzp?@de$B%2@4RLq0H^j(m*lKZ68>fBD= z6FvI)uXx8Jdd?y4g1)12-+<7+lXv%xptL9BRU_}T*t~r*`dA3ANhv%Jm!3zqUPj|y z$-Ap(RHd%0-_DEMHub;AX&LuAGDeTak9F@QqmR7p+MaErNA0?iyoo)3cqAQ>ncJ zTSR`5e1A%pi9x+DN(9owmW_v7>jYju;JvEUELvVD-=F(k!;letuk01Tn(tafmz|dH ze>(V@G$XiPdzJCy?QQ%M-`Dl0+8kh660>OS{3~tX8W?T z2!`)0?2ek$LDmVu%m<3Q6*n~1e_#Ia*%;wA9=yX}@!lO_lTOp!ryJg^XRrMH!>J>a zC&&z!p0w@HRIy68=)doL^j)knaCcq0yL$AIXUns*{kCHb=hGTaMrXZ-qqfUCrr&8< z&*3e>2#t~2$A}$qDKnlscy9|JobgAzxAtG-Pb)k);!=2zb-m_2CL3ESHS^>N&cqXB z>v%Q}J^yTLm3rXvCf*8+CCi7kwh-4=c~Y-rR*d^ro@^G48K=UC=whrB+rE9o!>F&{ zY8mxuT#=bUW;i`FDD~>=Q^VUYZ|e7byS2}25jFX|jkNvW0{uFcF*dWDmn2YtEAJmb*FV9i%b9jWNKnbi`{MFm=z8CTG% zs(ZV;8}U3&AFkI|*(+?1YeLUIXc{lYTD0SnXUF%A$dNUJlX~Xdu=n7mq4Z<(PsPH0 zEzZ%udp}+kGtQooef;;ZTAEejL^S4}-uexnzjjwpxkX3)yYFA8h5pE{`aQ0(sW=cX zF1^y9gYRSexrZVy#pt?zTm601xmE#TR(&C@`qHxMqF6~X#{c)wWvg8$~QfJ%{2HoGkBfR^@DRGscbV|O|E1jFe zb5<`+%kQrroEUC@txQT*gEfDdgnnE=2_LTZKZ+)<>rsrLVRxQ11QCjvg zTkpOxG^HGBRZ9Al?T1JGNKwyqDMlyvsw?iU+$(c`bSZP+G@ARQ)U3Iu#ZPr_8q2@t zjSJ+BGrNgEb{J-t5y;<^YKeCW`@wkpA75nF40^@ND_KS>)%ZWv;w3q|qTigx@hu;g zl(#y#qFUq38?Nn{uON`G0PofO!twX2UVP=UvKE5t<<=_oY`J3E#>&xdJn#7TdM*9l z`KgfYjjnSjkXfSokxO7>$nwvkAHQf6FTJ5!EG?21vaEgB2G^w2uaiEHhON$xe~GHu zts;Aj)+-rVS;n-o3}uC6MmW7I;@y%`ZMv0+r}e+aZ~d<4@(jtlZH$Y0rHbaplf9<7e1#F$H|eLxlDAv5PAOG8?Z-9RHt-KEd)DPEquTb-rTPu2q*qL*=GuYF zTgF3PY2ttXd^-;_jzsVd&i@Q@;^2w;{-3`#_qY_>uo2JxJSct~ zW8!P)_wrus-d~T2*F1T*!=)Il)JOLYjOXKv@;?5r*X^NxvfFa zzf_}ptg7JJHhT3R9WTJhP^8wgUXSj>rBy-U>t{Hog#ooNEiJ?s^~M?D)9`-$F=K+? zZNrOcnGH((I^4ap(MzqRPwg%p=Z-qQy0!fM^aCSY^t@!T@Gj*cX`)gmJLRnTliA>KAc)F4~C7w4Jt+0*LweK8RuVFeXSm^s(UxOT(6Dj+PPe~ z63^p5gYzszza#5qq)x57Y@*dCrADFWOJL(5dd@bu=WGviRD5srAJ{na;_?1BLwf{L zZ=?5abPxP@K_K_4TjL?_6U~?Czkl|p+^bioOo^vq)mL=xj`W&Ylk`*Tz4tE5x6mX` z{(gLQ4}2eUrrxf-24C+#88U)B2(}NvAVNW~FN4wliriKFP%i&UL8KR4{x=XgzmAR1 z!i>|m_^T0@Vh@Y$lc@`Y2gINP2rgx}Y6SW*2Vc}Y^ux40ptkE4+O2v8>noXYWPN4U zRDrCic$Tr}kGNO)cuk|6_`_w&LU1X29^7%fYCL8_<9N~OpG9ngOUZm9^NP$bO1)Qc zTwEVL|McVMy}14;eczw&`hc@`^Jsl{_gpg58oS`%-F8!qks=1>_cgRjrXg$?mW$*!pL+gs9%V9ykzl`7qCc>D38E=iS zYEtUXve(D=0r7CohP0VK0-0IZ2HRFDABabRDB5s?RTtafnzHvQqPhuaVee8kw*txfS7qCCCkcwv?YZ5>G+f>Y_rx0Aq%&2-D z0q;kT3*&G8XdJf~(O&k0`i+yF7MB`1;YyjEgGtk-;Vr>#C>HOa*>h@ytVtMccK2bj zOKsF>e7p?rRqHalU4G6@A4}f8B2Ep5J)YP{Ef^l(FK@|;4_q$AXubxUDrpeuD0rBdrIx>)52ej_iEUn=KkuEEnS(< zi=S1)ojs|pE92lFwJvmfomE@^eZqkA(JJvwJcWBDo(V>Zwzf|$Lu9nL?>sDPj;&j(W4EgRf|5^0o={Z+rdY+b^7wP?tBYo<0 zQBSwtuG4it_B6T#{rK$4v;F1h$Kh6<&sSb9T1@X6*Y$M^^nCIgN+Vi)-`zs64Mr<< z-N|D9r+6OM{c?@pCobd4GhgsRCzqd%{X7N%Q3<1HKOndiqvvicEq5W+rCUezLu_ov zTq`!XE`!#0fzcQfU#aO=gbnAW%dA$JXP%O0Zrd==!=vZnhzH6%14rH%^K4S`Y?K=D z%%jf3h4SN7&02W*d+vG?ewa}F-|#KAmftuNbc_eVc<5IgKjt1QlON}F{KxGvF;Dz3 z;r%;DX1v*FBMiY|6KQl`^E9R_=eNUc*g%7ivOES8DF?Y!$;P6t^0F{ z{J8$WsurUDrt`JEZGX?P&`R}eb;yG+BU)GDQvbaTC$+!l=#dsKKj*K9ex(22byHjP z+^k+BS-qOoT_EdSvlb1+*JHlgAX)F;rK)=`PRNNrAL;vi9$~)ofc!o(>cIwj9#YT6 z8>M@0PR26#O1!n^UhTo#{yg6HKk&A5+uKd9rr-8iO&S+?+uy@i`y3F}@zruE{%ZMa zR;pf^a=xrfoO&%S1l!|#h`saQRs4rr)r(*5@Qb&(Vm(*J@HdN;b1`4Jva-O;<5oWF zLjCtYU-`?y^O%(5&xMVx>&~@oFq&J4UF!W8=~hiET*mUGGQzg;9S~yU0U)>(`(bSx zjh9sMpJ>xGezVR_kL%)oV6~+Cgg&AlwcNivIZ^y^>Ijdom~&Nq{$;$M=FDq&l?v|Q zD*1ku=1sl%D_>8^iEG)FPdT4_KR|nK`%FBJZ-P&n>OE7&9ak~m-@3y_a4Fl1_vvGU z-P$u!M5RNxVNi&BhKi5uVdTbdbuX0zBsvp#qdR}s1S<42Wn6W*qEa!dVo^@uvf5x&i zGb4j5V+kX;wfF`LmGrj$ndd)t;{iF5*7r)rC_cM0c^k;mio9 zudofSNvUcLPWNX0ljraI>^tjxkn3f8c>J&a<(2)huD`>p9KX7zkbF5#`|jt9-$&j) zM^=Kvzo@AHUTAIYP^rHLm-n$k_Kvn~5$CQsM@9qZ_j&#@Cl^6(hKX_PsiMa|wN~w#`pj_lobK zQaB&f@eFc4Naq7`KB&(S$X}-YO-ilG?G(uwJd)ji1_r?J{iSGrq&{c<^86`B`$-`Om!><-i{uj@j#lh)DuZ0hcA&F zG7d`5rIhhm>Sypj2p1#u{~*|&_$s9)*^?;sezm*ZU+OjXJ8WeaWel|)yxTk!Si*fhB+>fjiUPjx9La9p8 zIXJbvwdUKF4L%=cdrEy!{b=|l&giEuEgao?ZXeyM+s5A$@H4k74MFvN`0wQ+IF2A>bJJ*95_u|f1w4a5P==o{j^PPfXO*JV$8?S70dmJ>Ba ztET2ZXd$>1pY|#>^YSKy-UwG0q3qkcdjLxo>d|54-Rgs(=I~;{(R#AFJQ0f=N z6y1cVmsW@=V#L)+Opz-wMT}M|*TW7HksKQk(ZMZY1lOe0!(ChYk5y{wf6$|yb*j&3 z8&P^pEC1xWdVa$Vc0Xn|>#m>2Ll-S@I6gqfGk6luFct9({A~Gj8gU1*d(rWbn4^wX z@#a>~_y63s#@+N)VSR?(`<&bquQKeIqDAv-d+ia0^ycCxECiRb?^W}Sxn3StWS8GC z+U5Jh_H0Dk8=867o}TZ2F{_eggVCjLd|LP8FZBRcvgTgJ^>MGvJqaX=(cG&*?v=T_ zW`*n*zrtUE9m^{Z9rJjt-u2~fdXMwNy`MVlO;Bo3p*(*XyaqK|-t9ho^H}X2s2l&9 zGSQfUL}PONgi-_c-r_$D#I(7MqStpMh?AvuroZ}TtoBUQ7(6hjyeEmcXfk&X{M6C; zc^YxwjlDvym(ez26CydD!H&K$B01RlpF?ieHU>7^*2<3L7>s_15BbCece`wZ5nK~S zpPVWF)3CAf?W;pB#VxUIgy_dy*!U0n!3eg;Xgz2Pu%#Plb=oGFA>%{#(yAejwj+j5V6r`L5HW5g{ng6%O{sk|Q>crTkdioaBjFTw1i_igo;Nc9jvb}b9Rt73aM@hTAT8hBlR;Ck7f zjliBWq&;VLe&v}H`%fK{ojcE2vnNar5?_%%F^ES`O zHlpF)?xDoVltP>gU!j$yYugt8w8Tc4=$&kPX$>#&K6(u=bBc~h)$4W>lbS_v&l!y; zxVT;19^ZMT`*ZwH8lM-6PdB}#q3aAkU!Tg9JDltCX|GakpKB7wKnx$A@_QYqu1nqY zx#u$asn4qEnsR2kXjMlbIs-AN0D^5W8guQ`67f7d^SRHa{Mqjx2xKMv_p`0sX~oY7 z<@W`b=ej#CJf_cU|LoTuHb%_Y6|MQDu|I2ZRSQA82`fe%qDFJSvxp9wa>-To-Yn{H@XToE9w2fz>A4`TQf9uqaq3oR}_Wi*b ze@=7Vk3K6;b0^RC^zWuy_F@INX+WO4@a0_p&Dx&dZsIb%2l#b#Kg*}ju~>-GtNmqg z#)%w%{Kj@ZpJy}LM%;;W1Nov3;M{=E2l(88(MsKc6Za>9Q1Dsu6}HDUWlv>%I+f9} zeC8y^k&_s_vwEK>?=aqyP4;N zCr>u;tKZp5A~Um3il3mj;Trw!wpmmg_iFF7Ht}=+)bp#)dL!g3Y>#WgSDTz|dvdmI z&ahK*vd$;qd|sbDqj%+uo)LWd&S;D!h`*B4*F%WEYEr12e1k#hN-eF}C_Wii>Lo-| z;dw+W5KYAhj-cYmDy6=48pZcwgqyq6jrZJCRga0~_qPfEGq{Q#2fdko*s^hR{dccz zlMrWj^UKE*fp}YIP1EYuP~zbp%WU>qjXmwwjU27jP35KA!FjG z@e{h9W!v@dId2RAVh0fK8U$Zq8(b5j+t3e*llc<;;46&a z{^8u<>305HtlJkaIxFs8?jpSkFT1u{$Z?%^EayW9I_h}Q-B(wRIRcXrT$56hdKLAD z)kh>uucG3Oaxnq~bN7fRlG^c<0Z;vLkHfQ&G!$qc7OJUTkEPN^SyZ1up}iXQ&F zM{InPf%qo7^?zD+rNPIWyM*Z_|CMvx;HI&iVdI`2E4}KY8pd7MH?|Nm2WIMJG&~bK zC;H_P!_vOOoJ@pix?qGU??sd{F{vTNq-q35wAyj6*J6+J4xZr4*yEVGQnIgk@vj@? z**Fip(Kj%=7f1F!*;cvKDjoOAXxqlJz7zbHaEB|r-!1I@pM*tM^5GBC%#SlW3n$^k zJq5%XAnF6b)){Rheu+l-_hQ_w{CE41>t%%PnfM+EnFkL7!KK*yVI$hCe$$n`+M9^2 z4g9n9Nq*nD6GM)awPR8xw)Sz{U5TwVrBV`g%TcU$-0Q(4e%F=wU9O7}Tod9f(W+JW zYNb_tgjdvape?NCy+~ewdbU#`j7!xw0+?cy{L_wP_qw($z0ODC7P5{9+ zxD=x?wvP&fI=EL7zsuG+*16)AC(|+#-O)y3oee@q{PGo!{^gp$CHvq-7f&#HzQ~Ap z-|pi2yBoT@PiXwDf%scrI8ihu-{7U6j)09et6m9&;kIw-g!r3J=1F{F(5}UZOyshT zr?wHsryq+?-+1VC+^bo6>o^m$Zr7_DrEY?U9&xX+oR}C-d?@@OvwGFz2ctC;NlpP` z!$gujfUcMAaZT8zmcP_nj-C(MJUD)B&}2Qzv>!YmG>oA@7(;wVFdI}@>^+R0pLXr= z_|TfWbezPyqeg@uO<${jPp{QKBU~THH~ApLnAqr$s)K< zY!B<*NmIP`XXV5%{&}&5;GQ!Yv)cW6vCQX#F8wfVVuu`JOX}6+%cXCY)j(>vdpSH_ zWB-U!5^3SYX6;8M?hn8ZfjcAyS+6Na7Xbpkt+5xoAiqb8RjMz}Y=+Kz}3e(bHm z$?mSxMu($+?HFM}T!pVz5FBB~2(Ag-a6|(3f{kAg3CLHtUOT$YAi{zOF2%N!Sm*oE zDv5O-kVHYJB?_8bWg|>HbtLiBe1#*Ixu$G%bXYJtnoHSx=P}q1A}UPp2iJCMrT2ri z=azDLKgjz;_{b3D4G*N(2CZ88`sJa_uX{H9o{6W{5#PpMDv9!LsJg_@Vjf)naWS6} zY|pkKh}8x$^)FxBSU0b%%LuMXsjmkDFLH@~N9!#wZ^eS!Js)}B74cH^ zV`bw~7J}=w`*A%GPXn`sihhqB+hW-^6JL5~sb( z+bSM};JYn7T;oj$#G9bhluga!ndnEEewF;!@2Ica`^VH;ndhNfXxq322w7Q{D}dlq zcQ>yoV`MO7rmz7ojn9ea1JU5ZT+0TRGG38Dye(L_&nX{P#maJA?FE#EHCv-8JCZU*APFK0we5Jy(7_#}V&Cs*iQL*JWkayfF{j#htT>^V_o z*cdo5-$JlG+s0-f&ifaHv5}VOct+#I9SDh_6B}F?$LVuxl`=Log4@oe7_C%A#ObfV zyIU4<`suT~>K)bvdq!HGBCbiPTi{!ok8f~2d`paAe-cOeV;%%U;Rzswp}+`c5-?h+ z&rep>JFjoVsyfr5F4j~H^En! z)4(+)(dvjj_jV#$o%_Ll9}{8jB+=>;-!A-*zkuK?%x~bDz&E&fP&^0o$GKk&h#0{> zna*Rc)APz{1Mh=RrY;az^?85pvk~l{VRSYk-jj%UZaaH%*tSw75JN9E@_^t{Y{N#> zziV{-40^t&(x_$7Xa9v!A(MoyFC~f0VtCy^Pum_55E7cl^mtdnHp8uy_ zTm!y7zQQ)RrsQ7Thx0+XSEh%WyJGHcAkW|2t8}7YB3zla7~6#_!&m;r*QaYr_&A7M z4zDYKU_K6`v#Kg#K~)vDXP&ucC1u~Mh~6vRUhapDFx;g`xJ!J+ykmjzn9O&sbzib? zVnlDEF2!iJmyAC6KBB`IOSoQs&bAHnMMd&OF@o!5bTXD;^oeR?^f6y&AfpVwB{o97 z^Hpe-eCLedQfyDD4sNGd*aPLqmyDV1bVuGrdL6XuQ0efjzdPvP^QQlT5sukT?8jwR z5~H)y4b5`NBI1&11efC0;!QkpW&9ZSA7Rz9F|)HKjA^g;R9jnA z4$rOBPWyTr=2i+3FS_pXcpkow6+Drcp zxaa0HLwgdS4ztXcbG4}YSA}D~i+q2$CZ&o3Av^k-K=2htustY+fQbZdxF-xy=A{}Y zk|S(T-svUWC1EuRcZo|eOUy>3PYl&Nme)6|un=sIS+vRC`AyhZhQ0Fz?`gfIRP{mi z9o{eVY5@H6uO{l?lrhPOsUf#w?^o&mm$?yonDs)A|p$&ry3f=eMn zNFv>IthcL;{A0dP*DR zmQa-DvKn+TY0&8_Ji~EKS$(+pKIp@7UFKX(v)ve-XwZrNRT>&}T#C_#`yPs#ol+~7 zzUe+tBtNb`rgCJW(nG`!rrCdG`^Zf6XH3zbq3EKR*h*2eT_wjg|C>?S9vypIak#+;iNh_eU0Vxm9H?u9Rm6RYalBx_^VHGBJH=N z{%=L&`S1wWKl2F-!KK(9cy}+?iXXYGL0tc~PlRKlTP0pi_8PEXL&sT0#7fB`xb5~g z2o=EyDuS_55zKziU?u3^Mny1NlTy{syf`kkqi#H=#B}eOYdY&$ZF#*HGD-;gPP09w z{uq@Tw_4jIKIgYZ7J^H0|KM*A8^_-~TtBWk^?3`yrR<)IZ|PyogLlHW#I52|wr?r) z#>gBME&sTGW;W2HD6>J$92JPtgHr30SuK)Tjq73$X&Bw@pk<=D}tWZYv;|Ey)P33BIL97y2P=46Wb7vcdJPV>Sf+f1`(fWJ!x;?=az+`= zeZp=cb&fAeAv>?V#A5w&DMmxN1&CD!!B@B+Hsf&no9}z`;5GQ_`F_56&WN_g(FpH^z}S2J!89OSWJQC+`&_xRlMpHt&^3@0I3foBNX@ma(>tlhOBPdlK){ z?aF?B>G#I!mTYM}&}x<8c{-vynN_FsMV(S+0nB$Y+qhiHoKxwTXRKrr&ZtkEQC%0K zIo?aD^Ln=O7NS*ahYj)h3Ny>uo>D##(houK6-IFXvfOZwxZ#=`Y@)6;XV@?&okX?H zFeiOsPMY`&N1`nZi_#I+Cq`{o?ug7?IGea`zc45Lo2o9f5M0XU#Qin!UC|fyhn~I0 zLU1XYcW2c1bU#caxg+X(+;;90?(SPx`-|{iExn?U|Ma7MTshVI>A-(8@#ebcHbc5_ z{Tuur;DM}Hbi2oh%H>Ar(O_b^7o3K9!*osG?tKnDF9Za%UflD5c%U-q=@_rBn)0>7 z2(Af!>gngX|G~=g=uKI6W++S)#HR{ZN;9vSk&QX3`RwqM3i)xv(sewe1F5;%Cc-on zR*K=~gb529`Vv};wK#MpOoXyte{#%>9a&>kfn!ny*0DH@w%5BxMKGi2Aa8^AQ(;}| zNIzuNkJW(wyR1uhI0m6`46t(2e@|B7P@DFkHXV!F zv|(E4y#bdpOp8#Ir!jLv4N>$m@}OwVEs-xb(?YIE?#{Rp1Xh3=EzBOh zoA7Bjk-fsLvTYdM+E`+Q@znJFk*7xI+y%682P7QcSU9}=W+2vCIC%Pv;hNxQNEo@X zFmjoB&!w1C5AN&pL*3oQ^W&}^v&>@sF0l>!O?o^O+^_mm2K=i$`Dx0yWY?|3pqI5D5*jjDD z#8b=u9SAcIMl=uV`_A{r%!z^Mvm|pZlv^}{ub6pP+pwRY(RztU>qXbaN)e1!s!GpW zwa#|`oxf!iN%a>cXTUQ0$b5*mQt!fq$*xoxXqd|ABO0b$3g3q=Wkv~&meCY3sTZz^ zW}_eP=lAxfU9Y(D2!s>qy0(U@jU<1>oqS_rl$Beb+Iu~GQd|3>0< zo_S|y3&HgoE*+_((~ob3o<6vC zx>ZI)U$;c|&h~CQXLil#rPK1`{tZ{STrZ<-MDt6kMfFeS#jXEdYuR8lw^pgcpVs&9 zDw`A6J8z4nOi}I5_O3j|MPF}oSmOfhfsH+VsP9D`KMOrBWij=LgNJC``px{;hct|b z7F(EMXKG&`Be*7|CbVnhKlN(kxZ%3RmJPG&lQ&bZjOD$OnNF$Qr7zREAAijM#X>MM z(C)`xAmpq4r2vBYgN)ARP|)5FvziReQ*$z&O>SX!^%~3Sl@VOZo^fRLIv#$}!C1XA zf=k&mj!~x2?=D|4suB8I;hM6U9b(Dsz*h_dG?cdz?^U)>IFEX`qrU?8>bh}1L>!wv z>%B|#TheX&+d;`^F4Di39zBQ^*-KFDU4W5#GZcGSK{w~D%Uy|+dAIrYfNR296gK3& zx(YV96x*;7J(DOsU!wF(G@c_-*Q}au)NgxN?y2y8d9bS4;WBP3?~oKX#ZiP`2- z@&@AVlif;aD^s-Sc1+^Jy)k3kTbdju7Tl3oa2wGY2yhxSf^{Ys!Acm}*mF-}&$$%0 z(6%Ab>Y|zX2oPL~(bem((Yx1$H}uB6syXpvPa?24_Us#*7*R)JM7b2Bm702}eRRA* zBft2ei$on?Mt$u?{p+me`itFM>YA|L^!xPhtyf+F8zX{CqN)FBg__A!`J)gcz-q@l*TarDWRLj_;qdTnNLJ^1uR>!l8S`o@p%%5D_vQT;B-`qcRJ zwPHbX(jfUJB<}=YVT6oq@+KzpAe0c~TrH!7kiBBo2}#bMc@ zOXerDPIP6RXjYb5BT1>Pe=d;tcE3i0{jw|4Ht5l1_()G9YWV;{v=%=*fe zRT$T#GoOT%`9v#hNUjt{a7|#cb}QkFE{-{4ait}4N6ik~ksY?#N9((enC;(+`t&?x zf3B|>4}!iwX0NVmO7`cOj8j|}+c5icohbn`XX0njS*`dAt2l5?Szm@vz6{+GE@f*c zAVYWKV$SWY%y-lOuDkrmx5o$Y;NffoY}-b@8fpSgHQFAuhlv6 zM5lmD(c2Ehx2ml_=##qs--<+EbaBpTpX0wP|N4n$oF3fW&z*k5P8~14cu;@btHPBxM2H>q zHr;-`&!re`M@Qdvq`Z!^>_4W9Kcx3*nxQaYWp_84Ur0xrju_fG^ZXro{#dKKxq|q8UU~dzv=NB=4)(VYT*~gpGeFct&mRDS`@t==5k=AS zhtTtl==lrxY}b+Gg}YtjGTQF>jNnl83=qer^tBM&bG8RRH4w9bI9UL}rPyAg=x`Z& zE{YDU;=uRHJoA*ONn~{8gV9*SZ8eKcciW53>} z3oV370mN8&Ot8-!v*R+F5qA{#k? zG%?w@42|GYCUU?@A|Rl8D)A*+$BTA9884S!i?TiNIlEPjFX-FEuUdImCWb|3wM-0) zeg^z(vQaNSMZIW*iR5sEF=RhM6JO#}e2MM{x6p2ti7)YMA-;r5nV1QUW_#IKPM=~q z9f{>6bSAD-?+uk&^YsuNLw{h^v(bZVdg_?}9`A&iC{{<}sqGkgK?q~yL;(cHo|_n0 zjfNKMX??J3m`h!sHmRsdn*Qyq!& zWpp;;_kZ$7nV3{ZVuX2DoQ-1jY9Wf1OPPpPeWz`NiInvuQkD_iDn=`H&YX*4C@6au zbc9Y(60NLT!n@Q`eH-c7=dQaOgxOeUk7Au2$?U*3xF+}j5K{yldhd}_F-1C_*2EM! zqC;=Tq?#xsZy69=isMu5Z?FNh?j`ey1Fd^TFn`pxVbt+8f=e-)8K=u{?up zH(ZKaVrRQK1U>zSfLL=%Pha@VBcQtsgRZKdiX%3HFlNR;=`-+Cr%gVHAhE@j7T8-!aB!CEGaMl=<&lH36sr7p`V zp6Ki&%wu5N3F0pFqa+Yqif!14$y?6Q`3>&+u|sSWK>|?(F@6}GGm4c^!1TVdoMcyt z%Jl4JAz1N*wM>*+_QApECiJ8H0|Vp94;0q-YV(#WEIkn$AsQ*efGDVu!e|?@=a#!7 z;f$^sk+k=nn+OpBPKwSBIzJ*|w0#+|TTzKEIvQ7*y|96DW`nLQ?ds!`~ z=T01lvBcO23)kR zAR2V6?_!?<syj0UT^?p5xph@@ryM={VdR-k?_K8h8G{@aNIjV>+v7A@6 z>J}S+dmy^b#+$9xTK4xZtq~vgZ3o0$=&)47yW0>tEUdS}Dkrx-FwT|TMDbq-Vec%6 zbMTf3f=jVRij6Q@lb&cz8fC?lXi74Il~9y28jYT4G%|v9QH*wDN>n5hbxNo@dZJFr z2(FjWiE^Z9i->Y0Be-5$Ir2E}u5f;O{a4W}Nsp`D+p>o!i>`aT0EiVs2U`fX!DyT)Zdsu< zQhu9ylckZuiYIel2poCl~6 z>$9LAi4IFhIxISiBWtfPI;-^(iq;EXVT5gC9>#X4K!p`Cw*QL?R9dvD?2)=Zw5cQ- z_k3tm8RaKkif11iVbrW5QL|!%QML+1^NP_~#jJ=FvjS1fVg%QOILn%4qI=LPnGMW{ z6Uh9*W34@kzPEd_jBwGU+ecZ5-Wz7im>A6W`h{l3(YEo-$M20K3&z5OU1C)(E&IV> z)~d@w&bG+&F8FGr)<>U>%ZX>bsLvo}N2m7%jNqD-x@zpA=(B!J<1PCeS~kocP&{~{ z*v-_W)D>-BiRAP(f7Iak{v8{2+k02I(z;i6KQ1Q(_mA|Q4G!KL^)^V5X3I_|D0AuPt-Wdz?J+s214PYoZrrfK|Z*gD?acDCf(4f+Rt z@pWqTcRZi0`n$vd;qMQB|4`7adrti6sP-0uHG~+g)Z-(-X)L+ox$WFS8(|b^B2u6UM1h9=$;>xFEN7zJ5qYyijdF`dvp+dOKpiF$ zbr>$iermRd6>_3k19nYT^bsYU=!&*Na32`Pb~LK zBqt^fR`l{Ymd~^*5D&c_*H7)Fj7mu$YAadAlZX^gbd;yjEYbQkHo_>L zM5K74>tY1k&g!s4q{E^S9G_}Om>R8@h_qfbg8RW}XeZ#ALt7-0XU_M8@0EEM0(oPy z&s-z;3M2UZ3%RzEH!-3&Q7iwjJ+4WqOQ0bnxifR2A;eesG|ScydUHjN?#JBleCs5R z(RQmg0U@)&EFicPpDwXIM1?`8=nt$#MW=}MeORYxU6Zw~WfeZ4*e$qMfAoCX6~uQ> z-r@5VM*O<`biGfw`PcD4v`BImN0PJHWa|yuAx|+!6?0@RxZyxZ9J1v4m_DVXPmIobog?x(2jV?vwFOp4P|A3=Bl2u(1S?1|I`N)MhhC%Ec2)s15(P{~aGz`& zqM0fEAl(nGe!&Q?31{1T&X0Egji~#ZHamz<3WPmi*kGZ=Y)kwd>smlX@W-ankBIDd zN}S{J6%&7_BagTy9kCS&`^*FTjIS^P@kLpCh`?UkJbL?_{P>K=9u5$trCTK|GuCHd z+u#XTKQAg%K0o$HthW$|Dbw`|uZ+=%{(Q1UGy@#0hrX+jX6tOvwt-l+h&XZCdKtkr zWwWcq@!$rTTq&VsSK+-A>sr9~+V6IEHZsKyebz>>5(cB;fqZ0++ZC+Fo5$3(Y;e7d zR_eb`w(z9qv(a-C1E)EB9OH$aORglXWuo5_Pu`MAcuV*SBTRIgetYy=;?Y}@t&2<9 zk!Q8jeq5t%gZR+0XDww4*+t53Qub`-{43};q!Px&e+D^m@I?Li&tIE+e1#Fr;a5t| z)r7$#=W2}LZ;(|nlzJ9tcd~b0i?chfi!}hartE27vxwYpw&2o)KJ%8S=PS2Rrx@Q&a;vq#401T+UyNXpst? z{eiHN?o-`DaJ`Jq_9LQxq@^FsakukSn|_4U4~<|OjL!BWqJC%u*K1mpPI50xKZfIU zN&3N8*oL_yx+bNXeY4S%Oyf1`U+EVauvdIY&X6y=xF)l)BbkkPJ*U(@umPb=;q3(* zka_fswh>KWV-ake0~_B|Sf*n#I_&Oh)ywvj8U`M{Ai97D$q446+cqBQcC!cfpuf0x zD~qwtXyX-;xE8GRO$K6LG7vN8T%wop4N45MYjOZPl9?FMZ9S2NuXV0}X}MyV?7;d8 zBc9k;UPn`YyQ~fnKOvtma!7lUftc%JW;xqd%48t+?gxT7=ZxT*G`COZGBw;j@kV80 zwsrI;F@R0a5#{Ysly??^7;23W&Y)q=>WFWgC_b^oyM0z8e`3qV*7J~foQysD?)JTJ zsdsa&M*f#08~a>}pNIX-cQl&dzlis0V}(028QC1l$fk1vOlp$k3wU(YcZm2scg~F( z(e%mlz4dOApI((kT414C$w|VzQeRj9M-&l;hH#Euf zWxX4AN_l*RbE-Yv@Mew3&p(V-Jzr<2&OLB(_1sMMI!ChCsk(!N?c`M4Ho&o4RTKS) z(ep0o2bbbL*@%7k&Nrb|ui`sjb$VBAy+prKE`R6z{o|`m5N<&Pk7|ro>b3fP{jIoH zO|LCt*`VS{CpccnhIr!73O0G!Ip|N>0O_ z?|oqw@9VraJOH(~Y6GiEzHPmF73RI+W9Z!UHX|2Y{gAl&Sp=72Ub0fi0v;j@xYitC z8(fO*;mqrqM}xUoS*~u@LUauzTUti(V!f>N{6)o_{5^L)DZlG4DT#hSJ3;cRY3&3? z;I0O^yK)MUVZmswwa!uHAxBk4B~3<7twv#D^R+UXc{YL6qSX9H_j(xxGcLvI7iKOA zBsNv49*=KvyPT09SG=Htd5vr9Wn6Wvmu61hbM3l_*^GTMfjm-I7WdwAy6-}ef=mlIz!%3+x zIC`W-W+fBIO2)PkpT5&O6X%0HW>v||QQ8K#oomXj0AgAJ1hO_Tvwk46K0QJ7eEs2~ z{`rj?$MP?iVjDK%`T>7>A9Tryi#>L>h2WMj8qAk6%VVp+rS6|R@xo@8B;KdVtJ>k@vpjJ6T|l66Te>k=--Xl^Z{)mt6X{Rm22 znpq(Sv_jT>dbwyZeW%w!nkT!aj%ZD-5!`dz#;tECUrtOe_`bW(b+N*RSzqg#l2y1M zWEIZ!aw$eWlnPD7ieHVMiF+9l3n5gTOF%e&C7HuO8Lm?)Hg3jQ;2>Xo1um>Vy z4+O+F&Qgd)9&9_CnKY)%q`Fm%V0(x!*;Lhk4lDf|Tqia$aE?S3GSi>)<$|#e1mfYm z>kA;bl!<6`tcXTWA{yC-iJ8!v18fi8!I6D@$ptZ`#EHn{)JxUaR6Jx3p2-=P+IHDq ztQqzI@g5MffH0Z&G&_$GT$57Mk+<(Acx!(tkhhOxIjjBLT1RY-K3M~6pDQbM^>g6M zIQR7`F<*J(LPzg+R#&bSat1&sb0hk5oOpy0{mJ!mBq-N}`TVwvwT<)NX&!UET&nA# z`r2ODx+PlG5{Nx$RVyI46x*;7#)d043?d~xWP3Kk^xUPMYXsj>MrX5gc@*`c)h|rc zi$mGK9LWZT%vnjCj7D%N)`MVmha`Fj*={_E-eClnGSNF)8v;rQNz{ukQ7qLXCXH1TjA#lz_MfeHUc%rD_DTUD!6F z6M&Fx9)k)XHeXyxPOY4O9#4ggR?09GJYgtsd$}bhD$v~Bd~h0Y;_ls90Kui$9?olz zFAw+ro#&5VUMr)Rr9E5NM`<+yXl|#>&eE0LYj)4+-vOOFzGCKZt$twkpT+5{H7Rw?yidZj&dm2qFFVt+!3ege6cm9X(X$jqAXYzsa!(+N z1)@NN-Gr<-^bSm`4r$(e!Z(XbRuV4MX zCnYOCna^c}u(|p_-rmMP@qOL+&U??aGzS>X`U8mHO+1hhc_0JvKpNj$AYMlk5g#O( zNd+Mpz(V*exs=H{8ceCUp_Ppg@8CUH$%uE55ytNqh!x?U-D#~<}|sd>B06hMet=sM)QH)=gu1W@|7ytk~1koA{nwI060 z>IZCFtMzCl1fwc1z6Dn_8Mx;*V&35X{&aZm>OFtArG#+XuEblru4b=5o#>-Iw-1Jk zaIcm@*8oq@>jYf`F2z~~tZ{%b@!lJRW8ziob$`T}bh%!x32FwMUr6ZXIq45g@_)%WNQ*oC13L{uq04rom+&^MrT4J`2H}0wE+;bjo3k9 z7C(F{cF>XNNJiLC&?tp?q!glC!q3J=97~i!y!0t;5sly$GCHdi;)zlSx5UIAJCc9W z?zzba=}A6FW~MX3#6UWdClc8NlYEdK<%85$Sh0X>%BqogqDI2?atm!6CNk5L$V|S% z2otfX?|L@pq$fEixh0I|7-*&1ClRKeM3{0ZuGdDaMxF-YC`t}c6M^kW-cM%Rn+R+t z$pI>v9Yjk{GCOc7=IYxB$)O-I+mb_puP}m{%<%70z9L3&DHBz$GrA_R=dz}jNODGS z_EYX(f{^(`qSd)BMsQ7t<=oUw_q@XVPovJ~cM37%JIw~X5-_iwx#-A>Xb|Or;479M z0M!H!BoqYZ;$Ce+3?$oN1S<7gvn&48SBg-H_@Ld$zEnhe@eXQ^XR$6i*hM$m5r#8@5Zyx zs@mgoVz$l*t|^->&7*8-x+UB~TQy=UxZx60vnT(&N98-f=q8l+lbr1!j|!>CRo^pujU9}%`n3>Bim+S8@`%P zd^L?Q95vYyh3t93S3C0a@SZI>exvGbEgM{~@#1R#jHs$;7M)KlI&H%)rI}CKo>GQO z<_VX~@W-4>KOGUWSH*D2G#6c|HejraGQ~bH))~R2_%1*l=7Seq@b0|lPjTY3r-;#Z z&;J1eoH$QdbXtN9NRUtyJAvn$dyDb=NaD<64Z zqj`%<#mum01lNS|3J64OMe~8+E6m&Hnvm1tU^C4PFSM|M<*hZI?cn!%xuMO~S3n3y zQ31iF*w@SU67RVv2#EKb5zIfgZHR|n^Z>*|&j{8AU^M1hJVE42i7v+zWCXW_pAEi` zH*5N@z)$^Mw{|gG=X!s-F8hNMAu+H5PXHb&RkQ%icbR}tawJS4V&ZM z;?i^d&*0fE)bCOY!MhiDOK6$>Mm)QyAo-Omq=+HepLZDZ*ufbR^1a9;(%98SKw zM%`G~1fuS%e|cqptQ+s}DrXdw^%cIO#)BZS2Dn#$4KD8scj;K$78Zh^4WmyXjsn3g zVT9ePIo)@9!_RISM^P2a2De1kT;iFM^@&n{-oM?e_e#CE$AUT;wP}5Y@0D%i+ng!> zLc}e-0JQ~HRWQm6Y0-lie_s-L_DJQu$Z;qLS(gZcudr4F*94~CTX}*A8+K?K{R=|d zFnjfMjll!4zN!jDB_KKj!B<$nf@?|;(93WI!B-f;{(x+&+=8v*Qrsu-yr8xKuR-(y z)E24^O>4H(7w-)YnN7@k2T)akqQkf7$4^jOU<8+96$W_dp&B7sTvtOig6n0p{Y9M> z@ALM;#@`2rSvI&{8}VhC^^xSk`tr3KGN%AqTY$9;%(^6#0Xw3nN^L^tT9SDVL>Gw zMso`h$$>T8H1u57a9kH_H82`ykclEtB#Jw&*HPT6O1#H^C$ofhevjbv8VyqB@idPbyzwPBk;x z5i~ z{W`)?R%-9Mr`$Ps=5Mc=>@%;KIm2p8as3q>{CNxzp8z4uVnJ{zi%o1H9{jSSCpN0) zPx84gW*M_>XmS7{T;$3?7!GeB3}QxbP0)^B(9T(NO-HzQo&xx%SW5ue1dQA5Nt4y z`d?aT5RFgos$12u-(;&F{G7RkSr23+9!O?e8$Vni3aG{p7l>yv@j%MDT|AI{h5620 zQ`Q3+i3gHPF`60Ki3hU%vAVH%Ai0$BC+fIo8(}<5nr#Wgpc7a_YwTH@Q)*k>#RvU%wE{fSeGpdTgP zS`kEG`&=U&HNt>5iohL_4$7{Ptg zdE7(F<1Xz=n+{XxLCp*isQmQW)5%OkR%Z6L~D-yezcXEgHsRIVAmerA5W zbYjzpt@C~3nh?U zxb|Ha5h-!B>9m*;5|1I@hs1cHwQ>?4%JYW>*jS6a;qNysZXxV?Pbn$kRR5^wN^bIl zV@k+6FU(jI2naZy5v{ujQnbRg%Nfh ztfGGu@gx^rfLwH3igRt595Xu09OBz2mGUG{+;zwk#|UmAqY-=ldPA=&*fpOW8EGRZ zuc_Utn_K6474Vi6_O7!K%w)E?$c8uJ6K}#1-h}aAI2fxk916__1s5R6I_*i;X_KMZ z+0*EfOcrpR7ujTSP9<5VhXC;`JoHZ&KrnxlvnpqK6F%`K9Aa1K=q8FBag{Q>314^< ze8n&ybf0W?rs041!vA0d_ngu28YEdmeaadtaWWashi(<(vgB>od2EzIwj0SB>Pxm8 zzJj6-;y9iEwm93e1%(O+c??j7XL}K>XsoF zdwhjk#hl25ohdeioyiDhYH|zlmVnP$8NQ5Nrx0nmSByAbZ>;vc)>=Q>QL56^>%^bv z-8lL_i_gi-xkQ6=Hyzh^>Sfs;11p-Vbs9aiZ^Ri^1>c;L#)VqGUuk0OllLVU8l(%jTT)DCcCtgG};F>U#OvV7ft; zN_m3qk)@Jt@Ex@gW1b%xO3vaQ$XSd$#d=*L*|V8(h&*3eE+IVh)6WYt`L>x$!e|>Y zrW$h#RmGp{?S(J#g)qh7WF?i40HahB#Jdqby zTvgc0X3nK-u4R|4huvNOfW`?mn8zEZWlG8%8yqOuo zOeCY_?T9M4Qh!4)T%rv{FPux6Q%lX2vJvJi)swSSbIzHPGgC&GlTjz(N1gd;KdozU z&s{3!cu{9&Kh5*G=!1R1r#rgo-yL5qfmR9PQ>-$k1Ho6AkHa-(5n(}uDU}u$mCao; ztqP@8+!98xZRA7(KWY~|MK!^X;<}g_^sfk)5Sr)3r5K&Coj!q=Q`k=C>^CKP`pjeE z^I@C`;}rRGAmkL85nPI&Q*yQqW|${u+l=5+_7i*vTry#w?FN^O*=PJbOiX}Nc5O90 zLBl@th<&De&i$|vCX;|CnFRO>x6p2tVV`-zKI3{B!8L)mjr<0Z?`|>j8}Jp*amW2j zG9t(qwX6Wb#2Pq~9f8r9D-kmxUzEg5a4EKD&bb|lxX8w3codhR?;`isMi{MoPqgm& zJ2xi{Dbc+*Ck@WKqej5S_6m#T#Kb%8+TocK6Mcm_SX@)~bjhRBrGz<^=&U=Uv(8zA z6K(Zf<8u55p{;Jtgmfv+S&Ok=Rvfa&MXQW{yGQ!%8o^8?MrSq2J<%j*8_d*VG``wI zzug!8cD8OtPEqK|oM36&IL%1TynH$HVjGOGdoE{plG|w&PU6fNog-@X+$tN<=f7ih z{*T>l2F4r-#`!q7CZ(&eN{$gZ=j66Cf@{KlutAY1D3b3top#t|-WB{X;)iqZ-#Id~Mln13lZ8q~TmQ`S zAG`5@%cYnTW!5VOQMJM8(X4;+{I5Ry&O)#~MrTz7b>3HIPBA~qs0+HHV2IOjcu*xL z>nP-8Picc$-~00fcXq#@+)q4RLG=e;YsKs;n@cuq_6UCl)>nOhn_%(07|on7r3L~a ztS$BX1j`1qw%8s#UP;b-k8<8S?>65a@OW<4)SAr&J}2^}%J;Da`BII(i$*Z>h0z#& zRt)fkIoac}H!K7*k!-F^Pawob&jJW8#rCqXgC4~W>TInhD$tRLMzc?FmL5Hb9m~t; z`3j6B*Nyuj;w#)+yB}u%;nV)Zk*CNAu1Tr4k{C!|VjyMbAfvvlz_}E+5V|{w*RksXWK zK{!)y?BFtEi1|i1$4L|&JW+IDgi%;Yq_O*QeQ1fA412cWs1Gjqph|LbrrV(X8!)qln0U;gU(VG?UdPmFm+Y# zY6aK>jNqD*%!`N|@G6ZjY2|90T^ z$>GMOxK%dd3vdDM-jWjw7l09*D~CL6=*QGU?W5xj8pXvA*%4dZ53VW6?=1NyB)>C9 z?3k>>X~_u9aXCsALtbPY#zm4BnM-k8j*XD4)0N=Um#ou_V0#=nl#P1vDC#ANxk(~j z9EpvwBWs>T49iP+6VFBr3&%{bCcTL}(dcZnh)3}y`ihAVaZW!lqJRw(k@7zX6NTbD zylR-sXr)Zli$_r}+6JrcGa5{!B(lbn$Qo`h_k+>crS^K-l}wnDL!sFdrF0BSvxO5~ zj$7h55JdbUS_F)$uv39(5k}hx!;gxDA7!{pfha|A)PorlgG6D&u$>}eJ81+*Coozm zqZ$#3Y6RQhdO3a~t7Q?1mIc?#XdBVN?G#Jgl8ioPED2Rw*<3L^S$n z1lwbDGKxwhpp2qi7sq0-ZKcd88qp}K<4d>{qw&mdJv*9vR(@Ris`a5+JBQ*WhX-1F zZiQ1n?fwU3Js-9j*#Z5SJGyEVRLYOL^mr*WtNRcd5Eg=K(jNMdJoMR^2`?n&yTMvhy!lyqAK7GEz zE#aDU42w%KEU8Qk3r8o|5fBaDTH#0x%TdIza4E!PWYKcUaVjpOieJIaL~?K`KH0Dl zh!$}vT13v8b^HY*xF)5H2AxM5bdKoRv92?p*CQqss&(R9Y5~1$7_H)vw2IT;?tRW- zG^^ewHV~5 zHHo4fpK-7^z`a6*srMD`759+um5n$!u)pxUyoLQXdwhk@ZuvwRXOKWht7Zbhr5MdE z#46+dVg4g%)w}P!XW3w-TW&4x6%eul*i`_*EnzfVuSq{5>PH~=#31w;y=iSA=jw@# zH5l8)2H$r^m_F&6vi*ptANmSEO|A*~y!Mp$a&hi_VD3jDMouR)h8u;IP)1HZX~Y?Q zSjLla_YsV{jKDaUJwIhM)c0;Z+mrdDI_3{XaJ`Jy^M^R@Xa@ zk@~z39+4R*i{Mg&R~^+OUx)3DWsVx(%o~N-U`dhigP;W{|N^2l;CJmF^W6-L-+6NWLO z*~^Cip;^jok88pg1;&WzCkkVPuNa<2>Si!TxF+oGz|GK#i>J65y1m?6MrYX^9^c%qZ_j)5(kXdy+Ug``U{+UOJoS{F$**xb?|II~H7-pB1S z>PZ?ws$3bRDIF=D^+v_wjp8T-e%rZ)N~MysZBNd&*@tA#wjEJGHD}OHavJ_ca(=G8 zQGA8HI9yY5w*An@4ShM=W(3<{4^sC0+?Vrnu9wj^;?>8GMsMJYy8j>)r*7D(*)@v? z^>-(?DXMiQey-3Xqd=4%u(CUROV0pN9rO7EKp3SVeTDb9T$55WfFYCh zh4;=}6Jn!)klpr4Ah=#G#c1@rOC?b@3R6qETdiU>BcqFx7FDGL@w!29ZyCY%vIoZC)qYNyT%iC4f`1wVb!FBn<3E&ow3{IE6nDwYSR1j=|IT-oDtj)MneN) zLlYedSapA{&zW;LLrJf*YU@?sgaPN{nSXZW*?MnqxRvMg6<)*hJ^?v+kQrz(M$uu& z48#b|^TW2WcTSz-&j(`XwU_uDZ_Eg;2|HmRz_0ao0l`bv3T^FB6nH6~;IaIRQRU*o+qOUN*MCNLh#AI)PDAtIgSQA7N9jp7qI)~Za zL`1s@jo`a$_rt^pM>k`4$L-~on7x{g>rM89*sDddALJ{%E8?26ySs>XcWK!{@|xO4 zm_1G;dmO&P2<{Wkad56C+2yaoxtcjk3q*a7S9<1LEttP{7gn$4>@JeCJ4W#A%xL&a zpp1uAMkLC3To=a_Sv9HsiTYk7>U&0UFD<%!T#C`iUz;fWMWpbj`@v||3HZOp&L1?2 zChEx85BHF(r7DKh~0@6f_B;jEEF;6(pcWz9twgH zVn7hFFkoXNhzeq%h~Lc4ZGP`AE2haN?|pCP{hNJ%cD~87X?evj>TU2-Uh!P%JzxIj zXNxBuoa?14%dc9C9v9+~)}qYCwQq{}lr7}T`aW@GWjtAzd_K_f+n=$MFFIVKWZB-C zx%}<>qy3HXn?0rwk=_Ykzp;@2I(4W&wmRKoF5U^Jh)r2hWB;C#6^-Z$^A?+dmWUQr zxB9Z8>q2~&6(xdJl;|q5L(?KV5W$#HsTaf<#ey&%uUA4)IuR^M@4+(OL=*8Q+&6<~ zGNXuxk}5@EkgIy(wzYVX1V4pxj21?6zr7UyU$vhAI7q&dz=D%mOc`b zTtHVWo5hAWGlLtm`)AL)4%fH|Iy?X2TK-Zq>gl~B3Ht@nDIz#C3vgz-zMN6%{IH$Z zlHSfX+POd5Wwg&-Ie1ok9Gf4<0>NCID=|L;@o{Y;@98~g>@ZB>x0U>Yvf`5&K`(|3xiM_emJq>`O6$`U!mJNd z*j6m5BT5Vl&{ zH-um=YN#`7{q*z|($r&^1hDuoYPkqEp0>CU!37?Ng6nN_aSWOV?{fgj&J-#@dQ) z=vuW0JxGL}E3M*$&3iMg2UDmOOG*(;VN0_O>k(=R($Q;f>+mMt-r3~NzOp;j!ZUWQVtyR?{T;pwfE_CTu`CEgz~O1$R(CnNfKP;Mo! mUaJ@-ey=)&cF<@KQY*H4DuXqQ8SFCtSr4;=KH{iViuemuF-DI7 literal 0 HcmV?d00001 diff --git a/src/gym/envs/robotics/assets/stls/fetch/shoulder_lift_link_collision.stl b/src/gym/envs/robotics/assets/stls/fetch/shoulder_lift_link_collision.stl new file mode 100644 index 0000000000000000000000000000000000000000..c9aff0dda920b09c76639d737fbb6a3d83c29d10 GIT binary patch literal 45384 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 VJ(LleBYXSTaot@+6ah}G|1UjR{uBTJ literal 0 HcmV?d00001 diff --git a/src/gym/envs/robotics/assets/stls/fetch/shoulder_pan_link_collision.stl b/src/gym/envs/robotics/assets/stls/fetch/shoulder_pan_link_collision.stl new file mode 100644 index 0000000000000000000000000000000000000000..ac17a943757561c9d0d5b381af2cbc24b8b8b4c4 GIT binary patch literal 65684 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

FwCG{!W&l7R`tf$$rLsR2R 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 X`Bvofpwo$rScLi&XG`@Z(joCbPpt!` literal 0 HcmV?d00001 diff --git a/src/gym/envs/robotics/assets/stls/fetch/torso_fixed_link.stl b/src/gym/envs/robotics/assets/stls/fetch/torso_fixed_link.stl new file mode 100644 index 0000000000000000000000000000000000000000..7cf7fc147ebeae583d537a0a9842398921f8495f GIT binary patch literal 5884 zcmb`Le@vBC7{?z?Yf8=^OROX@ZT?8-6}#6q2lqyT;t#~M@JDW12$^N1XcCIPDk8?D zm=}aCm#yZoe_Y)A>T2BgYT+hYj;7@wY7n!qxk^wcCYwFadEXbm=TiU0Kb+ljKIb{l z@8{m^nX^a#pMM*P=-`4i(N_~M`u7y3`KGjvur}`LPI+@wO@nv*SZjUr*_3--ZT{iT z=YR8>=&w~To5At9VIm{?ZRL%~u*VXu_n2txBCGW16IKDQTMi9YpV#u5DAaG6xv6xA zA}WgeT2)4ZwIPPUn~1ixWtsdq{xhPv?GvmWSqCCHOvrj&)`1jR>oR`YRpP%?oE-Xd z*5>FBEWM?5q+g`>**ZYIBz!&?Lku}G?)b8mjni310JRfwITR@XeYaz*rh zN1s6Z2Qz%Qg9O@;2njru?8wOH7wUvq_vrXsuV^lMuyvIlCvEHc#kvvO>VC00(Zz#B z)*sUgqxH8Id(pc49p8u^n;fg#9<&_7Q#8+uc1HqlB6>UZW3w=LJrwJYOpcP`=ChGp ze#ybbldYS+VB|IRs=4VW&A6tB(gU>>LgGpYUGp_8BO`eIIgufEwfcf7au*Wle>--U zbL@I2>9LChdX}iApD(a#AB7+3?~7t&ly&!05z~61yrG)c64SCKdYygVzq3#DD*JpY z=Rwh)?ug{aINO7kSagK*xozENCe@g0h8*_A#?=P)LA8;f;tFGdXkx*%a8+cgBKA4H zmAjD8_2`@x+yl$3zC6 zLRz=(CtR-3YuZcZ(u}-%A+Vk!trJhN9_Lc){8w0W%sbKJ z`-EDR!J?nrONg4;y1&1YqbdUunDa=p9>LXSOI(?%3|I&2*$O)=?xu(pu*MJ#dHh4O zc+f;815cqmow&Cx-@NwX5+wsqA+1-R1h(!QwRuTmE8IZ>D>zXRTlf5&ylFz99(W3A zqT^hzJeik69Kn?K}(nO1ya3+}m)>kC(CZhSQd3k4syh_VK?8pJ9`^fx2G?MeeY8ny}~LZRa@$nRBgRpb#Slkh{T6a>?*P1m)JdZUi|ikF}#*J zLDra?L|2$7zv2mJmy}qzgM>b1%;c;s-Tic^@9fP1jL}1!+ahC5W1BzdR!$ z&QW+|j0`-5G|}FeN#C9Bu_j{e;ws8S%?!`8k{?)i@s!@9dvLU5@)g$KV!#{ z&t-a*&*iL6xI0Mb6F_x!70*33iTxE%Ax%^T1n!_tc#~b>92r{mK|jk{zBAYrZXegg zxKo~9H4zED`lNAOu?!bOK+6gmh;i z?0ycfGEfGdLRy!BJE)WHL6AYQ{&0POH|a8vz*D-6J6ubcGs-x=&{Igr=dL^=hoFBW z-0w9=6CKShj;0(QYW+GtTjjZ%wK!AbbpC+&dVx-0)*?-G%!yrhB9r%u&vB+g-}ENr z?Xd)U)}G~Q+4kieZ-!qrbSu(N4* z)glu;g+y$AJRtBC(z15_Pc)ZjhE-N_U>45|_^ldeL!23P0w-1^@Fvm2{WAjCCvaxK zzT%#i|Aw0S+zAp1oH%<3LkNsfBv5t_(IdnC=8n?~(mH|C@f6Bdgkf{`tK10*r&pY6 z?Tku1Jk&24g;DoRnS8g=me1*{?8W@3Ohrr)RkkI4G(OS(7 z_&o~eHk@kg^DIXZ_^TSuBE1O1B~S*QLRyny;P(uahqNMkWT3Wqs@j?1>|eZ?aR~z_ cOO%JSk|B`N9CuJ2T3r!6GH@0}d3Y1iKL9q?ivR!s literal 0 HcmV?d00001 diff --git a/src/gym/envs/robotics/assets/stls/fetch/torso_lift_link_collision.stl b/src/gym/envs/robotics/assets/stls/fetch/torso_lift_link_collision.stl new file mode 100644 index 0000000000000000000000000000000000000000..4ce5fcf9c58c885b37dc012f6a539f3e89776006 GIT binary patch literal 50084 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⪚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 DPXRSl literal 0 HcmV?d00001 diff --git a/src/gym/envs/robotics/assets/stls/fetch/upperarm_roll_link_collision.stl b/src/gym/envs/robotics/assets/stls/fetch/upperarm_roll_link_collision.stl new file mode 100644 index 0000000000000000000000000000000000000000..120793232e41601320be52e298be450de59e3b5f GIT binary patch literal 49984 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 z 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 literal 0 HcmV?d00001 diff --git a/src/gym/envs/robotics/assets/stls/fetch/wrist_flex_link_collision.stl b/src/gym/envs/robotics/assets/stls/fetch/wrist_flex_link_collision.stl new file mode 100644 index 0000000000000000000000000000000000000000..3215d2e1de0f271dfdfc8abb2c00c47cafaabe45 GIT binary patch literal 49784 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 bPe$Ds%8J6b4Q+IZ@b?qTvs4>tx$E$M!oHKv literal 0 HcmV?d00001 diff --git a/src/gym/envs/robotics/assets/stls/hand/F1.stl b/src/gym/envs/robotics/assets/stls/hand/F1.stl new file mode 100644 index 0000000000000000000000000000000000000000..515d3c90169fb7b7a5ecb344bb63267d5352ad8c GIT binary patch literal 17084 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 literal 0 HcmV?d00001 diff --git a/src/gym/envs/robotics/assets/stls/hand/F3.stl b/src/gym/envs/robotics/assets/stls/hand/F3.stl new file mode 100644 index 0000000000000000000000000000000000000000..223f06f5bfb8af17e33c6fee5f0fa3d65c76d6bf GIT binary patch literal 54684 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 literal 0 HcmV?d00001 diff --git a/src/gym/envs/robotics/assets/stls/hand/TH1_z.stl b/src/gym/envs/robotics/assets/stls/hand/TH1_z.stl new file mode 100644 index 0000000000000000000000000000000000000000..400ee2d62567af07045150511539919e758c05eb GIT binary patch literal 6334 zcmb`Ldsxlc8pq$tC7P1N=te5aEln2lMLOStuxZ3%PH+9w!Zc;q zMP7wzfRPEAEb3v?k8b9D32u4xfvtXMvX3}DKV8C>07fmyWa@BW^zgpKpejo8QQlNx z8em47wu`tE6tBT87b5NS?>T0OX&=5LVM_qZTD7cn%QxeLe$r_ivh4JqS1eI%Gk6uI z0s3FiQoRtXY1?lq6rVSjl%`GM`AL0fr?!VwUNlymn3p77F6<-O-270fuD7HB_Gh)~ z|B!uc&Je+%nq4$jc~gaHfaY(z2(T)S>>^&<9n{xEx)JCq>RxP-uqA+&mqd17l`yC- z1-dG4sxS@kdGJdgckQ=!5wGoQo)9>F9o;Zrdtt3Xe=^roOEH-OA702@<^+usn zM1YTdzp4DCR?D`p|F34Hi&tfiYNf9&dsk_$A_A|eVd0Kk#@LHjGPfx|;s*4n^ z&)^7b31DIBjfyJ|wRB+3K~1qkmNGfdO$xWzBx0H;4#ap>+2m_!=DopOub!GWRWS>9 zX~azp!Il7~3|vZ+bW6#=OP)eUuir(Vi|t}-VTy!T2EP(}pIJhGJFg>8a#wS!9n(CK zU%P~U)u1E9>r>7L-bHwC0vwM`q+{x2vT1KmZr5HdeI{xvAB$zwmSTSZtA@tV6$v-U zFrPmK=YSHi`S-`77=4Eu2TxoaP(d7aCDK`0xdNUkO!EYdIz^UmN}z?0$}4aS?iG$S zfXlyHNY$}uI#xHcYVV9taq`o_(nq%!Ntot|mHQu&g~8FZC9;l-6{c}-0d~|`lds>& zr2fve8mz*0`BielLp`DWGU%$=#{^7Z74PF@{(3p)P#nG6^d+%bSfqRxS}U&6-{Dp` zUiknAjRWLG_35-pq03_i`F!NbCADmADB*K?v``=1Jk?@^G!G9 z3z@MrVqYb)I7RH#5BMsGo4t0O8`A}G*^iEt-C(1`I_iHB3r^LOanX( zsgzfL9ZP*ImlN#0HR&%!Z*g0kXnsh-5dpBcBr$7uSNg+mQ5tM(`dCZ7ZgI8vEZkMX zz5zCrg|V?MXNg7BIWC`LyVxJV(%b)Jx2)%q`#nD6vNOI7@WjWr(%69TRB|G5y@2yM zR`IR(DM@1^J6n_hlXmI)rMKCGsR2sA zGlu9sk8YEj(>*m2>t|Ekg6Dwm)weqz$iuR(XexHi;qJSb<_S~3^YV;hMYh{9mGgmb z%ec1yEIpLvU+E__#|`A7i(`dpfbZ=$3YOkpLiO8PhR<`Hm+*-SP%w9`oYWr28XxQ+ z_@3}KDN~j;|Ej#d>+TzOhPN&R$(J+IS=*i*VfW5L<>VGSedP`0y58sE+U?#ynKx165K{;}(@#-;I+BCW90e>t~R#41b!TuU0nCb&!NC$HIL z(=Xli5AI)63Innwtm1ps9_hr=2L-U;1?#zSU>f@dDEz>TNrh8bxxX7ZZTnd16?je= zQdh>s2geOy&p>mwIUt=<_ zS2!P-#$y5qc3wm;neLKz#4gYT_}>u!DDJ6eyHll4s++_nrBiA4XeE3d^d4)3u`Df=cpCm%4lRp2!A_-dpNbGfn zgxkk6lhro_tim+zA;98mO+v-AOxFH%KSy8{u1f&g19l2V-(|5qF43+sx-kd9~GE!(>L<4EIq0@<%u&zIkN#yMGbff_sHCDnNLDGipPxkdtoXxL9EopKFWL{zGz4Qx-4w zp?IEgbaC7Oy0zXTuJyfGw?=Qy2UcNPeao1&T{a$>#A*Wvb0-}3hiQOX?;Em%MKD`Z zaEss;oL})-2{1X|gM|)$DA!n9aCZirUwLAOT_gjWZE|2!Bf%-ywhI8 z5%^TYwEFgX%87X;2TBw(6mkcHfW4qS?=D(ny7e{`W( A?f?J) literal 0 HcmV?d00001 diff --git a/src/gym/envs/robotics/assets/stls/hand/TH2_z.stl b/src/gym/envs/robotics/assets/stls/hand/TH2_z.stl new file mode 100644 index 0000000000000000000000000000000000000000..5ace8388b9fad8fc9f4a30d25a00592a312864f1 GIT binary patch literal 63184 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 YVBDJpwJH)+xmgW literal 0 HcmV?d00001 diff --git a/src/gym/envs/robotics/assets/stls/hand/TH3_z.stl b/src/gym/envs/robotics/assets/stls/hand/TH3_z.stl new file mode 100644 index 0000000000000000000000000000000000000000..23485abc720951ef1ae56a72aa965e30c3ab8442 GIT binary patch literal 21184 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 v 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

)TAXmVhNR_?4mBke)R?e7kH~*%ByMD1~S} z@^gg9B19A+MtW+x)Slr2)c~asP3%u%=#`~)@FU7DN+DX0<84A5qt){;)x2NZK$qHO z?BC^MF|h4SBbvUb+C#Sn#MGgxeL^4gng@)nsJMR~G;Qiw)-#K2x2!OJA%h%q;axjd?^>y6B}tO}xD)I?ul z_Z-Z>T76B#Q$0`$(f`O5vEi@KuFs!#8Th2$!HzDq^Zs$0kM%vpe{Z8!5li+I?KJk$ zOpQ{AMtj6nD;Up@(N6yYt(LobT?v69ry$h7$0M!-7I12K7ah$_on@u z5Ku2_qM3nMdb1O&%J#kQX5oz>-u2)e5M$>~mzJwWA9jo$*q49uVXWCVXOmP6A!H<= zZN_>`oG6Edd>~w%dW2yXu`{N}F(ocm{^x_|Vou{B7Ei|RJEIh$sqb7rTApk1hj@>; zI4GrfAU0Z$yzpe896?-z9O4?_6UF4P``LON_3A~-1iC3odBLo)r4Wtws2;h2@uuzfX+>-* z^=+5pT%i=AiS@GfiTIGdyIV-PLMg>tveB3Y>MV_0A#PsUB?eAU(6Z~>D$cauM?F`w z);tmW$%at;5|Bc@Xpg=bJ@Z_gTo^0Q6VDQJf}J=$jyEzgMa}FXvKEa*e4@B&;&vk| z)4GkQy*tF`Pm|=q+vyhD(3V0p+GDJ+=NvJhNgKI@;y_)Bt5)?rA1l)sAN{_JwV9$Z zc{QI{tSE(O^pN(6&(FGtPfL}4L+@HFJ=-hvMDP5lS(;dr@=Ib(DyF23K)wG)^lqLc ztCLqKg=q9vS)kv5@dA-WtWrB#ltOe7qVC#2*_fD_D1~S}R|=yLjR=8rJ4zwC$i}(~ z2Sw-In7`HCvF2?ty=6SdbpoXjZP`dGvXrLHyNJd)n0Bwkt(|*#i0n$) z#hfTEul>&JaY$nPzD%R!CcWp1fop$}iBgDW%+q&{v6x2UGGhFq6r%Mw_7G?LIL$tP z)9iyQ3+ly{h!{@93m-tUPx=cUvh6#f(H@Q6)lZDgJ$>cO7d&J;4!qOXy?R8yn?YrF z)5o*g;kN+D*~i;@#>Ot1#`A+JiEit*Y8?}lLNsHIs_ir?%zumS;?lD4J;2DZPK+6C z^Ni;Q66G?V9E}Hn`9U;sap)uwxi>^EIXcn$KFaR6;>{i2ei8SBzWM1(r-^&rioW@= zSz3s|TRg@@U$>~3_L5w9p@Vkoyx1LORtY*~2ESj!qu(c98Bk6vDZfL6HyEegupk0& zbm%5EFjj=^-yxD)j*=*accD6B{-N?>!|6e?^xu!QI~lxH8&P+H=@nPiv-0)>ld;N; zR=Q7jZ7$1h*6)4rPDV!*yO$^4sSqVUJ^G7wlZsMkkFg5JZwdDWhfEiR*4JnDEifYV zo7CH8gsXO(@K2zzWdsj z#kDg0U5Pusb&hH`!&GN#`+IK2Qi%^f|ISxN$%NK!+@G(k)7*8VZno1qXt_|Q7yCC` zF}CDAzh|+frCH9q}}FB)^)s�BwPoVE8g_$PqU|}MU_^M>(y@H?6f^iW3xcYMeA?dQ5i7@MTU;XN?l zS;u*Y7c=}l`hCff=v+=XS;hj%sJE zQNEL!YxgDpMA&1Ru`QFU@aXM_4R797^9m!!`vAropNKJRb{pQ%;{6^npo(@Rt6s3% zkoSgY9kDKIN!HBA+p-e!XJ~sL{KiDz$;_>`Q3R|jbcY6v*S<=@b1j~!sMA0fYxIGQ zr2hs#x7PMF`Ha|Z>Sy{(HwtN#%QW@>>fh;SlKe#d%d_XtTOtCb3X71k7|B_PK&8i< zF4E~=lwSV0NS|d#A-yfhG)_peK~ffivZf(W>b@nJ#$U2LRQgM?A^RAs*b2Qud;dl- zwkyPowfF=PD5d_L{!$Do3*M~M{t|2>*(i#^eu4<}P}MwbFJrYs{)y0~FuNp4xnTRe znN!*Mzq}*Du8(?d*`QkZ?|c4yu!cY>y&j}1rrKq<7x G*#86hDNT$3 literal 0 HcmV?d00001 diff --git a/src/gym/envs/robotics/assets/stls/hand/forearm_electric.stl b/src/gym/envs/robotics/assets/stls/hand/forearm_electric.stl new file mode 100644 index 0000000000000000000000000000000000000000..80f6f3da18910adf264507190fbb4d074a9da32f GIT binary patch literal 934534 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 LE9G3g7Wlsa3C_f~ literal 0 HcmV?d00001 diff --git a/src/gym/envs/robotics/assets/textures/block_hidden.png b/src/gym/envs/robotics/assets/textures/block_hidden.png new file mode 100644 index 0000000000000000000000000000000000000000..e08b8613c4dfede9786e5ed841dc6dd529fef92e GIT binary patch literal 40953 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 z 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 self.distance_threshold).astype(np.float32) + else: + return -d + + # RobotEnv methods + # ---------------------------- + + def _step_callback(self): + if self.block_gripper: + self.sim.data.set_joint_qpos('robot0:l_gripper_finger_joint', 0.) + self.sim.data.set_joint_qpos('robot0:r_gripper_finger_joint', 0.) + self.sim.forward() + + def _set_action(self, action): + assert action.shape == (4,) + action = action.copy() # ensure that we don't change the action outside of this scope + pos_ctrl, gripper_ctrl = action[:3], action[3] + + pos_ctrl *= 0.05 # limit maximum change in position + rot_ctrl = [1., 0., 1., 0.] # fixed rotation of the end effector, expressed as a quaternion + gripper_ctrl = np.array([gripper_ctrl, gripper_ctrl]) + assert gripper_ctrl.shape == (2,) + if self.block_gripper: + gripper_ctrl = np.zeros_like(gripper_ctrl) + action = np.concatenate([pos_ctrl, rot_ctrl, gripper_ctrl]) + + # Apply action to simulation. + utils.ctrl_set_action(self.sim, action) + utils.mocap_set_action(self.sim, action) + + def _get_obs(self): + # positions + grip_pos = self.sim.data.get_site_xpos('robot0:grip') + dt = self.sim.nsubsteps * self.sim.model.opt.timestep + grip_velp = self.sim.data.get_site_xvelp('robot0:grip') * dt + robot_qpos, robot_qvel = utils.robot_get_obs(self.sim) + if self.has_object: + object_pos = self.sim.data.get_site_xpos('object0') + # rotations + object_rot = rotations.mat2euler(self.sim.data.get_site_xmat('object0')) + # velocities + object_velp = self.sim.data.get_site_xvelp('object0') * dt + object_velr = self.sim.data.get_site_xvelr('object0') * dt + # gripper state + object_rel_pos = object_pos - grip_pos + object_velp -= grip_velp + else: + object_pos = object_rot = object_velp = object_velr = object_rel_pos = np.zeros(0) + gripper_state = robot_qpos[-2:] + gripper_vel = robot_qvel[-2:] * dt # change to a scalar if the gripper is made symmetric + + if not self.has_object: + achieved_goal = grip_pos.copy() + else: + achieved_goal = np.squeeze(object_pos.copy()) + obs = np.concatenate([ + grip_pos, object_pos.ravel(), object_rel_pos.ravel(), gripper_state, object_rot.ravel(), + object_velp.ravel(), object_velr.ravel(), grip_velp, gripper_vel, + ]) + + return { + 'observation': obs.copy(), + 'achieved_goal': achieved_goal.copy(), + 'desired_goal': self.goal.copy(), + } + + def _viewer_setup(self): + body_id = self.sim.model.body_name2id('robot0:gripper_link') + lookat = self.sim.data.body_xpos[body_id] + for idx, value in enumerate(lookat): + self.viewer.cam.lookat[idx] = value + self.viewer.cam.distance = 2.5 + self.viewer.cam.azimuth = 132. + self.viewer.cam.elevation = -14. + + def _render_callback(self): + # Visualize target. + sites_offset = (self.sim.data.site_xpos - self.sim.model.site_pos).copy() + site_id = self.sim.model.site_name2id('target0') + self.sim.model.site_pos[site_id] = self.goal - sites_offset[0] + self.sim.forward() + + def _reset_sim(self): + self.sim.set_state(self.initial_state) + + # Randomize start position of object. + if self.has_object: + object_xpos = self.initial_gripper_xpos[:2] + while np.linalg.norm(object_xpos - self.initial_gripper_xpos[:2]) < 0.1: + object_xpos = self.initial_gripper_xpos[:2] + self.np_random.uniform(-self.obj_range, self.obj_range, size=2) + object_qpos = self.sim.data.get_joint_qpos('object0:joint') + assert object_qpos.shape == (7,) + object_qpos[:2] = object_xpos + self.sim.data.set_joint_qpos('object0:joint', object_qpos) + + self.sim.forward() + return True + + def _sample_goal(self): + if self.has_object: + goal = self.initial_gripper_xpos[:3] + self.np_random.uniform(-self.target_range, self.target_range, size=3) + goal += self.target_offset + goal[2] = self.height_offset + if self.target_in_the_air and self.np_random.uniform() < 0.5: + goal[2] += self.np_random.uniform(0, 0.45) + else: + goal = self.initial_gripper_xpos[:3] + self.np_random.uniform(-0.15, 0.15, size=3) + return goal.copy() + + def _is_success(self, achieved_goal, desired_goal): + d = goal_distance(achieved_goal, desired_goal) + return (d < self.distance_threshold).astype(np.float32) + + def _env_setup(self, initial_qpos): + for name, value in initial_qpos.items(): + self.sim.data.set_joint_qpos(name, value) + utils.reset_mocap_welds(self.sim) + self.sim.forward() + + # Move end effector into position. + gripper_target = np.array([-0.498, 0.005, -0.431 + self.gripper_extra_height]) + self.sim.data.get_site_xpos('robot0:grip') + gripper_rotation = np.array([1., 0., 1., 0.]) + self.sim.data.set_mocap_pos('robot0:mocap', gripper_target) + self.sim.data.set_mocap_quat('robot0:mocap', gripper_rotation) + for _ in range(10): + self.sim.step() + + # Extract information for sampling goals. + self.initial_gripper_xpos = self.sim.data.get_site_xpos('robot0:grip').copy() + if self.has_object: + self.height_offset = self.sim.data.get_site_xpos('object0')[2] diff --git a/src/gym/envs/robotics/hand/__init__.py b/src/gym/envs/robotics/hand/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/gym/envs/robotics/hand/manipulate.py b/src/gym/envs/robotics/hand/manipulate.py new file mode 100644 index 0000000..e488d49 --- /dev/null +++ b/src/gym/envs/robotics/hand/manipulate.py @@ -0,0 +1,292 @@ +import numpy as np + +from gym import utils, error +from gym.envs.robotics import rotations, hand_env +from gym.envs.robotics.utils import robot_get_obs + +try: + import mujoco_py +except ImportError as e: + raise error.DependencyNotInstalled("{}. (HINT: you need to install mujoco_py, and also perform the setup instructions here: https://github.com/openai/mujoco-py/.)".format(e)) + + +def quat_from_angle_and_axis(angle, axis): + assert axis.shape == (3,) + axis /= np.linalg.norm(axis) + quat = np.concatenate([[np.cos(angle / 2.)], np.sin(angle / 2.) * axis]) + quat /= np.linalg.norm(quat) + return quat + + +class ManipulateEnv(hand_env.HandEnv, utils.EzPickle): + def __init__( + self, model_path, target_position, target_rotation, + target_position_range, reward_type, initial_qpos={}, + randomize_initial_position=True, randomize_initial_rotation=True, + distance_threshold=0.01, rotation_threshold=0.1, n_substeps=20, relative_control=False, + ignore_z_target_rotation=False, + ): + """Initializes a new Hand manipulation environment. + + Args: + model_path (string): path to the environments XML file + target_position (string): the type of target position: + - ignore: target position is fully ignored, i.e. the object can be positioned arbitrarily + - fixed: target position is set to the initial position of the object + - random: target position is fully randomized according to target_position_range + target_rotation (string): the type of target rotation: + - ignore: target rotation is fully ignored, i.e. the object can be rotated arbitrarily + - fixed: target rotation is set to the initial rotation of the object + - xyz: fully randomized target rotation around the X, Y and Z axis + - z: fully randomized target rotation around the Z axis + - parallel: fully randomized target rotation around Z and axis-aligned rotation around X, Y + ignore_z_target_rotation (boolean): whether or not the Z axis of the target rotation is ignored + target_position_range (np.array of shape (3, 2)): range of the target_position randomization + reward_type ('sparse' or 'dense'): the reward type, i.e. sparse or dense + initial_qpos (dict): a dictionary of joint names and values that define the initial configuration + randomize_initial_position (boolean): whether or not to randomize the initial position of the object + randomize_initial_rotation (boolean): whether or not to randomize the initial rotation of the object + distance_threshold (float, in meters): the threshold after which the position of a goal is considered achieved + rotation_threshold (float, in radians): the threshold after which the rotation of a goal is considered achieved + n_substeps (int): number of substeps the simulation runs on every call to step + relative_control (boolean): whether or not the hand is actuated in absolute joint positions or relative to the current state + """ + self.target_position = target_position + self.target_rotation = target_rotation + self.target_position_range = target_position_range + self.parallel_quats = [rotations.euler2quat(r) for r in rotations.get_parallel_rotations()] + self.randomize_initial_rotation = randomize_initial_rotation + self.randomize_initial_position = randomize_initial_position + self.distance_threshold = distance_threshold + self.rotation_threshold = rotation_threshold + self.reward_type = reward_type + self.ignore_z_target_rotation = ignore_z_target_rotation + + assert self.target_position in ['ignore', 'fixed', 'random'] + assert self.target_rotation in ['ignore', 'fixed', 'xyz', 'z', 'parallel'] + + hand_env.HandEnv.__init__( + self, model_path, n_substeps=n_substeps, initial_qpos=initial_qpos, + relative_control=relative_control) + utils.EzPickle.__init__(self) + + def _get_achieved_goal(self): + # Object position and rotation. + object_qpos = self.sim.data.get_joint_qpos('object:joint') + assert object_qpos.shape == (7,) + return object_qpos + + def _goal_distance(self, goal_a, goal_b): + assert goal_a.shape == goal_b.shape + assert goal_a.shape[-1] == 7 + + d_pos = np.zeros_like(goal_a[..., 0]) + d_rot = np.zeros_like(goal_b[..., 0]) + if self.target_position != 'ignore': + delta_pos = goal_a[..., :3] - goal_b[..., :3] + d_pos = np.linalg.norm(delta_pos, axis=-1) + + if self.target_rotation != 'ignore': + quat_a, quat_b = goal_a[..., 3:], goal_b[..., 3:] + + if self.ignore_z_target_rotation: + # Special case: We want to ignore the Z component of the rotation. + # This code here assumes Euler angles with xyz convention. We first transform + # to euler, then set the Z component to be equal between the two, and finally + # transform back into quaternions. + euler_a = rotations.quat2euler(quat_a) + euler_b = rotations.quat2euler(quat_b) + euler_a[2] = euler_b[2] + quat_a = rotations.euler2quat(euler_a) + + # Subtract quaternions and extract angle between them. + quat_diff = rotations.quat_mul(quat_a, rotations.quat_conjugate(quat_b)) + angle_diff = 2 * np.arccos(np.clip(quat_diff[..., 0], -1., 1.)) + d_rot = angle_diff + assert d_pos.shape == d_rot.shape + return d_pos, d_rot + + # GoalEnv methods + # ---------------------------- + + def compute_reward(self, achieved_goal, goal, info): + if self.reward_type == 'sparse': + success = self._is_success(achieved_goal, goal).astype(np.float32) + return (success - 1.) + else: + d_pos, d_rot = self._goal_distance(achieved_goal, goal) + # We weigh the difference in position to avoid that `d_pos` (in meters) is completely + # dominated by `d_rot` (in radians). + return -(10. * d_pos + d_rot) + + # RobotEnv methods + # ---------------------------- + + def _is_success(self, achieved_goal, desired_goal): + d_pos, d_rot = self._goal_distance(achieved_goal, desired_goal) + achieved_pos = (d_pos < self.distance_threshold).astype(np.float32) + achieved_rot = (d_rot < self.rotation_threshold).astype(np.float32) + achieved_both = achieved_pos * achieved_rot + return achieved_both + + def _env_setup(self, initial_qpos): + for name, value in initial_qpos.items(): + self.sim.data.set_joint_qpos(name, value) + self.sim.forward() + + def _reset_sim(self): + self.sim.set_state(self.initial_state) + self.sim.forward() + + initial_qpos = self.sim.data.get_joint_qpos('object:joint').copy() + initial_pos, initial_quat = initial_qpos[:3], initial_qpos[3:] + assert initial_qpos.shape == (7,) + assert initial_pos.shape == (3,) + assert initial_quat.shape == (4,) + initial_qpos = None + + # Randomization initial rotation. + if self.randomize_initial_rotation: + if self.target_rotation == 'z': + angle = self.np_random.uniform(-np.pi, np.pi) + axis = np.array([0., 0., 1.]) + offset_quat = quat_from_angle_and_axis(angle, axis) + initial_quat = rotations.quat_mul(initial_quat, offset_quat) + elif self.target_rotation == 'parallel': + angle = self.np_random.uniform(-np.pi, np.pi) + axis = np.array([0., 0., 1.]) + z_quat = quat_from_angle_and_axis(angle, axis) + parallel_quat = self.parallel_quats[self.np_random.randint(len(self.parallel_quats))] + offset_quat = rotations.quat_mul(z_quat, parallel_quat) + initial_quat = rotations.quat_mul(initial_quat, offset_quat) + elif self.target_rotation in ['xyz', 'ignore']: + angle = self.np_random.uniform(-np.pi, np.pi) + axis = self.np_random.uniform(-1., 1., size=3) + offset_quat = quat_from_angle_and_axis(angle, axis) + initial_quat = rotations.quat_mul(initial_quat, offset_quat) + elif self.target_rotation == 'fixed': + pass + else: + raise error.Error('Unknown target_rotation option "{}".'.format(self.target_rotation)) + + # Randomize initial position. + if self.randomize_initial_position: + if self.target_position != 'fixed': + initial_pos += self.np_random.normal(size=3, scale=0.005) + + initial_quat /= np.linalg.norm(initial_quat) + initial_qpos = np.concatenate([initial_pos, initial_quat]) + self.sim.data.set_joint_qpos('object:joint', initial_qpos) + + def is_on_palm(): + self.sim.forward() + cube_middle_idx = self.sim.model.site_name2id('object:center') + cube_middle_pos = self.sim.data.site_xpos[cube_middle_idx] + is_on_palm = (cube_middle_pos[2] > 0.04) + return is_on_palm + + # Run the simulation for a bunch of timesteps to let everything settle in. + for _ in range(10): + self._set_action(np.zeros(20)) + try: + self.sim.step() + except mujoco_py.MujocoException: + return False + return is_on_palm() + + def _sample_goal(self): + # Select a goal for the object position. + target_pos = None + if self.target_position == 'random': + assert self.target_position_range.shape == (3, 2) + offset = self.np_random.uniform(self.target_position_range[:, 0], self.target_position_range[:, 1]) + assert offset.shape == (3,) + target_pos = self.sim.data.get_joint_qpos('object:joint')[:3] + offset + elif self.target_position in ['ignore', 'fixed']: + target_pos = self.sim.data.get_joint_qpos('object:joint')[:3] + else: + raise error.Error('Unknown target_position option "{}".'.format(self.target_position)) + assert target_pos is not None + assert target_pos.shape == (3,) + + # Select a goal for the object rotation. + target_quat = None + if self.target_rotation == 'z': + angle = self.np_random.uniform(-np.pi, np.pi) + axis = np.array([0., 0., 1.]) + target_quat = quat_from_angle_and_axis(angle, axis) + elif self.target_rotation == 'parallel': + angle = self.np_random.uniform(-np.pi, np.pi) + axis = np.array([0., 0., 1.]) + target_quat = quat_from_angle_and_axis(angle, axis) + parallel_quat = self.parallel_quats[self.np_random.randint(len(self.parallel_quats))] + target_quat = rotations.quat_mul(target_quat, parallel_quat) + elif self.target_rotation == 'xyz': + angle = self.np_random.uniform(-np.pi, np.pi) + axis = self.np_random.uniform(-1., 1., size=3) + target_quat = quat_from_angle_and_axis(angle, axis) + elif self.target_rotation in ['ignore', 'fixed']: + target_quat = self.sim.data.get_joint_qpos('object:joint') + else: + raise error.Error('Unknown target_rotation option "{}".'.format(self.target_rotation)) + assert target_quat is not None + assert target_quat.shape == (4,) + + target_quat /= np.linalg.norm(target_quat) # normalized quaternion + goal = np.concatenate([target_pos, target_quat]) + return goal + + def _render_callback(self): + # Assign current state to target object but offset a bit so that the actual object + # is not obscured. + goal = self.goal.copy() + assert goal.shape == (7,) + if self.target_position == 'ignore': + # Move the object to the side since we do not care about it's position. + goal[0] += 0.15 + self.sim.data.set_joint_qpos('target:joint', goal) + self.sim.data.set_joint_qvel('target:joint', np.zeros(6)) + + if 'object_hidden' in self.sim.model.geom_names: + hidden_id = self.sim.model.geom_name2id('object_hidden') + self.sim.model.geom_rgba[hidden_id, 3] = 1. + self.sim.forward() + + def _get_obs(self): + robot_qpos, robot_qvel = robot_get_obs(self.sim) + object_qvel = self.sim.data.get_joint_qvel('object:joint') + achieved_goal = self._get_achieved_goal().ravel() # this contains the object position + rotation + observation = np.concatenate([robot_qpos, robot_qvel, object_qvel, achieved_goal]) + return { + 'observation': observation.copy(), + 'achieved_goal': achieved_goal.copy(), + 'desired_goal': self.goal.ravel().copy(), + } + + +class HandBlockEnv(ManipulateEnv): + def __init__(self, target_position='random', target_rotation='xyz', reward_type='sparse'): + super(HandBlockEnv, self).__init__( + model_path='hand/manipulate_block.xml', target_position=target_position, + target_rotation=target_rotation, + target_position_range=np.array([(-0.04, 0.04), (-0.06, 0.02), (0.0, 0.06)]), + reward_type=reward_type) + + +class HandEggEnv(ManipulateEnv): + def __init__(self, target_position='random', target_rotation='xyz', reward_type='sparse'): + super(HandEggEnv, self).__init__( + model_path='hand/manipulate_egg.xml', target_position=target_position, + target_rotation=target_rotation, + target_position_range=np.array([(-0.04, 0.04), (-0.06, 0.02), (0.0, 0.06)]), + reward_type=reward_type) + + +class HandPenEnv(ManipulateEnv): + def __init__(self, target_position='random', target_rotation='xyz', reward_type='sparse'): + super(HandPenEnv, self).__init__( + model_path='hand/manipulate_pen.xml', target_position=target_position, + target_rotation=target_rotation, + target_position_range=np.array([(-0.04, 0.04), (-0.06, 0.02), (0.0, 0.06)]), + randomize_initial_rotation=False, reward_type=reward_type, + ignore_z_target_rotation=True, distance_threshold=0.05) diff --git a/src/gym/envs/robotics/hand/reach.py b/src/gym/envs/robotics/hand/reach.py new file mode 100644 index 0000000..1f6f9f8 --- /dev/null +++ b/src/gym/envs/robotics/hand/reach.py @@ -0,0 +1,144 @@ +import numpy as np + +from gym import utils +from gym.envs.robotics import hand_env +from gym.envs.robotics.utils import robot_get_obs + + +FINGERTIP_SITE_NAMES = [ + 'robot0:S_fftip', + 'robot0:S_mftip', + 'robot0:S_rftip', + 'robot0:S_lftip', + 'robot0:S_thtip', +] + + +DEFAULT_INITIAL_QPOS = { + 'robot0:WRJ1': -0.16514339750464327, + 'robot0:WRJ0': -0.31973286565062153, + 'robot0:FFJ3': 0.14340512546557435, + 'robot0:FFJ2': 0.32028208333591573, + 'robot0:FFJ1': 0.7126053607727917, + 'robot0:FFJ0': 0.6705281001412586, + 'robot0:MFJ3': 0.000246444303701037, + 'robot0:MFJ2': 0.3152655251085491, + 'robot0:MFJ1': 0.7659800313729842, + 'robot0:MFJ0': 0.7323156897425923, + 'robot0:RFJ3': 0.00038520700007378114, + 'robot0:RFJ2': 0.36743546201985233, + 'robot0:RFJ1': 0.7119514095008576, + 'robot0:RFJ0': 0.6699446327514138, + 'robot0:LFJ4': 0.0525442258033891, + 'robot0:LFJ3': -0.13615534724474673, + 'robot0:LFJ2': 0.39872030433433003, + 'robot0:LFJ1': 0.7415570009679252, + 'robot0:LFJ0': 0.704096378652974, + 'robot0:THJ4': 0.003673823825070126, + 'robot0:THJ3': 0.5506291436028695, + 'robot0:THJ2': -0.014515151997119306, + 'robot0:THJ1': -0.0015229223564485414, + 'robot0:THJ0': -0.7894883021600622, +} + + +def goal_distance(goal_a, goal_b): + assert goal_a.shape == goal_b.shape + return np.linalg.norm(goal_a - goal_b, axis=-1) + + +class HandReachEnv(hand_env.HandEnv, utils.EzPickle): + def __init__( + self, distance_threshold=0.01, n_substeps=20, relative_control=False, + initial_qpos=DEFAULT_INITIAL_QPOS, reward_type='sparse', + ): + self.distance_threshold = distance_threshold + self.reward_type = reward_type + + hand_env.HandEnv.__init__( + self, 'hand/reach.xml', n_substeps=n_substeps, initial_qpos=initial_qpos, + relative_control=relative_control) + utils.EzPickle.__init__(self) + + def _get_achieved_goal(self): + goal = [self.sim.data.get_site_xpos(name) for name in FINGERTIP_SITE_NAMES] + return np.array(goal).flatten() + + # GoalEnv methods + # ---------------------------- + + def compute_reward(self, achieved_goal, goal, info): + d = goal_distance(achieved_goal, goal) + if self.reward_type == 'sparse': + return -(d > self.distance_threshold).astype(np.float32) + else: + return -d + + # RobotEnv methods + # ---------------------------- + + def _env_setup(self, initial_qpos): + for name, value in initial_qpos.items(): + self.sim.data.set_joint_qpos(name, value) + self.sim.forward() + + self.initial_goal = self._get_achieved_goal().copy() + self.palm_xpos = self.sim.data.body_xpos[self.sim.model.body_name2id('robot0:palm')].copy() + + def _get_obs(self): + robot_qpos, robot_qvel = robot_get_obs(self.sim) + achieved_goal = self._get_achieved_goal().ravel() + observation = np.concatenate([robot_qpos, robot_qvel, achieved_goal]) + return { + 'observation': observation.copy(), + 'achieved_goal': achieved_goal.copy(), + 'desired_goal': self.goal.copy(), + } + + def _sample_goal(self): + thumb_name = 'robot0:S_thtip' + finger_names = [name for name in FINGERTIP_SITE_NAMES if name != thumb_name] + finger_name = self.np_random.choice(finger_names) + + thumb_idx = FINGERTIP_SITE_NAMES.index(thumb_name) + finger_idx = FINGERTIP_SITE_NAMES.index(finger_name) + assert thumb_idx != finger_idx + + # Pick a meeting point above the hand. + meeting_pos = self.palm_xpos + np.array([0.0, -0.09, 0.05]) + meeting_pos += self.np_random.normal(scale=0.005, size=meeting_pos.shape) + + # Slightly move meeting goal towards the respective finger to avoid that they + # overlap. + goal = self.initial_goal.copy().reshape(-1, 3) + for idx in [thumb_idx, finger_idx]: + offset_direction = (meeting_pos - goal[idx]) + offset_direction /= np.linalg.norm(offset_direction) + goal[idx] = meeting_pos - 0.005 * offset_direction + + if self.np_random.uniform() < 0.1: + # With some probability, ask all fingers to move back to the origin. + # This avoids that the thumb constantly stays near the goal position already. + goal = self.initial_goal.copy() + return goal.flatten() + + def _is_success(self, achieved_goal, desired_goal): + d = goal_distance(achieved_goal, desired_goal) + return (d < self.distance_threshold).astype(np.float32) + + def _render_callback(self): + # Visualize targets. + sites_offset = (self.sim.data.site_xpos - self.sim.model.site_pos).copy() + goal = self.goal.reshape(5, 3) + for finger_idx in range(5): + site_name = 'target{}'.format(finger_idx) + site_id = self.sim.model.site_name2id(site_name) + self.sim.model.site_pos[site_id] = goal[finger_idx] - sites_offset[site_id] + + # Visualize finger positions. + achieved_goal = self._get_achieved_goal().reshape(5, 3) + for finger_idx in range(5): + site_name = 'finger{}'.format(finger_idx) + site_id = self.sim.model.site_name2id(site_name) + self.sim.model.site_pos[site_id] = achieved_goal[finger_idx] - sites_offset[site_id] + self.sim.forward() diff --git a/src/gym/envs/robotics/hand_env.py b/src/gym/envs/robotics/hand_env.py new file mode 100644 index 0000000..2b068b0 --- /dev/null +++ b/src/gym/envs/robotics/hand_env.py @@ -0,0 +1,49 @@ +import os +import copy +import numpy as np + +import gym +from gym import error, spaces +from gym.utils import seeding +from gym.envs.robotics import robot_env + + +class HandEnv(robot_env.RobotEnv): + def __init__(self, model_path, n_substeps, initial_qpos, relative_control): + self.relative_control = relative_control + + super(HandEnv, self).__init__( + model_path=model_path, n_substeps=n_substeps, n_actions=20, + initial_qpos=initial_qpos) + + # RobotEnv methods + # ---------------------------- + + def _set_action(self, action): + assert action.shape == (20,) + + ctrlrange = self.sim.model.actuator_ctrlrange + actuation_range = (ctrlrange[:, 1] - ctrlrange[:, 0]) / 2. + if self.relative_control: + actuation_center = np.zeros_like(action) + for i in range(self.sim.data.ctrl.shape[0]): + actuation_center[i] = self.sim.data.get_joint_qpos( + self.sim.model.actuator_names[i].replace(':A_', ':')) + for joint_name in ['FF', 'MF', 'RF', 'LF']: + act_idx = self.sim.model.actuator_name2id( + 'robot0:A_{}J1'.format(joint_name)) + actuation_center[act_idx] += self.sim.data.get_joint_qpos( + 'robot0:{}J0'.format(joint_name)) + else: + actuation_center = (ctrlrange[:, 1] + ctrlrange[:, 0]) / 2. + self.sim.data.ctrl[:] = actuation_center + action * actuation_range + self.sim.data.ctrl[:] = np.clip(self.sim.data.ctrl, ctrlrange[:, 0], ctrlrange[:, 1]) + + def _viewer_setup(self): + body_id = self.sim.model.body_name2id('robot0:palm') + lookat = self.sim.data.body_xpos[body_id] + for idx, value in enumerate(lookat): + self.viewer.cam.lookat[idx] = value + self.viewer.cam.distance = 0.5 + self.viewer.cam.azimuth = 55. + self.viewer.cam.elevation = -25. diff --git a/src/gym/envs/robotics/robot_env.py b/src/gym/envs/robotics/robot_env.py new file mode 100644 index 0000000..6d07140 --- /dev/null +++ b/src/gym/envs/robotics/robot_env.py @@ -0,0 +1,162 @@ +import os +import copy +import numpy as np + +import gym +from gym import error, spaces +from gym.utils import seeding + +try: + import mujoco_py +except ImportError as e: + raise error.DependencyNotInstalled("{}. (HINT: you need to install mujoco_py, and also perform the setup instructions here: https://github.com/openai/mujoco-py/.)".format(e)) + + +class RobotEnv(gym.GoalEnv): + def __init__(self, model_path, initial_qpos, n_actions, n_substeps): + if model_path.startswith('/'): + fullpath = model_path + else: + fullpath = os.path.join(os.path.dirname(__file__), 'assets', model_path) + if not os.path.exists(fullpath): + raise IOError('File {} does not exist'.format(fullpath)) + + model = mujoco_py.load_model_from_path(fullpath) + self.sim = mujoco_py.MjSim(model, nsubsteps=n_substeps) + self.viewer = None + + self.metadata = { + 'render.modes': ['human', 'rgb_array'], + 'video.frames_per_second': int(np.round(1.0 / self.dt)) + } + + self.seed() + self._env_setup(initial_qpos=initial_qpos) + self.initial_state = copy.deepcopy(self.sim.get_state()) + + self.goal = self._sample_goal() + obs = self._get_obs() + self.action_space = spaces.Box(-1., 1., shape=(n_actions,), dtype='float32') + self.observation_space = spaces.Dict(dict( + desired_goal=spaces.Box(-np.inf, np.inf, shape=obs['achieved_goal'].shape, dtype='float32'), + achieved_goal=spaces.Box(-np.inf, np.inf, shape=obs['achieved_goal'].shape, dtype='float32'), + observation=spaces.Box(-np.inf, np.inf, shape=obs['observation'].shape, dtype='float32'), + )) + + @property + def dt(self): + return self.sim.model.opt.timestep * self.sim.nsubsteps + + # Env methods + # ---------------------------- + + def seed(self, seed=None): + self.np_random, seed = seeding.np_random(seed) + return [seed] + + def step(self, action): + action = np.clip(action, self.action_space.low, self.action_space.high) + self._set_action(action) + self.sim.step() + self._step_callback() + obs = self._get_obs() + + done = False + info = { + 'is_success': self._is_success(obs['achieved_goal'], self.goal), + } + reward = self.compute_reward(obs['achieved_goal'], self.goal, info) + return obs, reward, done, info + + def reset(self): + # Attempt to reset the simulator. Since we randomize initial conditions, it + # is possible to get into a state with numerical issues (e.g. due to penetration or + # Gimbel lock) or we may not achieve an initial condition (e.g. an object is within the hand). + # In this case, we just keep randomizing until we eventually achieve a valid initial + # configuration. + did_reset_sim = False + while not did_reset_sim: + did_reset_sim = self._reset_sim() + self.goal = self._sample_goal().copy() + obs = self._get_obs() + return obs + + def close(self): + if self.viewer is not None: + # self.viewer.finish() + self.viewer = None + + def render(self, mode='human'): + self._render_callback() + if mode == 'rgb_array': + self._get_viewer().render() + # window size used for old mujoco-py: + width, height = 500, 500 + data = self._get_viewer().read_pixels(width, height, depth=False) + # original image is upside-down, so flip it + return data[::-1, :, :] + elif mode == 'human': + self._get_viewer().render() + + def _get_viewer(self): + if self.viewer is None: + self.viewer = mujoco_py.MjViewer(self.sim) + self._viewer_setup() + return self.viewer + + # Extension methods + # ---------------------------- + + def _reset_sim(self): + """Resets a simulation and indicates whether or not it was successful. + If a reset was unsuccessful (e.g. if a randomized state caused an error in the + simulation), this method should indicate such a failure by returning False. + In such a case, this method will be called again to attempt a the reset again. + """ + self.sim.set_state(self.initial_state) + self.sim.forward() + return True + + def _get_obs(self): + """Returns the observation. + """ + raise NotImplementedError() + + def _set_action(self, action): + """Applies the given action to the simulation. + """ + raise NotImplementedError() + + def _is_success(self, achieved_goal, desired_goal): + """Indicates whether or not the achieved goal successfully achieved the desired goal. + """ + raise NotImplementedError() + + def _sample_goal(self): + """Samples a new goal and returns it. + """ + raise NotImplementedError() + + def _env_setup(self, initial_qpos): + """Initial configuration of the environment. Can be used to configure initial state + and extract information from the simulation. + """ + pass + + def _viewer_setup(self): + """Initial configuration of the viewer. Can be used to set the camera position, + for example. + """ + pass + + def _render_callback(self): + """A custom callback that is called before rendering. Can be used + to implement custom visualizations. + """ + pass + + def _step_callback(self): + """A custom callback that is called after stepping the simulation. Can be used + to enforce additional constraints on the simulation state. + """ + pass diff --git a/src/gym/envs/robotics/rotations.py b/src/gym/envs/robotics/rotations.py new file mode 100644 index 0000000..4aafb64 --- /dev/null +++ b/src/gym/envs/robotics/rotations.py @@ -0,0 +1,369 @@ +# Copyright (c) 2009-2017, Matthew Brett and Christoph Gohlke +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# 1. Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# Many methods borrow heavily or entirely from transforms3d: +# https://github.com/matthew-brett/transforms3d +# They have mostly been modified to support batched operations. + +import numpy as np +import itertools + +''' +Rotations +========= + +Note: these have caused many subtle bugs in the past. +Be careful while updating these methods and while using them in clever ways. + +See MuJoCo documentation here: http://mujoco.org/book/modeling.html#COrientation + +Conventions +----------- + - All functions accept batches as well as individual rotations + - All rotation conventions match respective MuJoCo defaults + - All angles are in radians + - Matricies follow LR convention + - Euler Angles are all relative with 'xyz' axes ordering + - See specific representation for more information + +Representations +--------------- + +Euler + There are many euler angle frames -- here we will strive to use the default + in MuJoCo, which is eulerseq='xyz'. + This frame is a relative rotating frame, about x, y, and z axes in order. + Relative rotating means that after we rotate about x, then we use the + new (rotated) y, and the same for z. + +Quaternions + These are defined in terms of rotation (angle) about a unit vector (x, y, z) + We use the following convention: + q0 = cos(angle / 2) + q1 = sin(angle / 2) * x + q2 = sin(angle / 2) * y + q3 = sin(angle / 2) * z + This is also sometimes called qw, qx, qy, qz. + Note that quaternions are ambiguous, because we can represent a rotation by + angle about vector and -angle about vector <-x, -y, -z>. + To choose between these, we pick "first nonzero positive", where we + make the first nonzero element of the quaternion positive. + This can result in mismatches if you're converting an quaternion that is not + "first nonzero positive" to a different representation and back. + +Axis Angle + (Not currently implemented) + These are very straightforward. Rotation is angle about a unit vector. + +XY Axes + (Not currently implemented) + We are given x axis and y axis, and z axis is cross product of x and y. + +Z Axis + This is NOT RECOMMENDED. Defines a unit vector for the Z axis, + but rotation about this axis is not well defined. + Instead pick a fixed reference direction for another axis (e.g. X) + and calculate the other (e.g. Y = Z cross-product X), + then use XY Axes rotation instead. + +SO3 + (Not currently implemented) + While not supported by MuJoCo, this representation has a lot of nice features. + We expect to add support for these in the future. + +TODO / Missing +-------------- + - Rotation integration or derivatives (e.g. velocity conversions) + - More representations (SO3, etc) + - Random sampling (e.g. sample uniform random rotation) + - Performance benchmarks/measurements + - (Maybe) define everything as to/from matricies, for simplicity +''' + +# For testing whether a number is close to zero +_FLOAT_EPS = np.finfo(np.float64).eps +_EPS4 = _FLOAT_EPS * 4.0 + + +def euler2mat(euler): + """ Convert Euler Angles to Rotation Matrix. See rotation.py for notes """ + euler = np.asarray(euler, dtype=np.float64) + assert euler.shape[-1] == 3, "Invalid shaped euler {}".format(euler) + + ai, aj, ak = -euler[..., 2], -euler[..., 1], -euler[..., 0] + si, sj, sk = np.sin(ai), np.sin(aj), np.sin(ak) + ci, cj, ck = np.cos(ai), np.cos(aj), np.cos(ak) + cc, cs = ci * ck, ci * sk + sc, ss = si * ck, si * sk + + mat = np.empty(euler.shape[:-1] + (3, 3), dtype=np.float64) + mat[..., 2, 2] = cj * ck + mat[..., 2, 1] = sj * sc - cs + mat[..., 2, 0] = sj * cc + ss + mat[..., 1, 2] = cj * sk + mat[..., 1, 1] = sj * ss + cc + mat[..., 1, 0] = sj * cs - sc + mat[..., 0, 2] = -sj + mat[..., 0, 1] = cj * si + mat[..., 0, 0] = cj * ci + return mat + + +def euler2quat(euler): + """ Convert Euler Angles to Quaternions. See rotation.py for notes """ + euler = np.asarray(euler, dtype=np.float64) + assert euler.shape[-1] == 3, "Invalid shape euler {}".format(euler) + + ai, aj, ak = euler[..., 2] / 2, -euler[..., 1] / 2, euler[..., 0] / 2 + si, sj, sk = np.sin(ai), np.sin(aj), np.sin(ak) + ci, cj, ck = np.cos(ai), np.cos(aj), np.cos(ak) + cc, cs = ci * ck, ci * sk + sc, ss = si * ck, si * sk + + quat = np.empty(euler.shape[:-1] + (4,), dtype=np.float64) + quat[..., 0] = cj * cc + sj * ss + quat[..., 3] = cj * sc - sj * cs + quat[..., 2] = -(cj * ss + sj * cc) + quat[..., 1] = cj * cs - sj * sc + return quat + + +def mat2euler(mat): + """ Convert Rotation Matrix to Euler Angles. See rotation.py for notes """ + mat = np.asarray(mat, dtype=np.float64) + assert mat.shape[-2:] == (3, 3), "Invalid shape matrix {}".format(mat) + + cy = np.sqrt(mat[..., 2, 2] * mat[..., 2, 2] + mat[..., 1, 2] * mat[..., 1, 2]) + condition = cy > _EPS4 + euler = np.empty(mat.shape[:-1], dtype=np.float64) + euler[..., 2] = np.where(condition, + -np.arctan2(mat[..., 0, 1], mat[..., 0, 0]), + -np.arctan2(-mat[..., 1, 0], mat[..., 1, 1])) + euler[..., 1] = np.where(condition, + -np.arctan2(-mat[..., 0, 2], cy), + -np.arctan2(-mat[..., 0, 2], cy)) + euler[..., 0] = np.where(condition, + -np.arctan2(mat[..., 1, 2], mat[..., 2, 2]), + 0.0) + return euler + + +def mat2quat(mat): + """ Convert Rotation Matrix to Quaternion. See rotation.py for notes """ + mat = np.asarray(mat, dtype=np.float64) + assert mat.shape[-2:] == (3, 3), "Invalid shape matrix {}".format(mat) + + Qxx, Qyx, Qzx = mat[..., 0, 0], mat[..., 0, 1], mat[..., 0, 2] + Qxy, Qyy, Qzy = mat[..., 1, 0], mat[..., 1, 1], mat[..., 1, 2] + Qxz, Qyz, Qzz = mat[..., 2, 0], mat[..., 2, 1], mat[..., 2, 2] + # Fill only lower half of symmetric matrix + K = np.zeros(mat.shape[:-2] + (4, 4), dtype=np.float64) + K[..., 0, 0] = Qxx - Qyy - Qzz + K[..., 1, 0] = Qyx + Qxy + K[..., 1, 1] = Qyy - Qxx - Qzz + K[..., 2, 0] = Qzx + Qxz + K[..., 2, 1] = Qzy + Qyz + K[..., 2, 2] = Qzz - Qxx - Qyy + K[..., 3, 0] = Qyz - Qzy + K[..., 3, 1] = Qzx - Qxz + K[..., 3, 2] = Qxy - Qyx + K[..., 3, 3] = Qxx + Qyy + Qzz + K /= 3.0 + # TODO: vectorize this -- probably could be made faster + q = np.empty(K.shape[:-2] + (4,)) + it = np.nditer(q[..., 0], flags=['multi_index']) + while not it.finished: + # Use Hermitian eigenvectors, values for speed + vals, vecs = np.linalg.eigh(K[it.multi_index]) + # Select largest eigenvector, reorder to w,x,y,z quaternion + q[it.multi_index] = vecs[[3, 0, 1, 2], np.argmax(vals)] + # Prefer quaternion with positive w + # (q * -1 corresponds to same rotation as q) + if q[it.multi_index][0] < 0: + q[it.multi_index] *= -1 + it.iternext() + return q + + +def quat2euler(quat): + """ Convert Quaternion to Euler Angles. See rotation.py for notes """ + return mat2euler(quat2mat(quat)) + + +def subtract_euler(e1, e2): + assert e1.shape == e2.shape + assert e1.shape[-1] == 3 + q1 = euler2quat(e1) + q2 = euler2quat(e2) + q_diff = quat_mul(q1, quat_conjugate(q2)) + return quat2euler(q_diff) + + +def quat2mat(quat): + """ Convert Quaternion to Euler Angles. See rotation.py for notes """ + quat = np.asarray(quat, dtype=np.float64) + assert quat.shape[-1] == 4, "Invalid shape quat {}".format(quat) + + w, x, y, z = quat[..., 0], quat[..., 1], quat[..., 2], quat[..., 3] + Nq = np.sum(quat * quat, axis=-1) + s = 2.0 / Nq + X, Y, Z = x * s, y * s, z * s + wX, wY, wZ = w * X, w * Y, w * Z + xX, xY, xZ = x * X, x * Y, x * Z + yY, yZ, zZ = y * Y, y * Z, z * Z + + mat = np.empty(quat.shape[:-1] + (3, 3), dtype=np.float64) + mat[..., 0, 0] = 1.0 - (yY + zZ) + mat[..., 0, 1] = xY - wZ + mat[..., 0, 2] = xZ + wY + mat[..., 1, 0] = xY + wZ + mat[..., 1, 1] = 1.0 - (xX + zZ) + mat[..., 1, 2] = yZ - wX + mat[..., 2, 0] = xZ - wY + mat[..., 2, 1] = yZ + wX + mat[..., 2, 2] = 1.0 - (xX + yY) + return np.where((Nq > _FLOAT_EPS)[..., np.newaxis, np.newaxis], mat, np.eye(3)) + +def quat_conjugate(q): + inv_q = -q + inv_q[..., 0] *= -1 + return inv_q + +def quat_mul(q0, q1): + assert q0.shape == q1.shape + assert q0.shape[-1] == 4 + assert q1.shape[-1] == 4 + + w0 = q0[..., 0] + x0 = q0[..., 1] + y0 = q0[..., 2] + z0 = q0[..., 3] + + w1 = q1[..., 0] + x1 = q1[..., 1] + y1 = q1[..., 2] + z1 = q1[..., 3] + + w = w0 * w1 - x0 * x1 - y0 * y1 - z0 * z1 + x = w0 * x1 + x0 * w1 + y0 * z1 - z0 * y1 + y = w0 * y1 + y0 * w1 + z0 * x1 - x0 * z1 + z = w0 * z1 + z0 * w1 + x0 * y1 - y0 * x1 + q = np.array([w, x, y, z]) + if q.ndim == 2: + q = q.swapaxes(0, 1) + assert q.shape == q0.shape + return q + +def quat_rot_vec(q, v0): + q_v0 = np.array([0, v0[0], v0[1], v0[2]]) + q_v = quat_mul(q, quat_mul(q_v0, quat_conjugate(q))) + v = q_v[1:] + return v + +def quat_identity(): + return np.array([1, 0, 0, 0]) + +def quat2axisangle(quat): + theta = 0; + axis = np.array([0, 0, 1]); + sin_theta = np.linalg.norm(quat[1:]) + + if (sin_theta > 0.0001): + theta = 2 * np.arcsin(sin_theta) + theta *= 1 if quat[0] >= 0 else -1 + axis = quat[1:] / sin_theta + + return axis, theta + +def euler2point_euler(euler): + _euler = euler.copy() + if len(_euler.shape) < 2: + _euler = np.expand_dims(_euler,0) + assert(_euler.shape[1] == 3) + _euler_sin = np.sin(_euler) + _euler_cos = np.cos(_euler) + return np.concatenate([_euler_sin, _euler_cos], axis=-1) + +def point_euler2euler(euler): + _euler = euler.copy() + if len(_euler.shape) < 2: + _euler = np.expand_dims(_euler,0) + assert(_euler.shape[1] == 6) + angle = np.arctan(_euler[..., :3] / _euler[..., 3:]) + angle[_euler[..., 3:] < 0] += np.pi + return angle + +def quat2point_quat(quat): + # Should be in qw, qx, qy, qz + _quat = quat.copy() + if len(_quat.shape) < 2: + _quat = np.expand_dims(_quat, 0) + assert(_quat.shape[1] == 4) + angle = np.arccos(_quat[:,[0]]) * 2 + xyz = _quat[:, 1:] + xyz[np.squeeze(np.abs(np.sin(angle/2))) >= 1e-5] = (xyz / np.sin(angle / 2))[np.squeeze(np.abs(np.sin(angle/2))) >= 1e-5] + return np.concatenate([np.sin(angle),np.cos(angle), xyz], axis=-1) + +def point_quat2quat(quat): + _quat = quat.copy() + if len(_quat.shape) < 2: + _quat = np.expand_dims(_quat, 0) + assert(_quat.shape[1] == 5) + angle = np.arctan(_quat[:,[0]] / _quat[:,[1]]) + qw = np.cos(angle / 2) + + qxyz = _quat[:, 2:] + qxyz[np.squeeze(np.abs(np.sin(angle/2))) >= 1e-5] = (qxyz * np.sin(angle/2))[np.squeeze(np.abs(np.sin(angle/2))) >= 1e-5] + return np.concatenate([qw, qxyz], axis=-1) + +def normalize_angles(angles): + '''Puts angles in [-pi, pi] range.''' + angles = angles.copy() + if angles.size > 0: + angles = (angles + np.pi) % (2 * np.pi) - np.pi + assert -np.pi-1e-6 <= angles.min() and angles.max() <= np.pi+1e-6 + return angles + +def round_to_straight_angles(angles): + '''Returns closest angle modulo 90 degrees ''' + angles = np.round(angles / (np.pi / 2)) * (np.pi / 2) + return normalize_angles(angles) + +def get_parallel_rotations(): + mult90 = [0, np.pi/2, -np.pi/2, np.pi] + parallel_rotations = [] + for euler in itertools.product(mult90, repeat=3): + canonical = mat2euler(euler2mat(euler)) + canonical = np.round(canonical / (np.pi / 2)) + if canonical[0] == -2: + canonical[0] = 2 + if canonical[2] == -2: + canonical[2] = 2 + canonical *= np.pi / 2 + if all([(canonical != rot).any() for rot in parallel_rotations]): + parallel_rotations += [canonical] + assert len(parallel_rotations) == 24 + return parallel_rotations diff --git a/src/gym/envs/robotics/utils.py b/src/gym/envs/robotics/utils.py new file mode 100644 index 0000000..a73e5f6 --- /dev/null +++ b/src/gym/envs/robotics/utils.py @@ -0,0 +1,96 @@ +import numpy as np + +from gym import error +try: + import mujoco_py +except ImportError as e: + raise error.DependencyNotInstalled("{}. (HINT: you need to install mujoco_py, and also perform the setup instructions here: https://github.com/openai/mujoco-py/.)".format(e)) + + +def robot_get_obs(sim): + """Returns all joint positions and velocities associated with + a robot. + """ + if sim.data.qpos is not None and sim.model.joint_names: + names = [n for n in sim.model.joint_names if n.startswith('robot')] + return ( + np.array([sim.data.get_joint_qpos(name) for name in names]), + np.array([sim.data.get_joint_qvel(name) for name in names]), + ) + return np.zeros(0), np.zeros(0) + + +def ctrl_set_action(sim, action): + """For torque actuators it copies the action into mujoco ctrl field. + For position actuators it sets the target relative to the current qpos. + """ + if sim.model.nmocap > 0: + _, action = np.split(action, (sim.model.nmocap * 7, )) + if sim.data.ctrl is not None: + for i in range(action.shape[0]): + if sim.model.actuator_biastype[i] == 0: + sim.data.ctrl[i] = action[i] + else: + idx = sim.model.jnt_qposadr[sim.model.actuator_trnid[i, 0]] + sim.data.ctrl[i] = sim.data.qpos[idx] + action[i] + + +def mocap_set_action(sim, action): + """The action controls the robot using mocaps. Specifically, bodies + on the robot (for example the gripper wrist) is controlled with + mocap bodies. In this case the action is the desired difference + in position and orientation (quaternion), in world coordinates, + of the of the target body. The mocap is positioned relative to + the target body according to the delta, and the MuJoCo equality + constraint optimizer tries to center the welded body on the mocap. + """ + if sim.model.nmocap > 0: + action, _ = np.split(action, (sim.model.nmocap * 7, )) + action = action.reshape(sim.model.nmocap, 7) + + pos_delta = action[:, :3] + quat_delta = action[:, 3:] + + reset_mocap2body_xpos(sim) + sim.data.mocap_pos[:] = sim.data.mocap_pos + pos_delta + sim.data.mocap_quat[:] = sim.data.mocap_quat + quat_delta + + +def reset_mocap_welds(sim): + """Resets the mocap welds that we use for actuation. + """ + if sim.model.nmocap > 0 and sim.model.eq_data is not None: + for i in range(sim.model.eq_data.shape[0]): + if sim.model.eq_type[i] == mujoco_py.const.EQ_WELD: + sim.model.eq_data[i, :] = np.array( + [0., 0., 0., 1., 0., 0., 0.]) + sim.forward() + + +def reset_mocap2body_xpos(sim): + """Resets the position and orientation of the mocap bodies to the same + values as the bodies they're welded to. + """ + + if (sim.model.eq_type is None or + sim.model.eq_obj1id is None or + sim.model.eq_obj2id is None): + return + for eq_type, obj1_id, obj2_id in zip(sim.model.eq_type, + sim.model.eq_obj1id, + sim.model.eq_obj2id): + if eq_type != mujoco_py.const.EQ_WELD: + continue + + mocap_id = sim.model.body_mocapid[obj1_id] + if mocap_id != -1: + # obj1 is the mocap, obj2 is the welded body + body_idx = obj2_id + else: + # obj2 is the mocap, obj1 is the welded body + mocap_id = sim.model.body_mocapid[obj2_id] + body_idx = obj1_id + + assert (mocap_id != -1) + sim.data.mocap_pos[mocap_id][:] = sim.data.body_xpos[body_idx] + sim.data.mocap_quat[mocap_id][:] = sim.data.body_xquat[body_idx] diff --git a/src/gym/envs/tests/__init__.py b/src/gym/envs/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/gym/envs/tests/spec_list.py b/src/gym/envs/tests/spec_list.py new file mode 100644 index 0000000..f71b7c3 --- /dev/null +++ b/src/gym/envs/tests/spec_list.py @@ -0,0 +1,20 @@ +from gym import envs, logger +import os + +def should_skip_env_spec_for_tests(spec): + # We skip tests for envs that require dependencies or are otherwise + # troublesome to run frequently + ep = spec._entry_point + # Skip mujoco tests for pull request CI + skip_mujoco = not (os.environ.get('MUJOCO_KEY_BUNDLE') or os.path.exists(os.path.expanduser('~/.mujoco/mjkey.txt'))) + if skip_mujoco and (ep.startswith('gym.envs.mujoco:') or ep.startswith('gym.envs.robotics:')): + return True + if ( 'GoEnv' in ep or + 'HexEnv' in ep or + (ep.startswith("gym.envs.atari") and not spec.id.startswith("Pong") and not spec.id.startswith("Seaquest")) + ): + logger.warn("Skipping tests for env {}".format(ep)) + return True + return False + +spec_list = [spec for spec in sorted(envs.registry.all(), key=lambda x: x.id) if spec._entry_point is not None and not should_skip_env_spec_for_tests(spec)] diff --git a/src/gym/envs/tests/test_determinism.py b/src/gym/envs/tests/test_determinism.py new file mode 100644 index 0000000..f88eb7c --- /dev/null +++ b/src/gym/envs/tests/test_determinism.py @@ -0,0 +1,74 @@ +import numpy as np +import pytest +from gym import spaces +from gym.envs.tests.spec_list import spec_list + +@pytest.mark.parametrize("spec", spec_list) +def test_env(spec): + + # Note that this precludes running this test in multiple + # threads. However, we probably already can't do multithreading + # due to some environments. + spaces.seed(0) + + env1 = spec.make() + env1.seed(0) + action_samples1 = [env1.action_space.sample() for i in range(4)] + initial_observation1 = env1.reset() + step_responses1 = [env1.step(action) for action in action_samples1] + env1.close() + + spaces.seed(0) + + env2 = spec.make() + env2.seed(0) + action_samples2 = [env2.action_space.sample() for i in range(4)] + initial_observation2 = env2.reset() + step_responses2 = [env2.step(action) for action in action_samples2] + env2.close() + + for i, (action_sample1, action_sample2) in enumerate(zip(action_samples1, action_samples2)): + try: + assert_equals(action_sample1, action_sample2) + except AssertionError: + print('env1.action_space=', env1.action_space) + print('env2.action_space=', env2.action_space) + print('action_samples1=', action_samples1) + print('action_samples2=', action_samples2) + print('[{}] action_sample1: {}, action_sample2: {}'.format(i, action_sample1, action_sample2)) + raise + + # Don't check rollout equality if it's a a nondeterministic + # environment. + if spec.nondeterministic: + return + + assert_equals(initial_observation1, initial_observation2) + + for i, ((o1, r1, d1, i1), (o2, r2, d2, i2)) in enumerate(zip(step_responses1, step_responses2)): + assert_equals(o1, o2, '[{}] '.format(i)) + assert r1 == r2, '[{}] r1: {}, r2: {}'.format(i, r1, r2) + assert d1 == d2, '[{}] d1: {}, d2: {}'.format(i, d1, d2) + + # Go returns a Pachi game board in info, which doesn't + # properly check equality. For now, we hack around this by + # just skipping Go. + if spec.id not in ['Go9x9-v0', 'Go19x19-v0']: + assert_equals(i1, i2, '[{}] '.format(i)) + +def assert_equals(a, b, prefix=None): + assert type(a) == type(b), "{}Differing types: {} and {}".format(prefix, a, b) + if isinstance(a, dict): + assert list(a.keys()) == list(b.keys()), "{}Key sets differ: {} and {}".format(prefix, a, b) + + for k in a.keys(): + v_a = a[k] + v_b = b[k] + assert_equals(v_a, v_b) + elif isinstance(a, np.ndarray): + np.testing.assert_array_equal(a, b) + elif isinstance(a, tuple): + for elem_from_a, elem_from_b in zip(a, b): + assert_equals(elem_from_a, elem_from_b) + else: + assert a == b diff --git a/src/gym/envs/tests/test_envs.py b/src/gym/envs/tests/test_envs.py new file mode 100644 index 0000000..1f19fef --- /dev/null +++ b/src/gym/envs/tests/test_envs.py @@ -0,0 +1,43 @@ +import numpy as np +import pytest +from gym import envs +from gym.envs.tests.spec_list import spec_list + +# This runs a smoketest on each official registered env. We may want +# to try also running environments which are not officially registered +# envs. +@pytest.mark.parametrize("spec", spec_list) +def test_env(spec): + env = spec.make() + ob_space = env.observation_space + act_space = env.action_space + ob = env.reset() + assert ob_space.contains(ob), 'Reset observation: {!r} not in space'.format(ob) + a = act_space.sample() + observation, reward, done, _info = env.step(a) + assert ob_space.contains(observation), 'Step observation: {!r} not in space'.format(observation) + assert np.isscalar(reward), "{} is not a scalar for {}".format(reward, env) + assert isinstance(done, bool), "Expected {} to be a boolean".format(done) + + for mode in env.metadata.get('render.modes', []): + env.render(mode=mode) + + # Make sure we can render the environment after close. + for mode in env.metadata.get('render.modes', []): + env.render(mode=mode) + + env.close() + +# Run a longer rollout on some environments +def test_random_rollout(): + for env in [envs.make('CartPole-v0'), envs.make('FrozenLake-v0')]: + agent = lambda ob: env.action_space.sample() + ob = env.reset() + for _ in range(10): + assert env.observation_space.contains(ob) + a = agent(ob) + assert env.action_space.contains(a) + (ob, _reward, done, _info) = env.step(a) + if done: break + env.close() + diff --git a/src/gym/envs/tests/test_envs_semantics.py b/src/gym/envs/tests/test_envs_semantics.py new file mode 100644 index 0000000..a6e5b79 --- /dev/null +++ b/src/gym/envs/tests/test_envs_semantics.py @@ -0,0 +1,95 @@ +""" +Currently disabled since this was done in a very poor way +Hashed str representation of objects +""" + + +from __future__ import unicode_literals +import json +import hashlib +import os + +import pytest +from gym import spaces, logger +from gym.envs.tests.spec_list import spec_list + +DATA_DIR = os.path.dirname(__file__) +ROLLOUT_STEPS = 100 +episodes = ROLLOUT_STEPS +steps = ROLLOUT_STEPS + +ROLLOUT_FILE = os.path.join(DATA_DIR, 'rollout.json') + +if not os.path.isfile(ROLLOUT_FILE): + with open(ROLLOUT_FILE, "w") as outfile: + json.dump({}, outfile, indent=2) + +def hash_object(unhashed): + return hashlib.sha256(str(unhashed).encode('utf-16')).hexdigest() # This is really bad, str could be same while values change + +def generate_rollout_hash(spec): + spaces.seed(0) + env = spec.make() + env.seed(0) + + observation_list = [] + action_list = [] + reward_list = [] + done_list = [] + + total_steps = 0 + for episode in range(episodes): + if total_steps >= ROLLOUT_STEPS: break + observation = env.reset() + + for step in range(steps): + action = env.action_space.sample() + observation, reward, done, _ = env.step(action) + + action_list.append(action) + observation_list.append(observation) + reward_list.append(reward) + done_list.append(done) + + total_steps += 1 + if total_steps >= ROLLOUT_STEPS: break + + if done: break + + observations_hash = hash_object(observation_list) + actions_hash = hash_object(action_list) + rewards_hash = hash_object(reward_list) + dones_hash = hash_object(done_list) + + env.close() + return observations_hash, actions_hash, rewards_hash, dones_hash + +@pytest.mark.parametrize("spec", spec_list) +def test_env_semantics(spec): + logger.warn("Skipping this test. Existing hashes were generated in a bad way") + return + with open(ROLLOUT_FILE) as data_file: + rollout_dict = json.load(data_file) + + if spec.id not in rollout_dict: + if not spec.nondeterministic: + logger.warn("Rollout does not exist for {}, run generate_json.py to generate rollouts for new envs".format(spec.id)) + return + + logger.info("Testing rollout for {} environment...".format(spec.id)) + + observations_now, actions_now, rewards_now, dones_now = generate_rollout_hash(spec) + + errors = [] + if rollout_dict[spec.id]['observations'] != observations_now: + errors.append('Observations not equal for {} -- expected {} but got {}'.format(spec.id, rollout_dict[spec.id]['observations'], observations_now)) + if rollout_dict[spec.id]['actions'] != actions_now: + errors.append('Actions not equal for {} -- expected {} but got {}'.format(spec.id, rollout_dict[spec.id]['actions'], actions_now)) + if rollout_dict[spec.id]['rewards'] != rewards_now: + errors.append('Rewards not equal for {} -- expected {} but got {}'.format(spec.id, rollout_dict[spec.id]['rewards'], rewards_now)) + if rollout_dict[spec.id]['dones'] != dones_now: + errors.append('Dones not equal for {} -- expected {} but got {}'.format(spec.id, rollout_dict[spec.id]['dones'], dones_now)) + if len(errors): + for error in errors: + logger.warn(error) + raise ValueError(errors) diff --git a/src/gym/envs/tests/test_registration.py b/src/gym/envs/tests/test_registration.py new file mode 100644 index 0000000..a7990bb --- /dev/null +++ b/src/gym/envs/tests/test_registration.py @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- +from gym import error, envs +from gym.envs import registration +from gym.envs.classic_control import cartpole + +def test_make(): + env = envs.make('CartPole-v0') + assert env.spec.id == 'CartPole-v0' + assert isinstance(env.unwrapped, cartpole.CartPoleEnv) + +def test_make_deprecated(): + try: + envs.make('Humanoid-v0') + except error.Error: + pass + else: + assert False + +def test_spec(): + spec = envs.spec('CartPole-v0') + assert spec.id == 'CartPole-v0' + +def test_missing_lookup(): + registry = registration.EnvRegistry() + registry.register(id='Test-v0', entry_point=None) + registry.register(id='Test-v15', entry_point=None) + registry.register(id='Test-v9', entry_point=None) + registry.register(id='Other-v100', entry_point=None) + try: + registry.spec('Test-v1') # must match an env name but not the version above + except error.DeprecatedEnv: + pass + else: + assert False + + try: + registry.spec('Unknown-v1') + except error.UnregisteredEnv: + pass + else: + assert False + +def test_malformed_lookup(): + registry = registration.EnvRegistry() + try: + registry.spec(u'“Breakout-v0”') + except error.Error as e: + assert 'malformed environment ID' in '{}'.format(e), 'Unexpected message: {}'.format(e) + else: + assert False diff --git a/src/gym/envs/toy_text/__init__.py b/src/gym/envs/toy_text/__init__.py new file mode 100644 index 0000000..c1d76eb --- /dev/null +++ b/src/gym/envs/toy_text/__init__.py @@ -0,0 +1,9 @@ +from gym.envs.toy_text.blackjack import BlackjackEnv +from gym.envs.toy_text.roulette import RouletteEnv +from gym.envs.toy_text.frozen_lake import FrozenLakeEnv +from gym.envs.toy_text.nchain import NChainEnv +from gym.envs.toy_text.hotter_colder import HotterColder +from gym.envs.toy_text.guessing_game import GuessingGame +from gym.envs.toy_text.kellycoinflip import KellyCoinflipEnv +from gym.envs.toy_text.kellycoinflip import KellyCoinflipGeneralizedEnv +from gym.envs.toy_text.cliffwalking import CliffWalkingEnv diff --git a/src/gym/envs/toy_text/blackjack.py b/src/gym/envs/toy_text/blackjack.py new file mode 100644 index 0000000..0cb6193 --- /dev/null +++ b/src/gym/envs/toy_text/blackjack.py @@ -0,0 +1,116 @@ +import gym +from gym import spaces +from gym.utils import seeding + +def cmp(a, b): + return float(a > b) - float(a < b) + +# 1 = Ace, 2-10 = Number cards, Jack/Queen/King = 10 +deck = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10] + + +def draw_card(np_random): + return int(np_random.choice(deck)) + + +def draw_hand(np_random): + return [draw_card(np_random), draw_card(np_random)] + + +def usable_ace(hand): # Does this hand have a usable ace? + return 1 in hand and sum(hand) + 10 <= 21 + + +def sum_hand(hand): # Return current hand total + if usable_ace(hand): + return sum(hand) + 10 + return sum(hand) + + +def is_bust(hand): # Is this hand a bust? + return sum_hand(hand) > 21 + + +def score(hand): # What is the score of this hand (0 if bust) + return 0 if is_bust(hand) else sum_hand(hand) + + +def is_natural(hand): # Is this hand a natural blackjack? + return sorted(hand) == [1, 10] + + +class BlackjackEnv(gym.Env): + """Simple blackjack environment + + Blackjack is a card game where the goal is to obtain cards that sum to as + near as possible to 21 without going over. They're playing against a fixed + dealer. + Face cards (Jack, Queen, King) have point value 10. + Aces can either count as 11 or 1, and it's called 'usable' at 11. + This game is placed with an infinite deck (or with replacement). + The game starts with each (player and dealer) having one face up and one + face down card. + + The player can request additional cards (hit=1) until they decide to stop + (stick=0) or exceed 21 (bust). + + After the player sticks, the dealer reveals their facedown card, and draws + until their sum is 17 or greater. If the dealer goes bust the player wins. + + If neither player nor dealer busts, the outcome (win, lose, draw) is + decided by whose sum is closer to 21. The reward for winning is +1, + drawing is 0, and losing is -1. + + The observation of a 3-tuple of: the players current sum, + the dealer's one showing card (1-10 where 1 is ace), + and whether or not the player holds a usable ace (0 or 1). + + This environment corresponds to the version of the blackjack problem + described in Example 5.1 in Reinforcement Learning: An Introduction + by Sutton and Barto. + http://incompleteideas.net/book/the-book-2nd.html + """ + def __init__(self, natural=False): + self.action_space = spaces.Discrete(2) + self.observation_space = spaces.Tuple(( + spaces.Discrete(32), + spaces.Discrete(11), + spaces.Discrete(2))) + self.seed() + + # Flag to payout 1.5 on a "natural" blackjack win, like casino rules + # Ref: http://www.bicyclecards.com/how-to-play/blackjack/ + self.natural = natural + # Start the first game + self.reset() + + def seed(self, seed=None): + self.np_random, seed = seeding.np_random(seed) + return [seed] + + def step(self, action): + assert self.action_space.contains(action) + if action: # hit: add a card to players hand and return + self.player.append(draw_card(self.np_random)) + if is_bust(self.player): + done = True + reward = -1 + else: + done = False + reward = 0 + else: # stick: play out the dealers hand, and score + done = True + while sum_hand(self.dealer) < 17: + self.dealer.append(draw_card(self.np_random)) + reward = cmp(score(self.player), score(self.dealer)) + if self.natural and is_natural(self.player) and reward == 1: + reward = 1.5 + return self._get_obs(), reward, done, {} + + def _get_obs(self): + return (sum_hand(self.player), self.dealer[0], usable_ace(self.player)) + + def reset(self): + self.dealer = draw_hand(self.np_random) + self.player = draw_hand(self.np_random) + return self._get_obs() diff --git a/src/gym/envs/toy_text/cliffwalking.py b/src/gym/envs/toy_text/cliffwalking.py new file mode 100644 index 0000000..2b1aedb --- /dev/null +++ b/src/gym/envs/toy_text/cliffwalking.py @@ -0,0 +1,113 @@ +import numpy as np +import sys +from gym.envs.toy_text import discrete + +UP = 0 +RIGHT = 1 +DOWN = 2 +LEFT = 3 + + +class CliffWalkingEnv(discrete.DiscreteEnv): + """ + This is a simple implementation of the Gridworld Cliff + reinforcement learning task. + + Adapted from Example 6.6 (page 132) from Reinforcement Learning: An Introduction + by Sutton and Barto: + http://incompleteideas.net/book/the-book-2nd.html + + With inspiration from: + https://github.com/dennybritz/reinforcement-learning/blob/master/lib/envs/cliff_walking.py + + The board is a 4x12 matrix, with (using Numpy matrix indexing): + [3, 0] as the start at bottom-left + [3, 11] as the goal at bottom-right + [3, 1..10] as the cliff at bottom-center + + Each time step incurs -1 reward, and stepping into the cliff incurs -100 reward + and a reset to the start. An episode terminates when the agent reaches the goal. + """ + metadata = {'render.modes': ['human', 'ansi']} + + def __init__(self): + self.shape = (4, 12) + self.start_state_index = np.ravel_multi_index((3, 0), self.shape) + + nS = np.prod(self.shape) + nA = 4 + + # Cliff Location + self._cliff = np.zeros(self.shape, dtype=np.bool) + self._cliff[3, 1:-1] = True + + # Calculate transition probabilities and rewards + P = {} + for s in range(nS): + position = np.unravel_index(s, self.shape) + P[s] = {a: [] for a in range(nA)} + P[s][UP] = self._calculate_transition_prob(position, [-1, 0]) + P[s][RIGHT] = self._calculate_transition_prob(position, [0, 1]) + P[s][DOWN] = self._calculate_transition_prob(position, [1, 0]) + P[s][LEFT] = self._calculate_transition_prob(position, [0, -1]) + + # Calculate initial state distribution + # We always start in state (3, 0) + isd = np.zeros(nS) + isd[self.start_state_index] = 1.0 + + super(CliffWalkingEnv, self).__init__(nS, nA, P, isd) + + def _limit_coordinates(self, coord): + """ + Prevent the agent from falling out of the grid world + :param coord: + :return: + """ + coord[0] = min(coord[0], self.shape[0] - 1) + coord[0] = max(coord[0], 0) + coord[1] = min(coord[1], self.shape[1] - 1) + coord[1] = max(coord[1], 0) + return coord + + def _calculate_transition_prob(self, current, delta): + """ + Determine the outcome for an action. Transition Prob is always 1.0. + :param current: Current position on the grid as (row, col) + :param delta: Change in position for transition + :return: (1.0, new_state, reward, done) + """ + new_position = np.array(current) + np.array(delta) + new_position = self._limit_coordinates(new_position).astype(int) + new_state = np.ravel_multi_index(tuple(new_position), self.shape) + if self._cliff[tuple(new_position)]: + return [(1.0, self.start_state_index, -100, False)] + + terminal_state = (self.shape[0] - 1, self.shape[1] - 1) + is_done = tuple(new_position) == terminal_state + return [(1.0, new_state, -1, is_done)] + + def render(self, mode='human'): + outfile = sys.stdout + + for s in range(self.nS): + position = np.unravel_index(s, self.shape) + if self.s == s: + output = " x " + # Print terminal state + elif position == (3, 11): + output = " T " + elif self._cliff[position]: + output = " C " + else: + output = " o " + + if position[1] == 0: + output = output.lstrip() + if position[1] == self.shape[1] - 1: + output = output.rstrip() + output += '\n' + + outfile.write(output) + outfile.write('\n') + diff --git a/src/gym/envs/toy_text/discrete.py b/src/gym/envs/toy_text/discrete.py new file mode 100644 index 0000000..3a3c82e --- /dev/null +++ b/src/gym/envs/toy_text/discrete.py @@ -0,0 +1,59 @@ +import numpy as np + +from gym import Env, spaces +from gym.utils import seeding + +def categorical_sample(prob_n, np_random): + """ + Sample from categorical distribution + Each row specifies class probabilities + """ + prob_n = np.asarray(prob_n) + csprob_n = np.cumsum(prob_n) + return (csprob_n > np_random.rand()).argmax() + + +class DiscreteEnv(Env): + + """ + Has the following members + - nS: number of states + - nA: number of actions + - P: transitions (*) + - isd: initial state distribution (**) + + (*) dictionary dict of dicts of lists, where + P[s][a] == [(probability, nextstate, reward, done), ...] + (**) list or array of length nS + + + """ + def __init__(self, nS, nA, P, isd): + self.P = P + self.isd = isd + self.lastaction=None # for rendering + self.nS = nS + self.nA = nA + + self.action_space = spaces.Discrete(self.nA) + self.observation_space = spaces.Discrete(self.nS) + + self.seed() + self.reset() + + def seed(self, seed=None): + self.np_random, seed = seeding.np_random(seed) + return [seed] + + def reset(self): + self.s = categorical_sample(self.isd, self.np_random) + self.lastaction=None + return self.s + + def step(self, a): + transitions = self.P[self.s][a] + i = categorical_sample([t[0] for t in transitions], self.np_random) + p, s, r, d= transitions[i] + self.s = s + self.lastaction=a + return (s, r, d, {"prob" : p}) diff --git a/src/gym/envs/toy_text/frozen_lake.py b/src/gym/envs/toy_text/frozen_lake.py new file mode 100644 index 0000000..37c803f --- /dev/null +++ b/src/gym/envs/toy_text/frozen_lake.py @@ -0,0 +1,132 @@ +import numpy as np +import sys +from six import StringIO, b + +from gym import utils +from gym.envs.toy_text import discrete + +LEFT = 0 +DOWN = 1 +RIGHT = 2 +UP = 3 + +MAPS = { + "4x4": [ + "SFFF", + "FHFH", + "FFFH", + "HFFG" + ], + "8x8": [ + "SFFFFFFF", + "FFFFFFFF", + "FFFHFFFF", + "FFFFFHFF", + "FFFHFFFF", + "FHHFFFHF", + "FHFFHFHF", + "FFFHFFFG" + ], +} + +class FrozenLakeEnv(discrete.DiscreteEnv): + """ + Winter is here. You and your friends were tossing around a frisbee at the park + when you made a wild throw that left the frisbee out in the middle of the lake. + The water is mostly frozen, but there are a few holes where the ice has melted. + If you step into one of those holes, you'll fall into the freezing water. + At this time, there's an international frisbee shortage, so it's absolutely imperative that + you navigate across the lake and retrieve the disc. + However, the ice is slippery, so you won't always move in the direction you intend. + The surface is described using a grid like the following + + SFFF + FHFH + FFFH + HFFG + + S : starting point, safe + F : frozen surface, safe + H : hole, fall to your doom + G : goal, where the frisbee is located + + The episode ends when you reach the goal or fall in a hole. + You receive a reward of 1 if you reach the goal, and zero otherwise. + + """ + + metadata = {'render.modes': ['human', 'ansi']} + + def __init__(self, desc=None, map_name="4x4",is_slippery=True): + if desc is None and map_name is None: + raise ValueError('Must provide either desc or map_name') + elif desc is None: + desc = MAPS[map_name] + self.desc = desc = np.asarray(desc,dtype='c') + self.nrow, self.ncol = nrow, ncol = desc.shape + self.reward_range = (0, 1) + + nA = 4 + nS = nrow * ncol + + isd = np.array(desc == b'S').astype('float64').ravel() + isd /= isd.sum() + + P = {s : {a : [] for a in range(nA)} for s in range(nS)} + + def to_s(row, col): + return row*ncol + col + + def inc(row, col, a): + if a==0: # left + col = max(col-1,0) + elif a==1: # down + row = min(row+1,nrow-1) + elif a==2: # right + col = min(col+1,ncol-1) + elif a==3: # up + row = max(row-1,0) + return (row, col) + + for row in range(nrow): + for col in range(ncol): + s = to_s(row, col) + for a in range(4): + li = P[s][a] + letter = desc[row, col] + if letter in b'GH': + li.append((1.0, s, 0, True)) + else: + if is_slippery: + for b in [(a-1)%4, a, (a+1)%4]: + newrow, newcol = inc(row, col, b) + newstate = to_s(newrow, newcol) + newletter = desc[newrow, newcol] + done = bytes(newletter) in b'GH' + rew = float(newletter == b'G') + li.append((1.0/3.0, newstate, rew, done)) + else: + newrow, newcol = inc(row, col, a) + newstate = to_s(newrow, newcol) + newletter = desc[newrow, newcol] + done = bytes(newletter) in b'GH' + rew = float(newletter == b'G') + li.append((1.0, newstate, rew, done)) + + super(FrozenLakeEnv, self).__init__(nS, nA, P, isd) + + def render(self, mode='human'): + outfile = StringIO() if mode == 'ansi' else sys.stdout + + row, col = self.s // self.ncol, self.s % self.ncol + desc = self.desc.tolist() + desc = [[c.decode('utf-8') for c in line] for line in desc] + desc[row][col] = utils.colorize(desc[row][col], "red", highlight=True) + if self.lastaction is not None: + outfile.write(" ({})\n".format(["Left","Down","Right","Up"][self.lastaction])) + else: + outfile.write("\n") + outfile.write("\n".join(''.join(line) for line in desc)+"\n") + + if mode != 'human': + return outfile diff --git a/src/gym/envs/toy_text/guessing_game.py b/src/gym/envs/toy_text/guessing_game.py new file mode 100644 index 0000000..9906ded --- /dev/null +++ b/src/gym/envs/toy_text/guessing_game.py @@ -0,0 +1,87 @@ +import gym +from gym import spaces +from gym.utils import seeding +import numpy as np + + +class GuessingGame(gym.Env): + """Number guessing game + + The object of the game is to guess within 1% of the randomly chosen number + within 200 time steps + + After each step the agent is provided with one of four possible observations + which indicate where the guess is in relation to the randomly chosen number + + 0 - No guess yet submitted (only after reset) + 1 - Guess is lower than the target + 2 - Guess is equal to the target + 3 - Guess is higher than the target + + The rewards are: + 0 if the agent's guess is outside of 1% of the target + 1 if the agent's guess is inside 1% of the target + + The episode terminates after the agent guesses within 1% of the target or + 200 steps have been taken + + The agent will need to use a memory of previously submitted actions and observations + in order to efficiently explore the available actions + + The purpose is to have agents optimise their exploration parameters (e.g. how far to + explore from previous actions) based on previous experience. Because the goal changes + each episode a state-value or action-value function isn't able to provide any additional + benefit apart from being able to tell whether to increase or decrease the next guess. + + The perfect agent would likely learn the bounds of the action space (without referring + to them explicitly) and then follow binary tree style exploration towards to goal number + """ + def __init__(self): + self.range = 1000 # Randomly selected number is within +/- this value + self.bounds = 10000 + + self.action_space = spaces.Box(low=np.array([-self.bounds]), high=np.array([self.bounds])) + self.observation_space = spaces.Discrete(4) + + self.number = 0 + self.guess_count = 0 + self.guess_max = 200 + self.observation = 0 + + self.seed() + self.reset() + + def seed(self, seed=None): + self.np_random, seed = seeding.np_random(seed) + return [seed] + + def step(self, action): + assert self.action_space.contains(action) + + if action < self.number: + self.observation = 1 + + elif action == self.number: + self.observation = 2 + + elif action > self.number: + self.observation = 3 + + reward = 0 + done = False + + if (self.number - self.range * 0.01) < action < (self.number + self.range * 0.01): + reward = 1 + done = True + + self.guess_count += 1 + if self.guess_count >= self.guess_max: + done = True + + return self.observation, reward, done, {"number": self.number, "guesses": self.guess_count} + + def reset(self): + self.number = self.np_random.uniform(-self.range, self.range) + self.guess_count = 0 + self.observation = 0 + return self.observation diff --git a/src/gym/envs/toy_text/hotter_colder.py b/src/gym/envs/toy_text/hotter_colder.py new file mode 100644 index 0000000..6f8e826 --- /dev/null +++ b/src/gym/envs/toy_text/hotter_colder.py @@ -0,0 +1,66 @@ +import gym +from gym import spaces +from gym.utils import seeding +import numpy as np + + +class HotterColder(gym.Env): + """Hotter Colder + The goal of hotter colder is to guess closer to a randomly selected number + + After each step the agent receives an observation of: + 0 - No guess yet submitted (only after reset) + 1 - Guess is lower than the target + 2 - Guess is equal to the target + 3 - Guess is higher than the target + + The rewards is calculated as: + (min(action, self.number) + self.range) / (max(action, self.number) + self.range) + + Ideally an agent will be able to recognise the 'scent' of a higher reward and + increase the rate in which is guesses in that direction until the reward reaches + its maximum + """ + def __init__(self): + self.range = 1000 # +/- value the randomly select number can be between + self.bounds = 2000 # Action space bounds + + self.action_space = spaces.Box(low=np.array([-self.bounds]), high=np.array([self.bounds])) + self.observation_space = spaces.Discrete(4) + + self.number = 0 + self.guess_count = 0 + self.guess_max = 200 + self.observation = 0 + + self.seed() + self.reset() + + def seed(self, seed=None): + self.np_random, seed = seeding.np_random(seed) + return [seed] + + def step(self, action): + assert self.action_space.contains(action) + + if action < self.number: + self.observation = 1 + + elif action == self.number: + self.observation = 2 + + elif action > self.number: + self.observation = 3 + + reward = ((min(action, self.number) + self.bounds) / (max(action, self.number) + self.bounds)) ** 2 + + self.guess_count += 1 + done = self.guess_count >= self.guess_max + + return self.observation, reward[0], done, {"number": self.number, "guesses": self.guess_count} + + def reset(self): + self.number = self.np_random.uniform(-self.range, self.range) + self.guess_count = 0 + self.observation = 0 + return self.observation diff --git a/src/gym/envs/toy_text/kellycoinflip.py b/src/gym/envs/toy_text/kellycoinflip.py new file mode 100644 index 0000000..c2a91fa --- /dev/null +++ b/src/gym/envs/toy_text/kellycoinflip.py @@ -0,0 +1,150 @@ +import gym +from gym import spaces +from gym.utils import seeding +from gym.spaces import prng +# for Generalized Kelly coinflip game distributions: +from scipy.stats import genpareto +import numpy as np +import numpy.random + +def flip(edge, np_random): + return np_random.uniform() < edge + +class KellyCoinflipEnv(gym.Env): + """The Kelly coinflip game is a simple gambling introduced by Haghani & Dewey 2016's 'Rational Decision-Making Under Uncertainty: Observed Betting Patterns on a Biased Coin' (https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2856963), to test human decision-making in a setting like that of the stock market: positive expected value but highly stochastic; they found many subjects performed badly, often going broke, even though optimal play would reach the maximum with ~95% probability. In the coinflip game, the player starts with $25.00 to gamble over 300 rounds; each round, they can bet anywhere up to their net worth (in penny increments), and then a coin is flipped; with P=0.6, the player wins twice what they bet, otherwise, they lose it. $250 is the maximum players are allowed to have. At the end of the 300 rounds, they keep whatever they have. The human subjects earned an average of $91; a simple use of the Kelly criterion (https://en.wikipedia.org/wiki/Kelly_criterion), giving a strategy of betting 20% until the cap is hit, would earn $240; a decision tree analysis shows that optimal play earns $246 (https://www.gwern.net/Coin-flip). The game short-circuits when either wealth = $0 (since one can never recover) or wealth = cap (trivial optimal play: one simply bets nothing thereafter). In this implementation, we default to the paper settings of $25, 60% odds, wealth cap of $250, and 300 rounds. To specify the action space in advance, we multiply the wealth cap (in dollars) by 100 (to allow for all penny bets); should one attempt to bet more money than one has, it is rounded down to one's net worth. (Alternately, a mistaken bet could end the episode immediately; it's not clear to me which version would be better.) For a harder version which randomizes the 3 key parameters, see the Generalized Kelly coinflip game.""" + metadata = {'render.modes': ['human']} + def __init__(self, initialWealth=25.0, edge=0.6, maxWealth=250.0, maxRounds=300): + + self.action_space = spaces.Discrete(int(maxWealth*100)) # betting in penny increments + self.observation_space = spaces.Tuple(( + spaces.Box(0, maxWealth, [1]), # (w,b) + spaces.Discrete(maxRounds+1))) + self.reward_range = (0, maxWealth) + self.edge = edge + self.wealth = initialWealth + self.initialWealth = initialWealth + self.maxRounds = maxRounds + self.maxWealth = maxWealth + self.seed() + self.reset() + + def seed(self, seed=None): + self.np_random, seed = seeding.np_random(seed) + return [seed] + + def step(self, action): + action = action/100.0 # convert from pennies to dollars + if action > self.wealth: # treat attempts to bet more than possess as == betting everything + action = self.wealth + if self.wealth < 0.000001: + done = True + reward = 0.0 + else: + if self.rounds == 0: + done = True + reward = self.wealth + else: + self.rounds = self.rounds - 1 + done = False + reward = 0.0 + coinflip = flip(self.edge, self.np_random) + if coinflip: + self.wealth = min(self.maxWealth, self.wealth + action) + else: + self.wealth = self.wealth - action + return self._get_obs(), reward, done, {} + + def _get_obs(self): + return (np.array([self.wealth]), self.rounds) + + def reset(self): + self.rounds = self.maxRounds + self.wealth = self.initialWealth + return self._get_obs() + + def render(self, mode='human'): + print("Current wealth: ", self.wealth, "; Rounds left: ", self.rounds) + +class KellyCoinflipGeneralizedEnv(gym.Env): + """The Generalized Kelly coinflip game is an extension by ArthurB & Gwern Branwen which expands the Kelly coinflip game MDP into a POMDP, where the 3 key parameters (edge, maximum wealth, and number of rounds) are unknown random variables drawn from 3 distributions: a Beta(7,3) for the coinflip edge 0-1, a N(300,25) the total number of rounds, and a Pareto(5,200) for the wealth cap. These distributions are chosen to be conjugate & easily updatable, to allow for inference (other choices like the geometric for number of rounds wouldn't make observations informative), and to loosely reflect what a human might expect in the original Kelly coinflip game given that the number of rounds wasn't strictly fixed and they weren't told the wealth cap until they neared it. With these particular distributions, the entire history of the game can be summarized into a few sufficient statistics of rounds-elapsed/wins/losses/max-wealth-ever-reached, from which the Bayes-optimal decision can (in theory) be made; to avoid all agents having to tediously track those sufficient statistics manually in the same way, the observation space is augmented from wealth/rounds-left (rounds-left is deleted because it is a hidden variable) to current-wealth/rounds-elapsed/wins/losses/maximum-observed-wealth. The simple Kelly coinflip game can easily be solved by calculating decision trees, but the Generalized Kelly coinflip game may be intractable (although the analysis for the edge case alone suggests that the Bayes-optimal value may be very close to what one would calculate using a decision tree for any specific case), and represents a good challenge for RL agents.""" + metadata = {'render.modes': ['human']} + def __init__(self, initialWealth=25.0, edgePriorAlpha=7, edgePriorBeta=3, maxWealthAlpha=5.0, maxWealthM=200.0, maxRoundsMean=300.0, maxRoundsSD=25.0, reseed=True): + # store the hyperparameters for passing back into __init__() during resets so the same hyperparameters govern the next game's parameters, as the user expects: TODO: this is boilerplate, is there any more elegant way to do this? + self.initialWealth=float(initialWealth) + self.edgePriorAlpha=edgePriorAlpha + self.edgePriorBeta=edgePriorBeta + self.maxWealthAlpha=maxWealthAlpha + self.maxWealthM=maxWealthM + self.maxRoundsMean=maxRoundsMean + self.maxRoundsSD=maxRoundsSD + + # draw this game's set of parameters: + edge = prng.np_random.beta(edgePriorAlpha, edgePriorBeta) + maxWealth = round(genpareto.rvs(maxWealthAlpha, maxWealthM, random_state=prng.np_random)) + maxRounds = int(round(prng.np_random.normal(maxRoundsMean, maxRoundsSD))) + + # add an additional global variable which is the sufficient statistic for the Pareto distribution on wealth cap; + # alpha doesn't update, but x_m does, and simply is the highest wealth count we've seen to date: + self.maxEverWealth = float(self.initialWealth) + # for the coinflip edge, it is total wins/losses: + self.wins = 0 + self.losses = 0 + # for the number of rounds, we need to remember how many rounds we've played: + self.roundsElapsed = 0 + + # the rest proceeds as before: + self.action_space = spaces.Discrete(int(maxWealth*100)) + self.observation_space = spaces.Tuple(( + spaces.Box(0, maxWealth, shape=[1]), # current wealth + spaces.Discrete(maxRounds+1), # rounds elapsed + spaces.Discrete(maxRounds+1), # wins + spaces.Discrete(maxRounds+1), # losses + spaces.Box(0, maxWealth, [1]))) # maximum observed wealth + self.reward_range = (0, maxWealth) + self.edge = edge + self.wealth = self.initialWealth + self.maxRounds = maxRounds + self.rounds = self.maxRounds + self.maxWealth = maxWealth + if reseed or not hasattr(self, 'np_random') : self.seed() + + def seed(self, seed=None): + self.np_random, seed = seeding.np_random(seed) + return [seed] + + def step(self, action): + action = action/100.0 + if action > self.wealth: + action = self.wealth + if self.wealth < 0.000001: + done = True + reward = 0.0 + else: + if self.rounds == 0: + done = True + reward = self.wealth + else: + self.rounds = self.rounds - 1 + done = False + reward = 0.0 + coinflip = flip(self.edge, self.np_random) + self.roundsElapsed = self.roundsElapsed+1 + if coinflip: + self.wealth = min(self.maxWealth, self.wealth + action) + self.maxEverWealth = max(self.wealth, self.maxEverWealth) + self.wins = self.wins+1 + else: + self.wealth = self.wealth - action + self.losses = self.losses+1 + return self._get_obs(), reward, done, {} + + def _get_obs(self): + return (np.array([float(self.wealth)]), self.roundsElapsed, self.wins, self.losses, np.array([float(self.maxEverWealth)])) + def reset(self): + # re-init everything to draw new parameters etc, but preserve the RNG for reproducibility and pass in the same hyperparameters as originally specified: + self.__init__(initialWealth=self.initialWealth, edgePriorAlpha=self.edgePriorAlpha, edgePriorBeta=self.edgePriorBeta, maxWealthAlpha=self.maxWealthAlpha, maxWealthM=self.maxWealthM, maxRoundsMean=self.maxRoundsMean, maxRoundsSD=self.maxRoundsSD, reseed=False) + return self._get_obs() + def render(self, mode='human'): + print("Current wealth: ", self.wealth, "; Rounds left: ", self.rounds, "; True edge: ", self.edge, + "; True max wealth: ", self.maxWealth, "; True stopping time: ", self.maxRounds, "; Rounds left: ", + self.maxRounds - self.roundsElapsed) diff --git a/src/gym/envs/toy_text/nchain.py b/src/gym/envs/toy_text/nchain.py new file mode 100644 index 0000000..fcd077d --- /dev/null +++ b/src/gym/envs/toy_text/nchain.py @@ -0,0 +1,55 @@ +import gym +from gym import spaces +from gym.utils import seeding + +class NChainEnv(gym.Env): + """n-Chain environment + + This game presents moves along a linear chain of states, with two actions: + 0) forward, which moves along the chain but returns no reward + 1) backward, which returns to the beginning and has a small reward + + The end of the chain, however, presents a large reward, and by moving + 'forward' at the end of the chain this large reward can be repeated. + + At each action, there is a small probability that the agent 'slips' and the + opposite transition is instead taken. + + The observed state is the current state in the chain (0 to n-1). + + This environment is described in section 6.1 of: + A Bayesian Framework for Reinforcement Learning by Malcolm Strens (2000) + http://ceit.aut.ac.ir/~shiry/lecture/machine-learning/papers/BRL-2000.pdf + """ + def __init__(self, n=5, slip=0.2, small=2, large=10): + self.n = n + self.slip = slip # probability of 'slipping' an action + self.small = small # payout for 'backwards' action + self.large = large # payout at end of chain for 'forwards' action + self.state = 0 # Start at beginning of the chain + self.action_space = spaces.Discrete(2) + self.observation_space = spaces.Discrete(self.n) + self.seed() + + def seed(self, seed=None): + self.np_random, seed = seeding.np_random(seed) + return [seed] + + def step(self, action): + assert self.action_space.contains(action) + if self.np_random.rand() < self.slip: + action = not action # agent slipped, reverse action taken + if action: # 'backwards': go back to the beginning, get small reward + reward = self.small + self.state = 0 + elif self.state < self.n - 1: # 'forwards': go up along the chain + reward = 0 + self.state += 1 + else: # 'forwards': stay at the end of the chain, collect large reward + reward = self.large + done = False + return self.state, reward, done, {} + + def reset(self): + self.state = 0 + return self.state diff --git a/src/gym/envs/toy_text/roulette.py b/src/gym/envs/toy_text/roulette.py new file mode 100644 index 0000000..0006e7e --- /dev/null +++ b/src/gym/envs/toy_text/roulette.py @@ -0,0 +1,44 @@ +import gym +from gym import spaces +from gym.utils import seeding + + +class RouletteEnv(gym.Env): + """Simple roulette environment + + The roulette wheel has 37 spots. If the bet is 0 and a 0 comes up, + you win a reward of 35. If the parity of your bet matches the parity + of the spin, you win 1. Otherwise you receive a reward of -1. + + The long run reward for playing 0 should be -1/37 for any state + + The last action (38) stops the rollout for a return of 0 (walking away) + """ + def __init__(self, spots=37): + self.n = spots + 1 + self.action_space = spaces.Discrete(self.n) + self.observation_space = spaces.Discrete(1) + self.seed() + + def seed(self, seed=None): + self.np_random, seed = seeding.np_random(seed) + return [seed] + + def step(self, action): + assert self.action_space.contains(action) + if action == self.n - 1: + # observation, reward, done, info + return 0, 0, True, {} + + # N.B. np.random.randint draws from [A, B) while random.randint draws from [A,B] + val = self.np_random.randint(0, self.n - 1) + if val == action == 0: + reward = self.n - 2.0 + elif val != 0 and action != 0 and val % 2 == action % 2: + reward = 1.0 + else: + reward = -1.0 + return 0, reward, False, {} + + def reset(self): + return 0 diff --git a/src/gym/envs/toy_text/taxi.py b/src/gym/envs/toy_text/taxi.py new file mode 100644 index 0000000..270b33f --- /dev/null +++ b/src/gym/envs/toy_text/taxi.py @@ -0,0 +1,151 @@ +import sys +from six import StringIO +from gym import utils +from gym.envs.toy_text import discrete +import numpy as np + +MAP = [ + "+---------+", + "|R: | : :G|", + "| : : : : |", + "| : : : : |", + "| | : | : |", + "|Y| : |B: |", + "+---------+", +] + +class TaxiEnv(discrete.DiscreteEnv): + """ + The Taxi Problem + from "Hierarchical Reinforcement Learning with the MAXQ Value Function Decomposition" + by Tom Dietterich + + Description: + There are four designated locations in the grid world indicated by R(ed), B(lue), G(reen), and Y(ellow). When the episode starts, the taxi starts off at a random square and the passenger is at a random location. The taxi drive to the passenger's location, pick up the passenger, drive to the passenger's destination (another one of the four specified locations), and then drop off the passenger. Once the passenger is dropped off, the episode ends. + + Observations: + There are 500 discrete states since there are 25 taxi positions, 5 possible locations of the passenger (including the case when the passenger is the taxi), and 4 destination locations. + + Actions: + There are 6 discrete deterministic actions: + - 0: move south + - 1: move north + - 2: move east + - 3: move west + - 4: pickup passenger + - 5: dropoff passenger + + Rewards: + There is a reward of -1 for each action and an additional reward of +20 for delievering the passenger. There is a reward of -10 for executing actions "pickup" and "dropoff" illegally. + + + Rendering: + - blue: passenger + - magenta: destination + - yellow: empty taxi + - green: full taxi + - other letters: locations + + """ + metadata = {'render.modes': ['human', 'ansi']} + + def __init__(self): + self.desc = np.asarray(MAP,dtype='c') + + self.locs = locs = [(0,0), (0,4), (4,0), (4,3)] + + nS = 500 + nR = 5 + nC = 5 + maxR = nR-1 + maxC = nC-1 + isd = np.zeros(nS) + nA = 6 + P = {s : {a : [] for a in range(nA)} for s in range(nS)} + for row in range(5): + for col in range(5): + for passidx in range(5): + for destidx in range(4): + state = self.encode(row, col, passidx, destidx) + if passidx < 4 and passidx != destidx: + isd[state] += 1 + for a in range(nA): + # defaults + newrow, newcol, newpassidx = row, col, passidx + reward = -1 + done = False + taxiloc = (row, col) + + if a==0: + newrow = min(row+1, maxR) + elif a==1: + newrow = max(row-1, 0) + if a==2 and self.desc[1+row,2*col+2]==b":": + newcol = min(col+1, maxC) + elif a==3 and self.desc[1+row,2*col]==b":": + newcol = max(col-1, 0) + elif a==4: # pickup + if (passidx < 4 and taxiloc == locs[passidx]): + newpassidx = 4 + else: + reward = -10 + elif a==5: # dropoff + if (taxiloc == locs[destidx]) and passidx==4: + done = True + reward = 20 + elif (taxiloc in locs) and passidx==4: + newpassidx = locs.index(taxiloc) + else: + reward = -10 + newstate = self.encode(newrow, newcol, newpassidx, destidx) + P[state][a].append((1.0, newstate, reward, done)) + isd /= isd.sum() + discrete.DiscreteEnv.__init__(self, nS, nA, P, isd) + + def encode(self, taxirow, taxicol, passloc, destidx): + # (5) 5, 5, 4 + i = taxirow + i *= 5 + i += taxicol + i *= 5 + i += passloc + i *= 4 + i += destidx + return i + + def decode(self, i): + out = [] + out.append(i % 4) + i = i // 4 + out.append(i % 5) + i = i // 5 + out.append(i % 5) + i = i // 5 + out.append(i) + assert 0 <= i < 5 + return reversed(out) + + def render(self, mode='human'): + outfile = StringIO() if mode == 'ansi' else sys.stdout + + out = self.desc.copy().tolist() + out = [[c.decode('utf-8') for c in line] for line in out] + taxirow, taxicol, passidx, destidx = self.decode(self.s) + def ul(x): return "_" if x == " " else x + if passidx < 4: + out[1+taxirow][2*taxicol+1] = utils.colorize(out[1+taxirow][2*taxicol+1], 'yellow', highlight=True) + pi, pj = self.locs[passidx] + out[1+pi][2*pj+1] = utils.colorize(out[1+pi][2*pj+1], 'blue', bold=True) + else: # passenger in taxi + out[1+taxirow][2*taxicol+1] = utils.colorize(ul(out[1+taxirow][2*taxicol+1]), 'green', highlight=True) + + di, dj = self.locs[destidx] + out[1+di][2*dj+1] = utils.colorize(out[1+di][2*dj+1], 'magenta') + outfile.write("\n".join(["".join(row) for row in out])+"\n") + if self.lastaction is not None: + outfile.write(" ({})\n".format(["South", "North", "East", "West", "Pickup", "Dropoff"][self.lastaction])) + else: outfile.write("\n") + + # No need to return anything for human + if mode != 'human': + return outfile diff --git a/src/gym/envs/unittest/__init__.py b/src/gym/envs/unittest/__init__.py new file mode 100644 index 0000000..2c6008a --- /dev/null +++ b/src/gym/envs/unittest/__init__.py @@ -0,0 +1,5 @@ +from gym.envs.unittest.cube_crash import CubeCrash +from gym.envs.unittest.cube_crash import CubeCrashSparse +from gym.envs.unittest.cube_crash import CubeCrashScreenBecomesBlack +from gym.envs.unittest.memorize_digits import MemorizeDigits + diff --git a/src/gym/envs/unittest/cube_crash.py b/src/gym/envs/unittest/cube_crash.py new file mode 100644 index 0000000..6780085 --- /dev/null +++ b/src/gym/envs/unittest/cube_crash.py @@ -0,0 +1,149 @@ +import numpy as np +import gym +from gym import spaces +from gym.utils import seeding + +# Unit test environment for CNNs and CNN+RNN algorithms. +# Looks like this (RGB observations): +# +# --------------------------- +# | | +# | | +# | | +# | ** | +# | ** | +# | | +# | | +# | | +# | | +# | | +# ======== ============== +# +# Goal is to go through the hole at the bottom. Agent controls square using Left-Nop-Right actions. +# It falls down automatically, episode length is a bit less than FIELD_H +# +# CubeCrash-v0 # shaped reward +# CubeCrashSparse-v0 # reward 0 or 1 at the end +# CubeCrashScreenBecomesBlack-v0 # for RNNs +# +# To see how it works, run: +# +# python examples/agents/keyboard_agent.py CubeCrashScreen-v0 + +FIELD_W = 32 +FIELD_H = 40 +HOLE_WIDTH = 8 + +color_black = np.array((0,0,0)).astype('float32') +color_white = np.array((255,255,255)).astype('float32') +color_green = np.array((0,255,0)).astype('float32') + +class CubeCrash(gym.Env): + metadata = { + 'render.modes': ['human', 'rgb_array'], + 'video.frames_per_second' : 60, + 'video.res_w' : FIELD_W, + 'video.res_h' : FIELD_H, + } + + use_shaped_reward = True + use_black_screen = False + use_random_colors = False # Makes env too hard + + def __init__(self): + self.seed() + self.viewer = None + + self.observation_space = spaces.Box(0, 255, (FIELD_H,FIELD_W,3), dtype=np.uint8) + self.action_space = spaces.Discrete(3) + + self.reset() + + def seed(self, seed=None): + self.np_random, seed = seeding.np_random(seed) + return [seed] + + def random_color(self): + return np.array([ + self.np_random.randint(low=0, high=255), + self.np_random.randint(low=0, high=255), + self.np_random.randint(low=0, high=255), + ]).astype('uint8') + + def reset(self): + self.cube_x = self.np_random.randint(low=3, high=FIELD_W-3) + self.cube_y = self.np_random.randint(low=3, high=FIELD_H//6) + self.hole_x = self.np_random.randint(low=HOLE_WIDTH, high=FIELD_W-HOLE_WIDTH) + self.bg_color = self.random_color() if self.use_random_colors else color_black + self.potential = None + self.step_n = 0 + while 1: + self.wall_color = self.random_color() if self.use_random_colors else color_white + self.cube_color = self.random_color() if self.use_random_colors else color_green + if np.linalg.norm(self.wall_color - self.bg_color) < 50 or np.linalg.norm(self.cube_color - self.bg_color) < 50: continue + break + return self.step(0)[0] + + def step(self, action): + if action==0: pass + elif action==1: self.cube_x -= 1 + elif action==2: self.cube_x += 1 + else: assert 0, "Action %i is out of range" % action + self.cube_y += 1 + self.step_n += 1 + + obs = np.zeros( (FIELD_H,FIELD_W,3), dtype=np.uint8 ) + obs[:,:,:] = self.bg_color + obs[FIELD_H-5:FIELD_H,:,:] = self.wall_color + obs[FIELD_H-5:FIELD_H, self.hole_x-HOLE_WIDTH//2:self.hole_x+HOLE_WIDTH//2+1, :] = self.bg_color + obs[self.cube_y-1:self.cube_y+2, self.cube_x-1:self.cube_x+2, :] = self.cube_color + if self.use_black_screen and self.step_n > 4: + obs[:] = np.zeros((3,), dtype=np.uint8) + + done = False + reward = 0 + dist = np.abs(self.cube_x - self.hole_x) + if self.potential is not None and self.use_shaped_reward: + reward = (self.potential - dist) * 0.01 + self.potential = dist + + if self.cube_x-1 < 0 or self.cube_x+1 >= FIELD_W: + done = True + reward = -1 + elif self.cube_y+1 >= FIELD_H-5: + if dist >= HOLE_WIDTH//2: + done = True + reward = -1 + elif self.cube_y == FIELD_H: + done = True + reward = +1 + self.last_obs = obs + return obs, reward, done, {} + + def render(self, mode='human', close=False): + if close: + if self.viewer is not None: + self.viewer.close() + self.viewer = None + return + + if mode == 'rgb_array': + return self.last_obs + + elif mode == 'human': + from gym.envs.classic_control import rendering + if self.viewer is None: + self.viewer = rendering.SimpleImageViewer() + self.viewer.imshow(self.last_obs) + return self.viewer.isopen + + else: + assert 0, "Render mode '%s' is not supported" % mode + +class CubeCrashSparse(CubeCrash): + use_shaped_reward = False + +class CubeCrashScreenBecomesBlack(CubeCrash): + use_shaped_reward = False + use_black_screen = True + diff --git a/src/gym/envs/unittest/memorize_digits.py b/src/gym/envs/unittest/memorize_digits.py new file mode 100644 index 0000000..27df27e --- /dev/null +++ b/src/gym/envs/unittest/memorize_digits.py @@ -0,0 +1,195 @@ +import numpy as np +import gym +from gym import spaces +from gym.utils import seeding + +# Unit test environment for CNNs. +# Looks like this (RGB observations): +# +# --------------------------- +# | | +# | ****** | +# | ****** | +# | ** ** | +# | ** ** | +# | ** | +# | ** | +# | **** | +# | **** | +# | **** | +# | **** | +# | ********** | +# | ********** | +# | | +# --------------------------- +# +# Agent should hit action 2 to gain reward. Catches off-by-one errors in your agent. +# +# To see how it works, run: +# +# python examples/agents/keyboard_agent.py MemorizeDigits-v0 + +FIELD_W = 32 +FIELD_H = 24 + +bogus_mnist = \ +[[ +" **** ", +"* *", +"* *", +"* *", +"* *", +" **** " +], [ +" ** ", +" * * ", +" * ", +" * ", +" * ", +" *** " +], [ +" **** ", +"* *", +" *", +" *** ", +"** ", +"******" +], [ +" **** ", +"* *", +" ** ", +" *", +"* *", +" **** " +], [ +" * * ", +" * * ", +" * * ", +" **** ", +" * ", +" * " +], [ +" **** ", +" * ", +" **** ", +" * ", +" * ", +" **** " +], [ +" *** ", +" * ", +" **** ", +" * * ", +" * * ", +" **** " +], [ +" **** ", +" * ", +" * ", +" * ", +" * ", +" * " +], [ +" **** ", +"* *", +" **** ", +"* *", +"* *", +" **** " +], [ +" **** ", +"* *", +"* *", +" *****", +" *", +" **** " +]] + +color_black = np.array((0,0,0)).astype('float32') +color_white = np.array((255,255,255)).astype('float32') + +class MemorizeDigits(gym.Env): + metadata = { + 'render.modes': ['human', 'rgb_array'], + 'video.frames_per_second' : 60, + 'video.res_w' : FIELD_W, + 'video.res_h' : FIELD_H, + } + + use_random_colors = False + + def __init__(self): + self.seed() + self.viewer = None + self.observation_space = spaces.Box(0, 255, (FIELD_H,FIELD_W,3), dtype=np.uint8) + self.action_space = spaces.Discrete(10) + self.bogus_mnist = np.zeros( (10,6,6), dtype=np.uint8 ) + for digit in range(10): + for y in range(6): + self.bogus_mnist[digit,y,:] = [ord(char) for char in bogus_mnist[digit][y]] + self.reset() + + def seed(self, seed=None): + self.np_random, seed = seeding.np_random(seed) + return [seed] + + def random_color(self): + return np.array([ + self.np_random.randint(low=0, high=255), + self.np_random.randint(low=0, high=255), + self.np_random.randint(low=0, high=255), + ]).astype('uint8') + + def reset(self): + self.digit_x = self.np_random.randint(low=FIELD_W//5, high=FIELD_W//5*4) + self.digit_y = self.np_random.randint(low=FIELD_H//5, high=FIELD_H//5*4) + self.color_bg = self.random_color() if self.use_random_colors else color_black + self.step_n = 0 + while 1: + self.color_digit = self.random_color() if self.use_random_colors else color_white + if np.linalg.norm(self.color_digit - self.color_bg) < 50: continue + break + self.digit = -1 + return self.step(0)[0] + + def step(self, action): + reward = -1 + done = False + self.step_n += 1 + if self.digit==-1: + pass + else: + if self.digit==action: + reward = +1 + done = self.step_n > 20 and 0==self.np_random.randint(low=0, high=5) + self.digit = self.np_random.randint(low=0, high=10) + obs = np.zeros( (FIELD_H,FIELD_W,3), dtype=np.uint8 ) + obs[:,:,:] = self.color_bg + digit_img = np.zeros( (6,6,3), dtype=np.uint8 ) + digit_img[:] = self.color_bg + xxx = self.bogus_mnist[self.digit]==42 + digit_img[xxx] = self.color_digit + obs[self.digit_y-3:self.digit_y+3, self.digit_x-3:self.digit_x+3] = digit_img + self.last_obs = obs + return obs, reward, done, {} + + def render(self, mode='human', close=False): + if close: + if self.viewer is not None: + self.viewer.close() + self.viewer = None + return + + if mode == 'rgb_array': + return self.last_obs + + elif mode == 'human': + from gym.envs.classic_control import rendering + if self.viewer is None: + self.viewer = rendering.SimpleImageViewer() + self.viewer.imshow(self.last_obs) + return self.viewer.isopen + + else: + assert 0, "Render mode '%s' is not supported" % mode + diff --git a/src/gym/error.py b/src/gym/error.py new file mode 100644 index 0000000..08bfecb --- /dev/null +++ b/src/gym/error.py @@ -0,0 +1,139 @@ +import sys + +class Error(Exception): + pass + +# Local errors + +class Unregistered(Error): + """Raised when the user requests an item from the registry that does + not actually exist. + """ + pass + +class UnregisteredEnv(Unregistered): + """Raised when the user requests an env from the registry that does + not actually exist. + """ + pass + +class UnregisteredBenchmark(Unregistered): + """Raised when the user requests an env from the registry that does + not actually exist. + """ + pass + +class DeprecatedEnv(Error): + """Raised when the user requests an env from the registry with an + older version number than the latest env with the same name. + """ + pass + +class UnseedableEnv(Error): + """Raised when the user tries to seed an env that does not support + seeding. + """ + pass + +class DependencyNotInstalled(Error): + pass + +class UnsupportedMode(Exception): + """Raised when the user requests a rendering mode not supported by the + environment. + """ + pass + +class ResetNeeded(Exception): + """When the monitor is active, raised when the user tries to step an + environment that's already done. + """ + pass + +class ResetNotAllowed(Exception): + """When the monitor is active, raised when the user tries to step an + environment that's not yet done. + """ + pass + +class InvalidAction(Exception): + """Raised when the user performs an action not contained within the + action space + """ + pass + +# API errors + +class APIError(Error): + def __init__(self, message=None, http_body=None, http_status=None, + json_body=None, headers=None): + super(APIError, self).__init__(message) + + if http_body and hasattr(http_body, 'decode'): + try: + http_body = http_body.decode('utf-8') + except: + http_body = ('') + + self._message = message + self.http_body = http_body + self.http_status = http_status + self.json_body = json_body + self.headers = headers or {} + self.request_id = self.headers.get('request-id', None) + + def __unicode__(self): + if self.request_id is not None: + msg = self._message or "" + return u"Request {0}: {1}".format(self.request_id, msg) + else: + return self._message + + def __str__(self): + try: # Python 2 + return unicode(self).encode('utf-8') + except NameError: # Python 3 + return self.__unicode__() + + +class APIConnectionError(APIError): + pass + + +class InvalidRequestError(APIError): + + def __init__(self, message, param, http_body=None, + http_status=None, json_body=None, headers=None): + super(InvalidRequestError, self).__init__( + message, http_body, http_status, json_body, + headers) + self.param = param + + +class AuthenticationError(APIError): + pass + +class RateLimitError(APIError): + pass + +# Video errors + +class VideoRecorderError(Error): + pass + +class InvalidFrame(Error): + pass + +# Wrapper errors + +class DoubleWrapperError(Error): + pass + + +class WrapAfterConfigureError(Error): + pass + + +class RetriesExceededError(Error): + pass diff --git a/src/gym/logger.py b/src/gym/logger.py new file mode 100644 index 0000000..24c365c --- /dev/null +++ b/src/gym/logger.py @@ -0,0 +1,35 @@ +from gym.utils import colorize + +DEBUG = 10 +INFO = 20 +WARN = 30 +ERROR = 40 +DISABLED = 50 + +MIN_LEVEL = 30 + +def set_level(level): + """ + Set logging threshold on current logger. + """ + global MIN_LEVEL + MIN_LEVEL = level + +def debug(msg, *args): + if MIN_LEVEL <= DEBUG: + print('%s: %s'%('DEBUG', msg % args)) + +def info(msg, *args): + if MIN_LEVEL <= INFO: + print('%s: %s'%('INFO', msg % args)) + +def warn(msg, *args): + if MIN_LEVEL <= WARN: + print(colorize('%s: %s'%('WARN', msg % args), 'yellow')) + +def error(msg, *args): + if MIN_LEVEL <= ERROR: + print(colorize('%s: %s'%('ERROR', msg % args), 'red')) + +# DEPRECATED: +setLevel = set_level diff --git a/src/gym/spaces/__init__.py b/src/gym/spaces/__init__.py new file mode 100644 index 0000000..4eb21f6 --- /dev/null +++ b/src/gym/spaces/__init__.py @@ -0,0 +1,9 @@ +from gym.spaces.box import Box +from gym.spaces.discrete import Discrete +from gym.spaces.multi_discrete import MultiDiscrete +from gym.spaces.multi_binary import MultiBinary +from gym.spaces.prng import seed, np_random +from gym.spaces.tuple_space import Tuple +from gym.spaces.dict_space import Dict + +__all__ = ["Box", "Discrete", "MultiDiscrete", "MultiBinary", "Tuple", "Dict"] diff --git a/src/gym/spaces/__pycache__/__init__.cpython-37.pyc b/src/gym/spaces/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..42835caaa2e9cd93581dc1643e8002c059120a9a GIT binary patch literal 581 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 C!zHx< literal 0 HcmV?d00001 diff --git a/src/gym/spaces/__pycache__/discrete.cpython-37.pyc b/src/gym/spaces/__pycache__/discrete.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c1e5f4c74247daed5e2db2c36f1244cddb7763ac GIT binary patch literal 1370 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 P!KO8E3k$S?F<}1yBYGKT literal 0 HcmV?d00001 diff --git a/src/gym/spaces/box.py b/src/gym/spaces/box.py new file mode 100644 index 0000000..d0d41f2 --- /dev/null +++ b/src/gym/spaces/box.py @@ -0,0 +1,52 @@ +import numpy as np +import gym +from gym import logger + +class Box(gym.Space): + """ + A box in R^n. + I.e., each coordinate is bounded. + + Example usage: + self.action_space = spaces.Box(low=-10, high=10, shape=(1,)) + """ + def __init__(self, low=None, high=None, shape=None, dtype=None): + """ + Two kinds of valid input: + Box(low=-1.0, high=1.0, shape=(3,4)) # low and high are scalars, and shape is provided + Box(low=np.array([-1.0,-2.0]), high=np.array([2.0,4.0])) # low and high are arrays of the same shape + """ + if shape is None: + assert low.shape == high.shape + shape = low.shape + else: + assert np.isscalar(low) and np.isscalar(high) + low = low + np.zeros(shape) + high = high + np.zeros(shape) + if dtype is None: # Autodetect type + if (high == 255).all(): + dtype = np.uint8 + else: + dtype = np.float32 + logger.warn("gym.spaces.Box autodetected dtype as %s. Please provide explicit dtype." % dtype) + self.low = low.astype(dtype) + self.high = high.astype(dtype) + gym.Space.__init__(self, shape, dtype) + + def sample(self): + return gym.spaces.np_random.uniform(low=self.low, high=self.high + (0 if self.dtype.kind == 'f' else 1), size=self.low.shape).astype(self.dtype) + + def contains(self, x): + return x.shape == self.shape and (x >= self.low).all() and (x <= self.high).all() + + def to_jsonable(self, sample_n): + return np.array(sample_n).tolist() + + def from_jsonable(self, sample_n): + return [np.asarray(sample) for sample in sample_n] + + def __repr__(self): + return "Box" + str(self.shape) + + def __eq__(self, other): + return np.allclose(self.low, other.low) and np.allclose(self.high, other.high) diff --git a/src/gym/spaces/dict_space.py b/src/gym/spaces/dict_space.py new file mode 100644 index 0000000..56cb91a --- /dev/null +++ b/src/gym/spaces/dict_space.py @@ -0,0 +1,75 @@ +import gym +from collections import OrderedDict + +class Dict(gym.Space): + """ + A dictionary of simpler spaces. + + Example usage: + self.observation_space = spaces.Dict({"position": spaces.Discrete(2), "velocity": spaces.Discrete(3)}) + + Example usage [nested]: + self.nested_observation_space = spaces.Dict({ + 'sensors': spaces.Dict({ + 'position': spaces.Box(low=-100, high=100, shape=(3,)), + 'velocity': spaces.Box(low=-1, high=1, shape=(3,)), + 'front_cam': spaces.Tuple(( + spaces.Box(low=0, high=1, shape=(10, 10, 3)), + spaces.Box(low=0, high=1, shape=(10, 10, 3)) + )), + 'rear_cam': spaces.Box(low=0, high=1, shape=(10, 10, 3)), + }), + 'ext_controller': spaces.MultiDiscrete([ [0,4], [0,1], [0,1] ]), + 'inner_state':spaces.Dict({ + 'charge': spaces.Discrete(100), + 'system_checks': spaces.MultiBinary(10), + 'job_status': spaces.Dict({ + 'task': spaces.Discrete(5), + 'progress': spaces.Box(low=0, high=100, shape=()), + }) + }) + }) + """ + def __init__(self, spaces): + if isinstance(spaces, dict) and not isinstance(spaces, OrderedDict): + spaces = OrderedDict(sorted(list(spaces.items()))) + if isinstance(spaces, list): + spaces = OrderedDict(spaces) + self.spaces = spaces + gym.Space.__init__(self, None, None) # None for shape and dtype, since it'll require special handling + + def sample(self): + return OrderedDict([(k, space.sample()) for k, space in self.spaces.items()]) + + def contains(self, x): + if not isinstance(x, dict) or len(x) != len(self.spaces): + return False + for k, space in self.spaces.items(): + if k not in x: + return False + if not space.contains(x[k]): + return False + return True + + def __repr__(self): + return "Dict(" + ", ". join([k + ":" + str(s) for k, s in self.spaces.items()]) + ")" + + def to_jsonable(self, sample_n): + # serialize as dict-repr of vectors + return {key: space.to_jsonable([sample[key] for sample in sample_n]) \ + for key, space in self.spaces.items()} + + def from_jsonable(self, sample_n): + dict_of_list = {} + for key, space in self.spaces.items(): + dict_of_list[key] = space.from_jsonable(sample_n[key]) + ret = [] + for i, _ in enumerate(dict_of_list[key]): + entry = {} + for key, value in dict_of_list.items(): + entry[key] = value[i] + ret.append(entry) + return ret + + def __eq__(self, other): + return self.spaces == other.spaces diff --git a/src/gym/spaces/discrete.py b/src/gym/spaces/discrete.py new file mode 100644 index 0000000..c737640 --- /dev/null +++ b/src/gym/spaces/discrete.py @@ -0,0 +1,31 @@ +import numpy as np +import gym + +class Discrete(gym.Space): + """ + {0,1,...,n-1} + + Example usage: + self.observation_space = spaces.Discrete(2) + """ + def __init__(self, n): + self.n = n + gym.Space.__init__(self, (), np.int64) + + def sample(self): + return gym.spaces.np_random.randint(self.n) + + def contains(self, x): + if isinstance(x, int): + as_int = x + elif isinstance(x, (np.generic, np.ndarray)) and (x.dtype.kind in np.typecodes['AllInteger'] and x.shape == ()): + as_int = int(x) + else: + return False + return as_int >= 0 and as_int < self.n + + def __repr__(self): + return "Discrete(%d)" % self.n + + def __eq__(self, other): + return self.n == other.n diff --git a/src/gym/spaces/multi_binary.py b/src/gym/spaces/multi_binary.py new file mode 100644 index 0000000..cfa3364 --- /dev/null +++ b/src/gym/spaces/multi_binary.py @@ -0,0 +1,25 @@ +import gym +import numpy as np + +class MultiBinary(gym.Space): + def __init__(self, n): + self.n = n + gym.Space.__init__(self, (self.n,), np.int8) + + def sample(self): + return gym.spaces.np_random.randint(low=0, high=2, size=self.n).astype(self.dtype) + + def contains(self, x): + return ((x==0) | (x==1)).all() + + def to_jsonable(self, sample_n): + return np.array(sample_n).tolist() + + def from_jsonable(self, sample_n): + return [np.asarray(sample) for sample in sample_n] + + def __repr__(self): + return "MultiBinary({})".format(self.n) + + def __eq__(self, other): + return self.n == other.n diff --git a/src/gym/spaces/multi_discrete.py b/src/gym/spaces/multi_discrete.py new file mode 100644 index 0000000..ef92131 --- /dev/null +++ b/src/gym/spaces/multi_discrete.py @@ -0,0 +1,28 @@ +import gym +import numpy as np + +class MultiDiscrete(gym.Space): + def __init__(self, nvec): + """ + nvec: vector of counts of each categorical variable + """ + self.nvec = np.asarray(nvec, dtype=np.int32) + gym.Space.__init__(self, (self.nvec.shape,), np.int8) + + def sample(self): + return (gym.spaces.np_random.random_sample(self.nvec.shape) * self.nvec).astype(self.dtype) + + def contains(self, x): + return (0 <= x).all() and (x < self.nvec).all() and x.dtype.kind in 'ui' + + def to_jsonable(self, sample_n): + return [sample.tolist() for sample in sample_n] + + def from_jsonable(self, sample_n): + return np.array(sample_n) + + def __repr__(self): + return "MultiDiscrete({})".format(self.nvec) + + def __eq__(self, other): + return np.all(self.nvec == other.nvec) diff --git a/src/gym/spaces/prng.py b/src/gym/spaces/prng.py new file mode 100644 index 0000000..ffca680 --- /dev/null +++ b/src/gym/spaces/prng.py @@ -0,0 +1,20 @@ +import numpy + +np_random = numpy.random.RandomState() + +def seed(seed=None): + """Seed the common numpy.random.RandomState used in spaces + + CF + https://github.com/openai/gym/commit/58e6aa95e5af2c738557431f812abb81c505a7cf#commitcomment-17669277 + for some details about why we seed the spaces separately from the + envs, but tl;dr is that it's pretty uncommon for them to be used + within an actual algorithm, and the code becomes simpler to just + use this common numpy.random.RandomState. + """ + np_random.seed(seed) + +# This numpy.random.RandomState gets used in all spaces for their +# 'sample' method. It's not really expected that people will be using +# these in their algorithms. +seed(0) diff --git a/src/gym/spaces/tests/__init__.py b/src/gym/spaces/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/gym/spaces/tests/test_spaces.py b/src/gym/spaces/tests/test_spaces.py new file mode 100644 index 0000000..cadc86f --- /dev/null +++ b/src/gym/spaces/tests/test_spaces.py @@ -0,0 +1,66 @@ +import json # note: ujson fails this test due to float equality +from copy import copy + +import numpy as np +import pytest + +from gym.spaces import Tuple, Box, Discrete, MultiDiscrete, MultiBinary, Dict + + +@pytest.mark.parametrize("space", [ + Discrete(3), + Tuple([Discrete(5), Discrete(10)]), + Tuple([Discrete(5), Box(low=np.array([0, 0]),high=np.array([1, 5]))]), + Tuple((Discrete(5), Discrete(2), Discrete(2))), + MultiDiscrete([2, 2, 100]), + Dict({"position": Discrete(5), "velocity": Box(low=np.array([0, 0]), high=np.array([1, 5]))}), + ]) +def test_roundtripping(space): + sample_1 = space.sample() + sample_2 = space.sample() + assert space.contains(sample_1) + assert space.contains(sample_2) + json_rep = space.to_jsonable([sample_1, sample_2]) + + json_roundtripped = json.loads(json.dumps(json_rep)) + + samples_after_roundtrip = space.from_jsonable(json_roundtripped) + sample_1_prime, sample_2_prime = samples_after_roundtrip + + s1 = space.to_jsonable([sample_1]) + s1p = space.to_jsonable([sample_1_prime]) + s2 = space.to_jsonable([sample_2]) + s2p = space.to_jsonable([sample_2_prime]) + assert s1 == s1p, "Expected {} to equal {}".format(s1, s1p) + assert s2 == s2p, "Expected {} to equal {}".format(s2, s2p) + + +@pytest.mark.parametrize("space", [ + Discrete(3), + Box(low=np.array([-10, 0]),high=np.array([10, 10])), + Tuple([Discrete(5), Discrete(10)]), + Tuple([Discrete(5), Box(low=np.array([0, 0]),high=np.array([1, 5]))]), + Tuple((Discrete(5), Discrete(2), Discrete(2))), + MultiDiscrete([2, 2, 100]), + MultiBinary(6), + Dict({"position": Discrete(5), "velocity": Box(low=np.array([0, 0]), high=np.array([1, 5]))}), + ]) +def test_equality(space): + space1 = space + space2 = copy(space) + assert space1 == space2, "Expected {} to equal {}".format(space1, space2) + + +@pytest.mark.parametrize("spaces", [ + (Discrete(3), Discrete(4)), + (MultiDiscrete([2, 2, 100]), MultiDiscrete([2, 2, 8])), + (MultiBinary(8), MultiBinary(7)), + (Box(low=np.array([-10, 0]),high=np.array([10, 10])), + Box(low=np.array([-10, 0]),high=np.array([10, 9]))), + (Tuple([Discrete(5), Discrete(10)]), Tuple([Discrete(1), Discrete(10)])), + (Dict({"position": Discrete(5)}), Dict({"position": Discrete(4)})), + (Dict({"position": Discrete(5)}), Dict({"speed": Discrete(5)})), + ]) +def test_inequality(spaces): + space1, space2 = spaces + assert space1 != space2, "Expected {} != {}".format(space1, space2) diff --git a/src/gym/spaces/tuple_space.py b/src/gym/spaces/tuple_space.py new file mode 100644 index 0000000..473aa65 --- /dev/null +++ b/src/gym/spaces/tuple_space.py @@ -0,0 +1,35 @@ +import gym + +class Tuple(gym.Space): + """ + A tuple (i.e., product) of simpler spaces + + Example usage: + self.observation_space = spaces.Tuple((spaces.Discrete(2), spaces.Discrete(3))) + """ + def __init__(self, spaces): + self.spaces = spaces + gym.Space.__init__(self, None, None) + + def sample(self): + return tuple([space.sample() for space in self.spaces]) + + def contains(self, x): + if isinstance(x, list): + x = tuple(x) # Promote list to tuple for contains check + return isinstance(x, tuple) and len(x) == len(self.spaces) and all( + space.contains(part) for (space,part) in zip(self.spaces,x)) + + def __repr__(self): + return "Tuple(" + ", ". join([str(s) for s in self.spaces]) + ")" + + def to_jsonable(self, sample_n): + # serialize as list-repr of tuple of vectors + return [space.to_jsonable([sample[i] for sample in sample_n]) \ + for i, space in enumerate(self.spaces)] + + def from_jsonable(self, sample_n): + return [sample for sample in zip(*[space.from_jsonable(sample_n[i]) for i, space in enumerate(self.spaces)])] + + def __eq__(self, other): + return self.spaces == other.spaces diff --git a/src/gym/tests/test_core.py b/src/gym/tests/test_core.py new file mode 100644 index 0000000..7256818 --- /dev/null +++ b/src/gym/tests/test_core.py @@ -0,0 +1,15 @@ +from gym import core + +class ArgumentEnv(core.Env): + calls = 0 + + def __init__(self, arg): + self.calls += 1 + self.arg = arg + +def test_env_instantiation(): + # This looks like a pretty trivial, but given our usage of + # __new__, it's worth having. + env = ArgumentEnv('arg') + assert env.arg == 'arg' + assert env.calls == 1 diff --git a/src/gym/utils/__init__.py b/src/gym/utils/__init__.py new file mode 100644 index 0000000..6d6aa82 --- /dev/null +++ b/src/gym/utils/__init__.py @@ -0,0 +1,10 @@ +"""A set of common utilities used within the environments. These are +not intended as API functions, and will not remain stable over time. +""" + +# These submodules should not have any import-time dependencies. +# We want this since we use `utils` during our import-time sanity checks +# that verify that our dependencies are actually present. +from .colorize import colorize +from .ezpickle import EzPickle +from .reraise import reraise diff --git a/src/gym/utils/__pycache__/__init__.cpython-37.pyc b/src/gym/utils/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2c109f1546e97176e97a1211d87e36fc858865c5 GIT binary patch literal 395 zcmXw!y-EW?6oqH98xunE4z~@2OlKux1PdDpsLfgolieFLIzP+YNhJFMK7!9+7%$vX=tnX~+!ihII9 zLal-lZSYT6M-r_zNS*|RT0HKp$g@dEshy5e&fEQAcxHXGHF%zDDOZ*KF(30kAJ=hC literal 0 HcmV?d00001 diff --git a/src/gym/utils/__pycache__/atomic_write.cpython-37.pyc b/src/gym/utils/__pycache__/atomic_write.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..049e0bc62f6f842bc8ba8720070f90553a637c4b GIT binary patch literal 1340 zcmY*ZL2n#26t+DxyOYT#NNo|3;9&KDIugoOY9*woLI^~pB9sCZY*-GJckInNnX#v~ zx0^*%B$VE{!3~ll{|0gNl~eyhPrNtVs=*_B?DszVeg5p{&vteS0_C6I|NimMAtC?b z;7v)P^C?unfJPEYYcj<@t7*fgjBaenG*QWEDwDI!-3M=4lO~&Hl$hIKA6yP)c17Kn zav+B<$TTw}z~q3*5u=zK$wF?wpcizyCFx^Q?!1I(w}>eG@77r;#$c3*UhD_L90S za2-~-aV#0scc4~K{U6YDa5nFe=gIkAAgA<_bqOfWyF}8D!TPkAke|K^Ntblg-IdHR znOv}6KYX5c>Gz;P$J}w3UZz*j2PHD-53a~YFPVNrz9pd05N4AL&}RZC+-sU+lwQ+4 z&~z&lbJX>>>$)BT7SzndFO(2I!OevAywn*PR(R zad0oBcaB_>BYz6FisN2;>c7ARzBg+-KUA^O{Mem0Z@zio_n!UL%1VRb`TLL8KfkFl z_J&>-PZ^VYXl4_gWRfSWQ;fXB-MiQEzGl*srB_UrROz_XDNFu63(9Y?gY9&wUpysD z?xC4&bc&IOjwgAiBv)lgmS1t~t;p&t)~U#v^f6XtT{bY*_BNTiqc7xB-71? zz%vStTcdUQ)Cyw>w}t;!5jmv`>jJ{UlQVgjn@_~I zI@^o(k|~A44iLy8T`HDpG|sF_EpDHEw1hpc2S z4)BF-PCe(bY>7DSCKCzr!HK(rAoeo}{l(ou!N5kaZk!GZE(`Eoh}u0gQqDX;Gc9zM zo$ymOVz}pk)GxacQFvIOkRbakqEiJATF=C)xgWk zq_56eVGu6X|73av(Es_o{R1-Aw4*&8wUIq8FWci7PBYUsy4&tgN9~D?6VrAcb!$A$ z{e_+d#lRIR-r!Z<@XGvX?SZQTt%XgO!-yUl>u4@;pJIZru-|WRjAgdZCI5nXEJO(R zQL4UUPuNe(fYH{#(-jQ5N^`E8G^aZh-704JdwrF<+z#g<+`v~u8yNTbDnGh8$9CCn zNiGpf<@Fr7Gax(m%q`2McjC?XDL>}F0p&^Ql)c0|@Rn!ZZ8q~jZt3W+C$8=xs8H=( z<>DYlLPlcUg>Zc?xz<@uJ#msYXGMduGfwTc*hM)iNJGs+<%8%&)`L1@Gk4w+k14I3 zV7sWCN<+OUwWypX-iwpiq6DMN73l**c!+yKMW~Zb@2*N1)F~5dCC@5?zJfp;-Pl3R zBt{pB(nIO}^<_}WYlFx{*6MuqzJZ7c-6O3tomXKpimbkh{n|$tlpI}o-8mx3IuMhTQs+M|MNO#E1bHhACjJC{7#`Iz5^Lu zgKdG!D{y(Syo4ohoYj;sVLlg8lK@?vi|EW^DRGhyH3x~rXG!Gz#5-lj{3SoUKI0GB zFHOkCBl&Rl{QA=+url(Welh9xdG!UQyKx-M!{-+C`&hjM)*0Q!_X1^Ul~6Y4C|$^R z0=^s6DR0wgq{1+7gyATYlZ58YFno@m-1$lkbusIPpHYo6t@#6m%CD0p{h_-0`pO%lcGCd00|JHAXTtbh_4|Xs$A^exk~Jl?X9SKS8h*K^PgjTZP(wZK9KjMbdRP&BhmI`UPWRRa4y7}fc-795g zg_0(wsdQEHoVq;CixkQkn+|eL)dAPkih}n#v+L0N?1lsC;HHCH4sJWR<6y(VU4U*o zAw!)`5?^zc1VhcaOu`Azb9I=IL0YynQ^HXe z({svV>L`n8Lm6!5lr?!XAP8;G+*7Ra{WJVzy0E^pVTuj2zH_hWhP7|RQQdBud?3rB z4&f5;Flt;v$m*KxDh1^fiul_q_0BY z>|y_d;o9`mflm8C(mv0u>5oOujWT_sv;J^W^xaD~{pJARr8l0`(Z%KpR52?6s2zC( zN0^`puK+INWvti0zuon=wz{Nl?d~#_?e5luiOlLH2sQDhk$>PC1nTH%p;(#oXYhw2 NvkE{w5C6X+@)wH65_+uOWU z;RI){TsXjye}g#gm4CsB8K+5FinZhQ*yEXRK9Bw2(xnZC?c0a1udcTk`%cQDq0a81 z_-okx$0U>d9g1Ra(>*SeXRMnRxUy^sj_#rOE$kFS8@887zL&~GrtjEZOSa?%{9ll5 zxrYC??4XbJrt|RlsV)vnB?7wG9UQ14cnBjAKsW_eT$3P-gxV~$BQ4NGX$OThKDfFF z)@=Yb;fD2Cnc({yQGfWq7+0l&+KZvOJ)a}Hq7>f4zjnBF-{`R@d$7RKy&X4_5jCmy zAI#S3;HPWT^wi+qt;{p0WVT}#oYp0^)$w*-^2RabexdBD@ zVyr;g;Yni8DJT4f$|xtwa*CNK1P9jOc;7lu=14nh;(5blq>B+uoTy+s+rD`d^OUNG zQE^sycv3&M+cw6hTDl*E)BUIx94nSuib7?)i{h_fH{&ywvsr>YmNS+s-{~gJ(2f85GmcqAti11B;hJQjRb=~8*?Gw+IQ zI2~s-(&n>8pnf%NI*Ssb3+d^4GT!FLf1E3yWj>S_<+P3BFJm`j2P9nbk92_(%*Ii| zj;zj%xuXCP@Vx7w+FZ=@p$a~Tpz{20obj}q@#8;Ffmm4-aTN{7J^713=zRzX<1L>d zkWD06CY$U%e}gn1@K4DsIpCi;#}|j*n4MDqk=8J+6fq%nf%ma#*Of#t-88~&xNK5e zhu^^VOW2zj{)D~1&H`WA>~z;Ch{1ZqARBo;wz4j1j10W4MR~HahCpnQ=WZRHI(kbT umCdR6bmESc89GbpDxRxEp<-3-%LmB!P1P literal 0 HcmV?d00001 diff --git a/src/gym/utils/__pycache__/json_utils.cpython-37.pyc b/src/gym/utils/__pycache__/json_utils.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5d51ab2b21db2e18ccbba87bef443318083578fe GIT binary patch literal 600 zcmZ{iJ4*vW5XblSE+)pr2c(wmG$0;62o@ruXkihBU=s^DZ&$r=*}fdCW$nhiAa4>BCW-p`G+jyDX06ie(^75~az5U@{x(oY`Cp zSYx1AtmK_AmRZGgW(3o@y;ZX8@3tGRoMAH3oiY@Kn02<>p7Yh!;Ek9Cyv6UG@Ej+EFuF2PsErzk*g~k2 zRDgmIOdQ_i!!WZ+3gG~hyeyaNI(PGBDrBsESkd-frMwMO cbd{)_=8r7mhO6xk70*(!SG+zHpQc8C01cm*l>h($ literal 0 HcmV?d00001 diff --git a/src/gym/utils/__pycache__/reraise.cpython-37.pyc b/src/gym/utils/__pycache__/reraise.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bd9f43001d819e3d7fa6b6556113a843880ec673 GIT binary patch literal 1411 zcmZux&yU+g6rLZpbvu#wnY~ zIc5I`uI-Wk263D#r~MZ=@jW})qPAnr^P4y0c|X4I`J1Doh++Kw$6r6!K4bsT;xIfY zPcZFI5SnRTu$X0R$~8M#p?EZyCw ztw;UcRhpGmzFZh`H4I!(nrxC^xxlU_c*nhEp%r~st;;MvI;>tL#VT{%$|Py_JV|Gc zXMZx&!yW%V9Q|lBV@JtzlZ;BUoMvfdM`d1Qc4`Dj(;g&pk^zbx0Tv)2h8 z+hD|xdB_9N6XqDUl!`@z>O-@s%L6Din*yUPuYuDnv==q61X*Un+;8^eGgL0MF+9 zJ=$Czj^4t9reZW3cz%U)fJXxs(suyrHA0=TH+&*a*j8xafx@6Pn|gq-YaTZmfZEbI zzp*{lwC}@)${!g`kf=kmcMBfI|k3k$5U;;86fVh|kNTe{NFt#v6F{CgBGiWj=gXBN}L^A`i zGY}UG0Errg1q?Ne3mH=wnwU};fNB~2G#PL4m1mY@#FrE$CZ{GPCTD9h-C|6=#R=!H zWGG?*>iuP>A6lGRRIHzvRFtS+P?VpQnp{$>UyzxTTAW|3UtE-|pI(`(Us{rxQ>= (3, 3): + # Python 3.3 and up have a native `replace` method + from os import replace +elif sys.platform.startswith("win"): + def replace(src, dst): + # TODO: on Windows, this will raise if the file is in use, + # which is possible. We'll need to make this more robust over + # time. + try: + os.remove(dst) + except OSError: + pass + os.rename(src, dst) +else: + # POSIX rename() is always atomic + from os import rename as replace + +@contextmanager +def atomic_write(filepath, binary=False, fsync=False): + """ Writeable file object that atomically updates a file (using a temporary file). In some cases (namely Python < 3.3 on Windows), this could result in an existing file being temporarily unlinked. + + :param filepath: the file path to be opened + :param binary: whether to open the file in a binary mode instead of textual + :param fsync: whether to force write the file to disk + """ + + tmppath = filepath + '~' + while os.path.isfile(tmppath): + tmppath += '~' + try: + with open(tmppath, 'wb' if binary else 'w') as file: + yield file + if fsync: + file.flush() + os.fsync(file.fileno()) + replace(tmppath, filepath) + finally: + try: + os.remove(tmppath) + except (IOError, OSError): + pass diff --git a/src/gym/utils/closer.py b/src/gym/utils/closer.py new file mode 100644 index 0000000..a8e5a5f --- /dev/null +++ b/src/gym/utils/closer.py @@ -0,0 +1,67 @@ +import atexit +import threading +import weakref + +class Closer(object): + """A registry that ensures your objects get closed, whether manually, + upon garbage collection, or upon exit. To work properly, your + objects need to cooperate and do something like the following: + + ``` + closer = Closer() + class Example(object): + def __init__(self): + self._id = closer.register(self) + + def close(self): + # Probably worth making idempotent too! + ... + closer.unregister(self._id) + + def __del__(self): + self.close() + ``` + + That is, your objects should: + + - register() themselves and save the returned ID + - unregister() themselves upon close() + - include a __del__ method which close()'s the object + """ + + def __init__(self, atexit_register=True): + self.lock = threading.Lock() + self.next_id = -1 + self.closeables = weakref.WeakValueDictionary() + + if atexit_register: + atexit.register(self.close) + + def generate_next_id(self): + with self.lock: + self.next_id += 1 + return self.next_id + + def register(self, closeable): + """Registers an object with a 'close' method. + + Returns: + int: The registration ID of this object. It is the caller's responsibility to save this ID if early closing is desired. + """ + assert hasattr(closeable, 'close'), 'No close method for {}'.format(closeable) + + next_id = self.generate_next_id() + self.closeables[next_id] = closeable + return next_id + + def unregister(self, id): + assert id is not None + if id in self.closeables: + del self.closeables[id] + + def close(self): + # Explicitly fetch all monitors first so that they can't disappear while + # we iterate. cf. http://stackoverflow.com/a/12429620 + closeables = list(self.closeables.values()) + for closeable in closeables: + closeable.close() diff --git a/src/gym/utils/colorize.py b/src/gym/utils/colorize.py new file mode 100644 index 0000000..da70184 --- /dev/null +++ b/src/gym/utils/colorize.py @@ -0,0 +1,35 @@ +"""A set of common utilities used within the environments. These are +not intended as API functions, and will not remain stable over time. +""" + +color2num = dict( + gray=30, + red=31, + green=32, + yellow=33, + blue=34, + magenta=35, + cyan=36, + white=37, + crimson=38 +) + + +def colorize(string, color, bold=False, highlight = False): + """Return string surrounded by appropriate terminal color codes to + print colorized text. Valid colors: gray, red, green, yellow, + blue, magenta, cyan, white, crimson + """ + + # Import six here so that `utils` has no import-time dependencies. + # We want this since we use `utils` during our import-time sanity checks + # that verify that our dependencies (including six) are actually present. + import six + + attr = [] + num = color2num[color] + if highlight: num += 10 + attr.append(six.u(str(num))) + if bold: attr.append(six.u('1')) + attrs = six.u(';').join(attr) + return six.u('\x1b[%sm%s\x1b[0m') % (attrs, string) diff --git a/src/gym/utils/ezpickle.py b/src/gym/utils/ezpickle.py new file mode 100644 index 0000000..3fb00da --- /dev/null +++ b/src/gym/utils/ezpickle.py @@ -0,0 +1,27 @@ +class EzPickle(object): + """Objects that are pickled and unpickled via their constructor + arguments. + + Example usage: + + class Dog(Animal, EzPickle): + def __init__(self, furcolor, tailkind="bushy"): + Animal.__init__() + EzPickle.__init__(furcolor, tailkind) + ... + + When this object is unpickled, a new Dog will be constructed by passing the provided + furcolor and tailkind into the constructor. However, philosophers are still not sure + whether it is still the same dog. + + This is generally needed only for environments which wrap C/C++ code, such as MuJoCo + and Atari. + """ + def __init__(self, *args, **kwargs): + self._ezpickle_args = args + self._ezpickle_kwargs = kwargs + def __getstate__(self): + return {"_ezpickle_args" : self._ezpickle_args, "_ezpickle_kwargs": self._ezpickle_kwargs} + def __setstate__(self, d): + out = type(self)(*d["_ezpickle_args"], **d["_ezpickle_kwargs"]) + self.__dict__.update(out.__dict__) diff --git a/src/gym/utils/json_utils.py b/src/gym/utils/json_utils.py new file mode 100644 index 0000000..4657dfc --- /dev/null +++ b/src/gym/utils/json_utils.py @@ -0,0 +1,22 @@ +import numpy as np + +def json_encode_np(obj): + """ + JSON can't serialize numpy types, so convert to pure python + """ + if isinstance(obj, np.ndarray): + return list(obj) + elif isinstance(obj, np.float32): + return float(obj) + elif isinstance(obj, np.float64): + return float(obj) + elif isinstance(obj, np.int8): + return int(obj) + elif isinstance(obj, np.int16): + return int(obj) + elif isinstance(obj, np.int32): + return int(obj) + elif isinstance(obj, np.int64): + return int(obj) + else: + return obj diff --git a/src/gym/utils/play.py b/src/gym/utils/play.py new file mode 100644 index 0000000..694089e --- /dev/null +++ b/src/gym/utils/play.py @@ -0,0 +1,186 @@ +import gym +import pygame +import sys +import time +import matplotlib +try: + matplotlib.use('GTK3Agg') + import matplotlib.pyplot as plt +except Exception: + pass + + +import pyglet.window as pw + +from collections import deque +from pygame.locals import HWSURFACE, DOUBLEBUF, RESIZABLE, VIDEORESIZE +from threading import Thread + +def display_arr(screen, arr, video_size, transpose): + arr_min, arr_max = arr.min(), arr.max() + arr = 255.0 * (arr - arr_min) / (arr_max - arr_min) + pyg_img = pygame.surfarray.make_surface(arr.swapaxes(0, 1) if transpose else arr) + pyg_img = pygame.transform.scale(pyg_img, video_size) + screen.blit(pyg_img, (0,0)) + +def play(env, transpose=True, fps=30, zoom=None, callback=None, keys_to_action=None): + """Allows one to play the game using keyboard. + + To simply play the game use: + + play(gym.make("Pong-v3")) + + Above code works also if env is wrapped, so it's particularly useful in + verifying that the frame-level preprocessing does not render the game + unplayable. + + If you wish to plot real time statistics as you play, you can use + gym.utils.play.PlayPlot. Here's a sample code for plotting the reward + for last 5 second of gameplay. + + def callback(obs_t, obs_tp1, rew, done, info): + return [rew,] + env_plotter = EnvPlotter(callback, 30 * 5, ["reward"]) + + env = gym.make("Pong-v3") + play(env, callback=env_plotter.callback) + + + Arguments + --------- + env: gym.Env + Environment to use for playing. + transpose: bool + If True the output of observation is transposed. + Defaults to true. + fps: int + Maximum number of steps of the environment to execute every second. + Defaults to 30. + zoom: float + Make screen edge this many times bigger + callback: lambda or None + Callback if a callback is provided it will be executed after + every step. It takes the following input: + obs_t: observation before performing action + obs_tp1: observation after performing action + action: action that was executed + rew: reward that was received + done: whether the environment is done or not + info: debug info + keys_to_action: dict: tuple(int) -> int or None + Mapping from keys pressed to action performed. + For example if pressed 'w' and space at the same time is supposed + to trigger action number 2 then key_to_action dict would look like this: + + { + # ... + sorted(ord('w'), ord(' ')) -> 2 + # ... + } + If None, default key_to_action mapping for that env is used, if provided. + """ + + obs_s = env.observation_space + assert type(obs_s) == gym.spaces.box.Box + assert len(obs_s.shape) == 2 or (len(obs_s.shape) == 3 and obs_s.shape[2] in [1,3]) + + if keys_to_action is None: + if hasattr(env, 'get_keys_to_action'): + keys_to_action = env.get_keys_to_action() + elif hasattr(env.unwrapped, 'get_keys_to_action'): + keys_to_action = env.unwrapped.get_keys_to_action() + else: + assert False, env.spec.id + " does not have explicit key to action mapping, " + \ + "please specify one manually" + relevant_keys = set(sum(map(list, keys_to_action.keys()),[])) + + if transpose: + video_size = env.observation_space.shape[1], env.observation_space.shape[0] + else: + video_size = env.observation_space.shape[0], env.observation_space.shape[1] + + if zoom is not None: + video_size = int(video_size[0] * zoom), int(video_size[1] * zoom) + + pressed_keys = [] + running = True + env_done = True + + screen = pygame.display.set_mode(video_size) + clock = pygame.time.Clock() + + + while running: + if env_done: + env_done = False + obs = env.reset() + else: + action = keys_to_action.get(tuple(sorted(pressed_keys)), 0) + prev_obs = obs + obs, rew, env_done, info = env.step(action) + if callback is not None: + callback(prev_obs, obs, action, rew, env_done, info) + if obs is not None: + if len(obs.shape) == 2: + obs = obs[:, :, None] + if obs.shape[2] == 1: + obs = obs.repeat(3, axis=2) + display_arr(screen, obs, transpose=transpose, video_size=video_size) + + # process pygame events + for event in pygame.event.get(): + # test events, set key states + if event.type == pygame.KEYDOWN: + if event.key in relevant_keys: + pressed_keys.append(event.key) + elif event.key == 27: + running = False + elif event.type == pygame.KEYUP: + if event.key in relevant_keys: + pressed_keys.remove(event.key) + elif event.type == pygame.QUIT: + running = False + elif event.type == VIDEORESIZE: + video_size = event.size + screen = pygame.display.set_mode(video_size) + print(video_size) + + pygame.display.flip() + clock.tick(fps) + pygame.quit() + +class PlayPlot(object): + def __init__(self, callback, horizon_timesteps, plot_names): + self.data_callback = callback + self.horizon_timesteps = horizon_timesteps + self.plot_names = plot_names + + num_plots = len(self.plot_names) + self.fig, self.ax = plt.subplots(num_plots) + if num_plots == 1: + self.ax = [self.ax] + for axis, name in zip(self.ax, plot_names): + axis.set_title(name) + self.t = 0 + self.cur_plot = [None for _ in range(num_plots)] + self.data = [deque(maxlen=horizon_timesteps) for _ in range(num_plots)] + + def callback(self, obs_t, obs_tp1, action, rew, done, info): + points = self.data_callback(obs_t, obs_tp1, action, rew, done, info) + for point, data_series in zip(points, self.data): + data_series.append(point) + self.t += 1 + + xmin, xmax = max(0, self.t - self.horizon_timesteps), self.t + + for i, plot in enumerate(self.cur_plot): + if plot is not None: + plot.remove() + self.cur_plot[i] = self.ax[i].scatter(range(xmin, xmax), list(self.data[i])) + self.ax[i].set_xlim(xmin, xmax) + plt.pause(0.000001) + + +if __name__ == '__main__': + env = gym.make("MontezumaRevengeNoFrameskip-v4") + play(env, zoom=4, fps=60) diff --git a/src/gym/utils/reraise.py b/src/gym/utils/reraise.py new file mode 100644 index 0000000..06a9029 --- /dev/null +++ b/src/gym/utils/reraise.py @@ -0,0 +1,41 @@ +import sys + +# We keep the actual reraising in different modules, since the +# reraising code uses syntax mutually exclusive to Python 2/3. +if sys.version_info[0] < 3: + from .reraise_impl_py2 import reraise_impl #pylint: disable=E0401 +else: + from .reraise_impl_py3 import reraise_impl + +def reraise(prefix=None, suffix=None): + old_exc_type, old_exc_value, traceback = sys.exc_info() + if old_exc_value is None: + old_exc_value = old_exc_type() + + e = ReraisedException(old_exc_value, prefix, suffix) + + reraise_impl(e, traceback) + +# http://stackoverflow.com/a/13653312 +def full_class_name(o): + module = o.__class__.__module__ + if module is None or module == str.__class__.__module__: + return o.__class__.__name__ + return module + '.' + o.__class__.__name__ + +class ReraisedException(Exception): + def __init__(self, old_exc, prefix, suffix): + self.old_exc = old_exc + self.prefix = prefix + self.suffix = suffix + + def __str__(self): + klass = self.old_exc.__class__ + + orig = "%s: %s" % (full_class_name(self.old_exc), klass.__str__(self.old_exc)) + prefixpart = suffixpart = '' + if self.prefix is not None: + prefixpart = self.prefix + "\n" + if self.suffix is not None: + suffixpart = "\n\n" + self.suffix + return "%sThe original exception was:\n\n%s%s" % (prefixpart, orig, suffixpart) diff --git a/src/gym/utils/reraise_impl_py2.py b/src/gym/utils/reraise_impl_py2.py new file mode 100644 index 0000000..9c55b0d --- /dev/null +++ b/src/gym/utils/reraise_impl_py2.py @@ -0,0 +1,2 @@ +def reraise_impl(e, traceback): + raise e.__class__, e, traceback diff --git a/src/gym/utils/reraise_impl_py3.py b/src/gym/utils/reraise_impl_py3.py new file mode 100644 index 0000000..1fc8db5 --- /dev/null +++ b/src/gym/utils/reraise_impl_py3.py @@ -0,0 +1,4 @@ +# http://stackoverflow.com/a/33822606 -- `from None` disables Python 3' +# semi-smart exception chaining, which we don't want in this case. +def reraise_impl(e, traceback): + raise e.with_traceback(traceback) from None diff --git a/src/gym/utils/seeding.py b/src/gym/utils/seeding.py new file mode 100644 index 0000000..39fe342 --- /dev/null +++ b/src/gym/utils/seeding.py @@ -0,0 +1,91 @@ +import hashlib +import numpy as np +import os +import random as _random +from six import integer_types +import struct +import sys + +from gym import error + +def np_random(seed=None): + if seed is not None and not (isinstance(seed, integer_types) and 0 <= seed): + raise error.Error('Seed must be a non-negative integer or omitted, not {}'.format(seed)) + + seed = create_seed(seed) + + rng = np.random.RandomState() + rng.seed(_int_list_from_bigint(hash_seed(seed))) + return rng, seed + +def hash_seed(seed=None, max_bytes=8): + """Any given evaluation is likely to have many PRNG's active at + once. (Most commonly, because the environment is running in + multiple processes.) There's literature indicating that having + linear correlations between seeds of multiple PRNG's can correlate + the outputs: + + http://blogs.unity3d.com/2015/01/07/a-primer-on-repeatable-random-numbers/ + http://stackoverflow.com/questions/1554958/how-different-do-random-seeds-need-to-be + http://dl.acm.org/citation.cfm?id=1276928 + + Thus, for sanity we hash the seeds before using them. (This scheme + is likely not crypto-strength, but it should be good enough to get + rid of simple correlations.) + + Args: + seed (Optional[int]): None seeds from an operating system specific randomness source. + max_bytes: Maximum number of bytes to use in the hashed seed. + """ + if seed is None: + seed = create_seed(max_bytes=max_bytes) + hash = hashlib.sha512(str(seed).encode('utf8')).digest() + return _bigint_from_bytes(hash[:max_bytes]) + +def create_seed(a=None, max_bytes=8): + """Create a strong random seed. Otherwise, Python 2 would seed using + the system time, which might be non-robust especially in the + presence of concurrency. + + Args: + a (Optional[int, str]): None seeds from an operating system specific randomness source. + max_bytes: Maximum number of bytes to use in the seed. + """ + # Adapted from https://svn.python.org/projects/python/tags/r32/Lib/random.py + if a is None: + a = _bigint_from_bytes(os.urandom(max_bytes)) + elif isinstance(a, str): + a = a.encode('utf8') + a += hashlib.sha512(a).digest() + a = _bigint_from_bytes(a[:max_bytes]) + elif isinstance(a, integer_types): + a = a % 2**(8 * max_bytes) + else: + raise error.Error('Invalid type for seed: {} ({})'.format(type(a), a)) + + return a + +# TODO: don't hardcode sizeof_int here +def _bigint_from_bytes(bytes): + sizeof_int = 4 + padding = sizeof_int - len(bytes) % sizeof_int + bytes += b'\0' * padding + int_count = int(len(bytes) / sizeof_int) + unpacked = struct.unpack("{}I".format(int_count), bytes) + accum = 0 + for i, val in enumerate(unpacked): + accum += 2 ** (sizeof_int * 8 * i) * val + return accum + +def _int_list_from_bigint(bigint): + # Special case 0 + if bigint < 0: + raise error.Error('Seed must be non-negative, not {}'.format(bigint)) + elif bigint == 0: + return [0] + + ints = [] + while bigint > 0: + bigint, mod = divmod(bigint, 2 ** 32) + ints.append(mod) + return ints diff --git a/src/gym/utils/tests/test_atexit.py b/src/gym/utils/tests/test_atexit.py new file mode 100644 index 0000000..bec6fba --- /dev/null +++ b/src/gym/utils/tests/test_atexit.py @@ -0,0 +1,21 @@ +from gym.utils.closer import Closer + +class Closeable(object): + close_called = False + def close(self): + self.close_called = True + +def test_register_unregister(): + registry = Closer(atexit_register=False) + c1 = Closeable() + c2 = Closeable() + + assert not c1.close_called + assert not c2.close_called + registry.register(c1) + id2 = registry.register(c2) + + registry.unregister(id2) + registry.close() + assert c1.close_called + assert not c2.close_called diff --git a/src/gym/utils/tests/test_seeding.py b/src/gym/utils/tests/test_seeding.py new file mode 100644 index 0000000..12fa69b --- /dev/null +++ b/src/gym/utils/tests/test_seeding.py @@ -0,0 +1,16 @@ +from gym import error +from gym.utils import seeding + +def test_invalid_seeds(): + for seed in [-1, 'test']: + try: + seeding.np_random(seed) + except error.Error: + pass + else: + assert False, 'Invalid seed {} passed validation'.format(seed) + +def test_valid_seeds(): + for seed in [0, 1]: + random, seed1 = seeding.np_random(seed) + assert seed == seed1 diff --git a/src/gym/version.py b/src/gym/version.py new file mode 100644 index 0000000..7244f26 --- /dev/null +++ b/src/gym/version.py @@ -0,0 +1 @@ +VERSION = '0.10.8' diff --git a/src/gym/wrappers/README.md b/src/gym/wrappers/README.md new file mode 100644 index 0000000..3f9ce25 --- /dev/null +++ b/src/gym/wrappers/README.md @@ -0,0 +1,26 @@ +# Wrappers + +Wrappers are used to transform an environment in a modular way: + +``` +env = gym.make('Pong-v0') +env = MyWrapper(env) +``` + +Note that we may later restructure any of the files in this directory, +but will keep the wrappers available at the wrappers' top-level +folder. So for example, you should access `MyWrapper` as follows: + +``` +# Will be supported in future releases +from gym.wrappers import MyWrapper +``` + +## Quick tips for writing your own wrapper + +- Don't forget to call super(class_name, self).__init__(env) if you override the wrapper's __init__ function +- You can access the inner environment with `self.unwrapped` +- You can access the previous layer using `self.env` +- The variables `metadata`, `action_space`, `observation_space`, `reward_range`, and `spec` are copied to `self` from the previous layer +- Create a wrapped function for at least one of the following: `__init__(self, env)`, `_step`, `_reset`, `_render`, `_close`, or `_seed` +- Your layered function should take its input from the previous layer (`self.env`) and/or the inner layer (`self.unwrapped`) diff --git a/src/gym/wrappers/__init__.py b/src/gym/wrappers/__init__.py new file mode 100644 index 0000000..cf0d21b --- /dev/null +++ b/src/gym/wrappers/__init__.py @@ -0,0 +1,4 @@ +from gym import error +from gym.wrappers.monitor import Monitor +from gym.wrappers.time_limit import TimeLimit +from gym.wrappers.dict import FlattenDictWrapper diff --git a/src/gym/wrappers/__pycache__/__init__.cpython-37.pyc b/src/gym/wrappers/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..415ff622a2d86f9f159bb89d5a7a0f36211f1453 GIT binary patch literal 346 zcmY+9u}TCn5QdY@W_J~@P=tGiZ8nXKAR;1GYIBN^E5f=PB$8Z~Nkr~R?CgCTvE0_m zSFm!j#}zjrGhgOs{v?;P**?Mee*ap2VEsvlZDa@+xWfsip7hibMeTgcPk;f~s)KXB}S5~#3D>F-oL1Pwv7 xPtb}1{EO~l5QDKg_#gsw0!_sBcA=EPPbk$4>#;g>zJIm)oT6JOFdfje{sF_qUk(5O literal 0 HcmV?d00001 diff --git a/src/gym/wrappers/__pycache__/dict.cpython-37.pyc b/src/gym/wrappers/__pycache__/dict.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..30bf723d0bfd22f4c2103341ec5f91b6d7dc6465 GIT binary patch literal 1162 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 G#s32QTIMDI literal 0 HcmV?d00001 diff --git a/src/gym/wrappers/__pycache__/time_limit.cpython-37.pyc b/src/gym/wrappers/__pycache__/time_limit.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1216cc8fbbd80bdb0ef14b0499c29ab1b1ade67b GIT binary patch literal 1813 zcmaJ>Pj4eN6t_KpGHKIpx7|gnMM!h#VMjo7K!O7Z!LAneu!;~{gcOjBJ9e_uPG*Ab zv@}XCw9h+> zvJHDnZpcm8lQ$$J{Wd(i<=ThENWCmZh3(}l>$nG3%ZFl#r89ED7HmeBl#&^n5gyC} zpx{2xND`p2Bw&;EGzI0Xg zgf#n>pxjsM?UYgwT!@P*An7aCO#T%f8`w|AH6`?r{ADWk5mH6E?kbP42_V?X2-> zP}~BpLA!)aAK!TX8pcNKmK&I8@5W0wfCEsqCvCltCv@k8>V3-=fn=C?8N5O+Bpqa4 z;0aa)GB3PLxRQ|(1QAd7zg2dktJLa=N{c~yrc$9*Iu^#J^+cy0!`}3x=hbQYS{S^5 zY^V0MN-^WjeJa(UsDOQRo~~m$oPK2Z-&HEIm?#8nS`xq8g@J8D*bjZ?QI~dq#~!WsBS#h=~O; zxI4_+z8c;3myjlHi@JKQb**&=G@uK?Y6I#+{7**83Ms5`!BANjc@tU77qW{*j_Pi+ zJ_1Xp!vDltoe3>nDC!;+Mx+#VYAN{#i z>DLYS7!+3x#{qU2T`%$+u(du%Snmn4(C5lMA_WALXOTy8UgYh;jeB0@8^ymImu^@v!7#? K7_^$u9rh1scDn5V literal 0 HcmV?d00001 diff --git a/src/gym/wrappers/dict.py b/src/gym/wrappers/dict.py new file mode 100644 index 0000000..d583467 --- /dev/null +++ b/src/gym/wrappers/dict.py @@ -0,0 +1,28 @@ +import gym +import numpy as np + + +__all__ = ['FlattenDictWrapper'] + + +class FlattenDictWrapper(gym.ObservationWrapper): + """Flattens selected keys of a Dict observation space into + an array. + """ + def __init__(self, env, dict_keys): + super(FlattenDictWrapper, self).__init__(env) + self.dict_keys = dict_keys + + # Figure out observation_space dimension. + size = 0 + for key in dict_keys: + shape = self.env.observation_space.spaces[key].shape + size += np.prod(shape) + self.observation_space = gym.spaces.Box(-np.inf, np.inf, shape=(size,), dtype='float32') + + def observation(self, observation): + assert isinstance(observation, dict) + obs = [] + for key in self.dict_keys: + obs.append(observation[key].ravel()) + return np.concatenate(obs) diff --git a/src/gym/wrappers/monitor.py b/src/gym/wrappers/monitor.py new file mode 100644 index 0000000..87c83ab --- /dev/null +++ b/src/gym/wrappers/monitor.py @@ -0,0 +1,381 @@ +import gym +from gym import Wrapper +from gym import error, version, logger +import os, json, numpy as np, six +from gym.wrappers.monitoring import stats_recorder, video_recorder +from gym.utils import atomic_write, closer +from gym.utils.json_utils import json_encode_np + +FILE_PREFIX = 'openaigym' +MANIFEST_PREFIX = FILE_PREFIX + '.manifest' + +class Monitor(Wrapper): + def __init__(self, env, directory, video_callable=None, force=False, resume=False, + write_upon_reset=False, uid=None, mode=None): + super(Monitor, self).__init__(env) + + self.videos = [] + + self.stats_recorder = None + self.video_recorder = None + self.enabled = False + self.episode_id = 0 + self._monitor_id = None + self.env_semantics_autoreset = env.metadata.get('semantics.autoreset') + + self._start(directory, video_callable, force, resume, + write_upon_reset, uid, mode) + + def step(self, action): + self._before_step(action) + observation, reward, done, info = self.env.step(action) + done = self._after_step(observation, reward, done, info) + + return observation, reward, done, info + + def reset(self, **kwargs): + self._before_reset() + observation = self.env.reset(**kwargs) + self._after_reset(observation) + + return observation + + def close(self): + super(Monitor, self)._close() + + # _monitor will not be set if super(Monitor, self).__init__ raises, this check prevents a confusing error message + if getattr(self, '_monitor', None): + self.close() + + def set_monitor_mode(self, mode): + logger.info("Setting the monitor mode is deprecated and will be removed soon") + self._set_mode(mode) + + + def _start(self, directory, video_callable=None, force=False, resume=False, + write_upon_reset=False, uid=None, mode=None): + """Start monitoring. + + Args: + directory (str): A per-training run directory where to record stats. + video_callable (Optional[function, False]): function that takes in the index of the episode and outputs a boolean, indicating whether we should record a video on this episode. The default (for video_callable is None) is to take perfect cubes, capped at 1000. False disables video recording. + force (bool): Clear out existing training data from this directory (by deleting every file prefixed with "openaigym."). + resume (bool): Retain the training data already in this directory, which will be merged with our new data + write_upon_reset (bool): Write the manifest file on each reset. (This is currently a JSON file, so writing it is somewhat expensive.) + uid (Optional[str]): A unique id used as part of the suffix for the file. By default, uses os.getpid(). + mode (['evaluation', 'training']): Whether this is an evaluation or training episode. + """ + if self.env.spec is None: + logger.warn("Trying to monitor an environment which has no 'spec' set. This usually means you did not create it via 'gym.make', and is recommended only for advanced users.") + env_id = '(unknown)' + else: + env_id = self.env.spec.id + + if not os.path.exists(directory): + logger.info('Creating monitor directory %s', directory) + if six.PY3: + os.makedirs(directory, exist_ok=True) + else: + os.makedirs(directory) + + if video_callable is None: + video_callable = capped_cubic_video_schedule + elif video_callable == False: + video_callable = disable_videos + elif not callable(video_callable): + raise error.Error('You must provide a function, None, or False for video_callable, not {}: {}'.format(type(video_callable), video_callable)) + self.video_callable = video_callable + + # Check on whether we need to clear anything + if force: + clear_monitor_files(directory) + elif not resume: + training_manifests = detect_training_manifests(directory) + if len(training_manifests) > 0: + raise error.Error('''Trying to write to monitor directory {} with existing monitor files: {}. + + You should use a unique directory for each training run, or use 'force=True' to automatically clear previous monitor files.'''.format(directory, ', '.join(training_manifests[:5]))) + + self._monitor_id = monitor_closer.register(self) + + self.enabled = True + self.directory = os.path.abspath(directory) + # We use the 'openai-gym' prefix to determine if a file is + # ours + self.file_prefix = FILE_PREFIX + self.file_infix = '{}.{}'.format(self._monitor_id, uid if uid else os.getpid()) + + self.stats_recorder = stats_recorder.StatsRecorder(directory, '{}.episode_batch.{}'.format(self.file_prefix, self.file_infix), autoreset=self.env_semantics_autoreset, env_id=env_id) + + if not os.path.exists(directory): os.mkdir(directory) + self.write_upon_reset = write_upon_reset + + if mode is not None: + self._set_mode(mode) + + def _flush(self, force=False): + """Flush all relevant monitor information to disk.""" + if not self.write_upon_reset and not force: + return + + self.stats_recorder.flush() + + # Give it a very distiguished name, since we need to pick it + # up from the filesystem later. + path = os.path.join(self.directory, '{}.manifest.{}.manifest.json'.format(self.file_prefix, self.file_infix)) + logger.debug('Writing training manifest file to %s', path) + with atomic_write.atomic_write(path) as f: + # We need to write relative paths here since people may + # move the training_dir around. It would be cleaner to + # already have the basenames rather than basename'ing + # manually, but this works for now. + json.dump({ + 'stats': os.path.basename(self.stats_recorder.path), + 'videos': [(os.path.basename(v), os.path.basename(m)) + for v, m in self.videos], + 'env_info': self._env_info(), + }, f, default=json_encode_np) + + def close(self): + """Flush all monitor data to disk and close any open rending windows.""" + if not self.enabled: + return + self.stats_recorder.close() + if self.video_recorder is not None: + self._close_video_recorder() + self._flush(force=True) + + # Stop tracking this for autoclose + monitor_closer.unregister(self._monitor_id) + self.enabled = False + + logger.info('''Finished writing results. You can upload them to the scoreboard via gym.upload(%r)''', self.directory) + + def _set_mode(self, mode): + if mode == 'evaluation': + type = 'e' + elif mode == 'training': + type = 't' + else: + raise error.Error('Invalid mode {}: must be "training" or "evaluation"', mode) + self.stats_recorder.type = type + + def _before_step(self, action): + if not self.enabled: return + self.stats_recorder.before_step(action) + + def _after_step(self, observation, reward, done, info): + if not self.enabled: return done + + if done and self.env_semantics_autoreset: + # For envs with BlockingReset wrapping VNCEnv, this observation will be the first one of the new episode + self.reset_video_recorder() + self.episode_id += 1 + self._flush() + + # Record stats + self.stats_recorder.after_step(observation, reward, done, info) + # Record video + self.video_recorder.capture_frame() + + return done + + def _before_reset(self): + if not self.enabled: return + self.stats_recorder.before_reset() + + def _after_reset(self, observation): + if not self.enabled: return + + # Reset the stat count + self.stats_recorder.after_reset(observation) + + self.reset_video_recorder() + + # Bump *after* all reset activity has finished + self.episode_id += 1 + + self._flush() + + def reset_video_recorder(self): + # Close any existing video recorder + if self.video_recorder: + self._close_video_recorder() + + # Start recording the next video. + # + # TODO: calculate a more correct 'episode_id' upon merge + self.video_recorder = video_recorder.VideoRecorder( + env=self.env, + base_path=os.path.join(self.directory, '{}.video.{}.video{:06}'.format(self.file_prefix, self.file_infix, self.episode_id)), + metadata={'episode_id': self.episode_id}, + enabled=self._video_enabled(), + ) + self.video_recorder.capture_frame() + + def _close_video_recorder(self): + self.video_recorder.close() + if self.video_recorder.functional: + self.videos.append((self.video_recorder.path, self.video_recorder.metadata_path)) + + def _video_enabled(self): + return self.video_callable(self.episode_id) + + def _env_info(self): + env_info = { + 'gym_version': version.VERSION, + } + if self.env.spec: + env_info['env_id'] = self.env.spec.id + return env_info + + def __del__(self): + # Make sure we've closed up shop when garbage collecting + self.close() + + def get_total_steps(self): + return self.stats_recorder.total_steps + + def get_episode_rewards(self): + return self.stats_recorder.episode_rewards + + def get_episode_lengths(self): + return self.stats_recorder.episode_lengths + +def detect_training_manifests(training_dir, files=None): + if files is None: + files = os.listdir(training_dir) + return [os.path.join(training_dir, f) for f in files if f.startswith(MANIFEST_PREFIX + '.')] + +def detect_monitor_files(training_dir): + return [os.path.join(training_dir, f) for f in os.listdir(training_dir) if f.startswith(FILE_PREFIX + '.')] + +def clear_monitor_files(training_dir): + files = detect_monitor_files(training_dir) + if len(files) == 0: + return + + logger.info('Clearing %d monitor files from previous run (because force=True was provided)', len(files)) + for file in files: + os.unlink(file) + +def capped_cubic_video_schedule(episode_id): + if episode_id < 1000: + return int(round(episode_id ** (1. / 3))) ** 3 == episode_id + else: + return episode_id % 1000 == 0 + +def disable_videos(episode_id): + return False + +monitor_closer = closer.Closer() + +# This method gets used for a sanity check in scoreboard/api.py. It's +# not intended for use outside of the gym codebase. +def _open_monitors(): + return list(monitor_closer.closeables.values()) + +def load_env_info_from_manifests(manifests, training_dir): + env_infos = [] + for manifest in manifests: + with open(manifest) as f: + contents = json.load(f) + env_infos.append(contents['env_info']) + + env_info = collapse_env_infos(env_infos, training_dir) + return env_info + +def load_results(training_dir): + if not os.path.exists(training_dir): + logger.error('Training directory %s not found', training_dir) + return + + manifests = detect_training_manifests(training_dir) + if not manifests: + logger.error('No manifests found in training directory %s', training_dir) + return + + logger.debug('Uploading data from manifest %s', ', '.join(manifests)) + + # Load up stats + video files + stats_files = [] + videos = [] + env_infos = [] + + for manifest in manifests: + with open(manifest) as f: + contents = json.load(f) + # Make these paths absolute again + stats_files.append(os.path.join(training_dir, contents['stats'])) + videos += [(os.path.join(training_dir, v), os.path.join(training_dir, m)) + for v, m in contents['videos']] + env_infos.append(contents['env_info']) + + env_info = collapse_env_infos(env_infos, training_dir) + data_sources, initial_reset_timestamps, timestamps, episode_lengths, episode_rewards, episode_types, initial_reset_timestamp = merge_stats_files(stats_files) + + return { + 'manifests': manifests, + 'env_info': env_info, + 'data_sources': data_sources, + 'timestamps': timestamps, + 'episode_lengths': episode_lengths, + 'episode_rewards': episode_rewards, + 'episode_types': episode_types, + 'initial_reset_timestamps': initial_reset_timestamps, + 'initial_reset_timestamp': initial_reset_timestamp, + 'videos': videos, + } + +def merge_stats_files(stats_files): + timestamps = [] + episode_lengths = [] + episode_rewards = [] + episode_types = [] + initial_reset_timestamps = [] + data_sources = [] + + for i, path in enumerate(stats_files): + with open(path) as f: + content = json.load(f) + if len(content['timestamps'])==0: continue # so empty file doesn't mess up results, due to null initial_reset_timestamp + data_sources += [i] * len(content['timestamps']) + timestamps += content['timestamps'] + episode_lengths += content['episode_lengths'] + episode_rewards += content['episode_rewards'] + # Recent addition + episode_types += content.get('episode_types', []) + # Keep track of where each episode came from. + initial_reset_timestamps.append(content['initial_reset_timestamp']) + + idxs = np.argsort(timestamps) + timestamps = np.array(timestamps)[idxs].tolist() + episode_lengths = np.array(episode_lengths)[idxs].tolist() + episode_rewards = np.array(episode_rewards)[idxs].tolist() + data_sources = np.array(data_sources)[idxs].tolist() + + if episode_types: + episode_types = np.array(episode_types)[idxs].tolist() + else: + episode_types = None + + if len(initial_reset_timestamps) > 0: + initial_reset_timestamp = min(initial_reset_timestamps) + else: + initial_reset_timestamp = 0 + + return data_sources, initial_reset_timestamps, timestamps, episode_lengths, episode_rewards, episode_types, initial_reset_timestamp + +# TODO training_dir isn't used except for error messages, clean up the layering +def collapse_env_infos(env_infos, training_dir): + assert len(env_infos) > 0 + + first = env_infos[0] + for other in env_infos[1:]: + if first != other: + raise error.Error('Found two unequal env_infos: {} and {}. This usually indicates that your training directory {} has commingled results from multiple runs.'.format(first, other, training_dir)) + + for key in ['env_id', 'gym_version']: + if key not in first: + raise error.Error("env_info {} from training directory {} is missing expected key {}. This is unexpected and likely indicates a bug in gym.".format(first, training_dir, key)) + return first \ No newline at end of file diff --git a/src/gym/wrappers/monitoring/__init__.py b/src/gym/wrappers/monitoring/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/gym/wrappers/monitoring/__pycache__/__init__.cpython-37.pyc b/src/gym/wrappers/monitoring/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..286a5e7ae652b77ffac4a7e00d1f527d5acde345 GIT binary patch literal 155 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

1!9Ltqy(>^ zNi&uK*1Ll27vPu^e~6s85cD_GL)p00Y&*@JM&eM!+577^@4d4w$tVAos12bNJZmMO zV349C!iV`r=ci_P6bYyBnCvdk@^A1$vrI6V$R9_9)kVaD$#D~fBm(kt{Cfk+8S-*+ z?na09bYL%vd|H-iEfAg%ofD^VYL-V?U<1**un-o-8Mq{$^2s04@hpeM?OCz-B_Yq8 zw{SE^oc)qeX^!29b2Y52hm$Ki45Iuh{%@iK(eE(xj7U>tG9g`RXs<{K>!yY>fYymBhpZ<1v8 z5@e6wKBgPXIqmQyvKJfMKHA9vEbR~uhef#$af>r=@jreTZ{2z8mi!4N`?!6JZ0sSc zNU~w!h1>>>uL7i`1UWJAge##hKw_TIqWLMAVO1PQh&0q6tHj^qBk?%5wGh#v7Cg;h z`CI%;b(_41JWSDDE}>DdEJ;f}P<6Y2R*ERm<`O!WC_rrJ02jx^!!q)50Gzy&Y1+xi zzd);V+oy)}V4J58!R&D`K?k;@w1p%sjVVRHcaj%sE%ON?Tu-l8^#q^DlI_9QmIIRM zHY?HHUu(O_ZcK%AES!SE*0kI$KFcI;cVz9V(Y<4B@qZhnj`25aVIPNIFIvmrFnKmU9MC$*QV->+V*oRM#0OJdFI#kq7EaW0*~G4E8~LrM7qx)HR-8NuFahI^9% zr4#9jOKfpISM*=xl~Bvh0<_+J;UB)0Wk63ThJ zCoXdYl{X?%fjryqc@z%-3#&%Brpb>Jxw%SjfRA^_>^V;zT6#~l@7 zahJw$jaehSt{zi8K8`qnv93@r6N*aOeT2K7#8`j8EJ*ea zENX_ZMgA6Uan28_bQ~Mcj*WShZ8-}^d}@-KT9r8CAt=8uKc^u=KkqH#DeA^bGJBTF>q+Oc^p33 0: + raise error.Error("Tried to reset environment which is not done. While the monitor is active for {}, you cannot call reset() unless the episode is over.".format(self.env_id)) + + self.done = False + if self.initial_reset_timestamp is None: + self.initial_reset_timestamp = time.time() + + def after_reset(self, observation): + self.steps = 0 + self.rewards = 0 + # We write the type at the beginning of the episode. If a user + # changes the type, it's more natural for it to apply next + # time the user calls reset(). + self.episode_types.append(self._type) + + def save_complete(self): + if self.steps is not None: + self.episode_lengths.append(self.steps) + self.episode_rewards.append(float(self.rewards)) + self.timestamps.append(time.time()) + + def close(self): + self.flush() + self.closed = True + + def flush(self): + if self.closed: + return + + with atomic_write.atomic_write(self.path) as f: + json.dump({ + 'initial_reset_timestamp': self.initial_reset_timestamp, + 'timestamps': self.timestamps, + 'episode_lengths': self.episode_lengths, + 'episode_rewards': self.episode_rewards, + 'episode_types': self.episode_types, + }, f, default=json_encode_np) diff --git a/src/gym/wrappers/monitoring/tests/__init__.py b/src/gym/wrappers/monitoring/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/gym/wrappers/monitoring/tests/helpers.py b/src/gym/wrappers/monitoring/tests/helpers.py new file mode 100644 index 0000000..4c57385 --- /dev/null +++ b/src/gym/wrappers/monitoring/tests/helpers.py @@ -0,0 +1,9 @@ +import contextlib +import shutil +import tempfile + +@contextlib.contextmanager +def tempdir(): + temp = tempfile.mkdtemp() + yield temp + shutil.rmtree(temp) diff --git a/src/gym/wrappers/monitoring/tests/test_video_recorder.py b/src/gym/wrappers/monitoring/tests/test_video_recorder.py new file mode 100644 index 0000000..5a4a11d --- /dev/null +++ b/src/gym/wrappers/monitoring/tests/test_video_recorder.py @@ -0,0 +1,65 @@ +import json +import os +import shutil +import tempfile +import numpy as np + +import gym +from gym.wrappers.monitoring.video_recorder import VideoRecorder + +class BrokenRecordableEnv(object): + metadata = {'render.modes': [None, 'rgb_array']} + + def render(self, mode=None): + pass + +class UnrecordableEnv(object): + metadata = {'render.modes': [None]} + + def render(self, mode=None): + pass + +def test_record_simple(): + env = gym.make("CartPole-v1") + rec = VideoRecorder(env) + env.reset() + rec.capture_frame() + rec.close() + assert not rec.empty + assert not rec.broken + assert os.path.exists(rec.path) + f = open(rec.path) + assert os.fstat(f.fileno()).st_size > 100 + +def test_no_frames(): + env = BrokenRecordableEnv() + rec = VideoRecorder(env) + rec.close() + assert rec.empty + assert rec.functional + assert not os.path.exists(rec.path) + +def test_record_unrecordable_method(): + env = UnrecordableEnv() + rec = VideoRecorder(env) + assert not rec.enabled + rec.close() + +def test_record_breaking_render_method(): + env = BrokenRecordableEnv() + rec = VideoRecorder(env) + rec.capture_frame() + rec.close() + assert rec.empty + assert rec.broken + assert not os.path.exists(rec.path) + +def test_text_envs(): + env = gym.make('FrozenLake-v0') + video = VideoRecorder(env) + try: + env.reset() + video.capture_frame() + video.close() + finally: + os.remove(video.path) diff --git a/src/gym/wrappers/monitoring/video_recorder.py b/src/gym/wrappers/monitoring/video_recorder.py new file mode 100644 index 0000000..280b366 --- /dev/null +++ b/src/gym/wrappers/monitoring/video_recorder.py @@ -0,0 +1,309 @@ +import json +import os +import subprocess +import tempfile +import os.path +import distutils.spawn, distutils.version +import numpy as np +from six import StringIO +import six +from gym import error, logger + +def touch(path): + open(path, 'a').close() + +class VideoRecorder(object): + """VideoRecorder renders a nice movie of a rollout, frame by frame. It + comes with an `enabled` option so you can still use the same code + on episodes where you don't want to record video. + + Note: + You are responsible for calling `close` on a created + VideoRecorder, or else you may leak an encoder process. + + Args: + env (Env): Environment to take video of. + path (Optional[str]): Path to the video file; will be randomly chosen if omitted. + base_path (Optional[str]): Alternatively, path to the video file without extension, which will be added. + metadata (Optional[dict]): Contents to save to the metadata file. + enabled (bool): Whether to actually record video, or just no-op (for convenience) + """ + + def __init__(self, env, path=None, metadata=None, enabled=True, base_path=None): + modes = env.metadata.get('render.modes', []) + self._async = env.metadata.get('semantics.async') + self.enabled = enabled + + # Don't bother setting anything else if not enabled + if not self.enabled: + return + + self.ansi_mode = False + if 'rgb_array' not in modes: + if 'ansi' in modes: + self.ansi_mode = True + else: + logger.info('Disabling video recorder because {} neither supports video mode "rgb_array" nor "ansi".'.format(env)) + # Whoops, turns out we shouldn't be enabled after all + self.enabled = False + return + + if path is not None and base_path is not None: + raise error.Error("You can pass at most one of `path` or `base_path`.") + + self.last_frame = None + self.env = env + + required_ext = '.json' if self.ansi_mode else '.mp4' + if path is None: + if base_path is not None: + # Base path given, append ext + path = base_path + required_ext + else: + # Otherwise, just generate a unique filename + with tempfile.NamedTemporaryFile(suffix=required_ext, delete=False) as f: + path = f.name + self.path = path + + path_base, actual_ext = os.path.splitext(self.path) + + if actual_ext != required_ext: + hint = " HINT: The environment is text-only, therefore we're recording its text output in a structured JSON format." if self.ansi_mode else '' + raise error.Error("Invalid path given: {} -- must have file extension {}.{}".format(self.path, required_ext, hint)) + # Touch the file in any case, so we know it's present. (This + # corrects for platform platform differences. Using ffmpeg on + # OS X, the file is precreated, but not on Linux. + touch(path) + + self.frames_per_sec = env.metadata.get('video.frames_per_second', 30) + self.encoder = None # lazily start the process + self.broken = False + + # Dump metadata + self.metadata = metadata or {} + self.metadata['content_type'] = 'video/vnd.openai.ansivid' if self.ansi_mode else 'video/mp4' + self.metadata_path = '{}.meta.json'.format(path_base) + self.write_metadata() + + logger.info('Starting new video recorder writing to %s', self.path) + self.empty = True + + @property + def functional(self): + return self.enabled and not self.broken + + def capture_frame(self): + """Render the given `env` and add the resulting frame to the video.""" + if not self.functional: return + logger.debug('Capturing video frame: path=%s', self.path) + + render_mode = 'ansi' if self.ansi_mode else 'rgb_array' + frame = self.env.render(mode=render_mode) + + if frame is None: + if self._async: + return + else: + # Indicates a bug in the environment: don't want to raise + # an error here. + logger.warn('Env returned None on render(). Disabling further rendering for video recorder by marking as disabled: path=%s metadata_path=%s', self.path, self.metadata_path) + self.broken = True + else: + self.last_frame = frame + if self.ansi_mode: + self._encode_ansi_frame(frame) + else: + self._encode_image_frame(frame) + + def close(self): + """Make sure to manually close, or else you'll leak the encoder process""" + if not self.enabled: + return + + if self.encoder: + logger.debug('Closing video encoder: path=%s', self.path) + self.encoder.close() + self.encoder = None + else: + # No frames captured. Set metadata, and remove the empty output file. + os.remove(self.path) + + if self.metadata is None: + self.metadata = {} + self.metadata['empty'] = True + + # If broken, get rid of the output file, otherwise we'd leak it. + if self.broken: + logger.info('Cleaning up paths for broken video recorder: path=%s metadata_path=%s', self.path, self.metadata_path) + + # Might have crashed before even starting the output file, don't try to remove in that case. + if os.path.exists(self.path): + os.remove(self.path) + + if self.metadata is None: + self.metadata = {} + self.metadata['broken'] = True + + self.write_metadata() + + def write_metadata(self): + with open(self.metadata_path, 'w') as f: + json.dump(self.metadata, f) + + def _encode_ansi_frame(self, frame): + if not self.encoder: + self.encoder = TextEncoder(self.path, self.frames_per_sec) + self.metadata['encoder_version'] = self.encoder.version_info + self.encoder.capture_frame(frame) + self.empty = False + + def _encode_image_frame(self, frame): + if not self.encoder: + self.encoder = ImageEncoder(self.path, frame.shape, self.frames_per_sec) + self.metadata['encoder_version'] = self.encoder.version_info + + try: + self.encoder.capture_frame(frame) + except error.InvalidFrame as e: + logger.warn('Tried to pass invalid video frame, marking as broken: %s', e) + self.broken = True + else: + self.empty = False + + +class TextEncoder(object): + """Store a moving picture made out of ANSI frames. Format adapted from + https://github.com/asciinema/asciinema/blob/master/doc/asciicast-v1.md""" + + def __init__(self, output_path, frames_per_sec): + self.output_path = output_path + self.frames_per_sec = frames_per_sec + self.frames = [] + + def capture_frame(self, frame): + string = None + if isinstance(frame, str): + string = frame + elif isinstance(frame, StringIO): + string = frame.getvalue() + else: + raise error.InvalidFrame('Wrong type {} for {}: text frame must be a string or StringIO'.format(type(frame), frame)) + + frame_bytes = string.encode('utf-8') + + if frame_bytes[-1:] != six.b('\n'): + raise error.InvalidFrame('Frame must end with a newline: """{}"""'.format(string)) + + if six.b('\r') in frame_bytes: + raise error.InvalidFrame('Frame contains carriage returns (only newlines are allowed: """{}"""'.format(string)) + + self.frames.append(frame_bytes) + + def close(self): + #frame_duration = float(1) / self.frames_per_sec + frame_duration = .5 + + # Turn frames into events: clear screen beforehand + # https://rosettacode.org/wiki/Terminal_control/Clear_the_screen#Python + # https://rosettacode.org/wiki/Terminal_control/Cursor_positioning#Python + clear_code = six.b("%c[2J\033[1;1H" % (27)) + # Decode the bytes as UTF-8 since JSON may only contain UTF-8 + events = [ (frame_duration, (clear_code+frame.replace(six.b('\n'),six.b('\r\n'))).decode('utf-8')) for frame in self.frames ] + + # Calculate frame size from the largest frames. + # Add some padding since we'll get cut off otherwise. + height = max([frame.count(six.b('\n')) for frame in self.frames]) + 1 + width = max([max([len(line) for line in frame.split(six.b('\n'))]) for frame in self.frames]) + 2 + + data = { + "version": 1, + "width": width, + "height": height, + "duration": len(self.frames)*frame_duration, + "command": "-", + "title": "gym VideoRecorder episode", + "env": {}, # could add some env metadata here + "stdout": events, + } + + with open(self.output_path, 'w') as f: + json.dump(data, f) + + @property + def version_info(self): + return {'backend':'TextEncoder','version':1} + +class ImageEncoder(object): + def __init__(self, output_path, frame_shape, frames_per_sec): + self.proc = None + self.output_path = output_path + # Frame shape should be lines-first, so w and h are swapped + h, w, pixfmt = frame_shape + if pixfmt != 3 and pixfmt != 4: + raise error.InvalidFrame("Your frame has shape {}, but we require (w,h,3) or (w,h,4), i.e. RGB values for a w-by-h image, with an optional alpha channl.".format(frame_shape)) + self.wh = (w,h) + self.includes_alpha = (pixfmt == 4) + self.frame_shape = frame_shape + self.frames_per_sec = frames_per_sec + + if distutils.spawn.find_executable('avconv') is not None: + self.backend = 'avconv' + elif distutils.spawn.find_executable('ffmpeg') is not None: + self.backend = 'ffmpeg' + else: + raise error.DependencyNotInstalled("""Found neither the ffmpeg nor avconv executables. On OS X, you can install ffmpeg via `brew install ffmpeg`. On most Ubuntu variants, `sudo apt-get install ffmpeg` should do it. On Ubuntu 14.04, however, you'll need to install avconv with `sudo apt-get install libav-tools`.""") + + self.start() + + @property + def version_info(self): + return { + 'backend':self.backend, + 'version':str(subprocess.check_output([self.backend, '-version'], + stderr=subprocess.STDOUT)), + 'cmdline':self.cmdline + } + + def start(self): + self.cmdline = (self.backend, + '-nostats', + '-loglevel', 'error', # suppress warnings + '-y', + '-r', '%d' % self.frames_per_sec, + + # input + '-f', 'rawvideo', + '-s:v', '{}x{}'.format(*self.wh), + '-pix_fmt',('rgb32' if self.includes_alpha else 'rgb24'), + '-i', '-', # this used to be /dev/stdin, which is not Windows-friendly + + # output + '-vcodec', 'libx264', + '-pix_fmt', 'yuv420p', + self.output_path + ) + + logger.debug('Starting ffmpeg with "%s"', ' '.join(self.cmdline)) + if hasattr(os,'setsid'): #setsid not present on Windows + self.proc = subprocess.Popen(self.cmdline, stdin=subprocess.PIPE, preexec_fn=os.setsid) + else: + self.proc = subprocess.Popen(self.cmdline, stdin=subprocess.PIPE) + + def capture_frame(self, frame): + if not isinstance(frame, (np.ndarray, np.generic)): + raise error.InvalidFrame('Wrong type {} for {} (must be np.ndarray or np.generic)'.format(type(frame), frame)) + if frame.shape != self.frame_shape: + raise error.InvalidFrame("Your frame has shape {}, but the VideoRecorder is configured for shape {}.".format(frame.shape, self.frame_shape)) + if frame.dtype != np.uint8: + raise error.InvalidFrame("Your frame has data type {}, but we require uint8 (i.e. RGB values from 0-255).".format(frame.dtype)) + + if distutils.version.LooseVersion(np.__version__) >= distutils.version.LooseVersion('1.9.0'): + self.proc.stdin.write(frame.tobytes()) + else: + self.proc.stdin.write(frame.tostring()) + + def close(self): + self.proc.stdin.close() + ret = self.proc.wait() + if ret != 0: + logger.error("VideoRecorder encoder exited with status {}".format(ret)) diff --git a/src/gym/wrappers/tests/__init__.py b/src/gym/wrappers/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/gym/wrappers/time_limit.py b/src/gym/wrappers/time_limit.py new file mode 100644 index 0000000..5784ca0 --- /dev/null +++ b/src/gym/wrappers/time_limit.py @@ -0,0 +1,44 @@ +import time +from gym import Wrapper, logger + +class TimeLimit(Wrapper): + def __init__(self, env, max_episode_seconds=None, max_episode_steps=None): + super(TimeLimit, self).__init__(env) + self._max_episode_seconds = max_episode_seconds + self._max_episode_steps = max_episode_steps + + self._elapsed_steps = 0 + self._episode_started_at = None + + @property + def _elapsed_seconds(self): + return time.time() - self._episode_started_at + + def _past_limit(self): + """Return true if we are past our limit""" + if self._max_episode_steps is not None and self._max_episode_steps <= self._elapsed_steps: + logger.debug("Env has passed the step limit defined by TimeLimit.") + return True + + if self._max_episode_seconds is not None and self._max_episode_seconds <= self._elapsed_seconds: + logger.debug("Env has passed the seconds limit defined by TimeLimit.") + return True + + return False + + def step(self, action): + assert self._episode_started_at is not None, "Cannot call env.step() before calling reset()" + observation, reward, done, info = self.env.step(action) + self._elapsed_steps += 1 + + if self._past_limit(): + if self.metadata.get('semantics.autoreset'): + _ = self.reset() # automatically reset the env + done = True + + return observation, reward, done, info + + def reset(self): + self._episode_started_at = time.time() + self._elapsed_steps = 0 + return self.env.reset() diff --git a/src/main.py b/src/main.py new file mode 100644 index 0000000..54f53fe --- /dev/null +++ b/src/main.py @@ -0,0 +1,87 @@ +import asyncio +from dataclasses import dataclass +from enum import Enum, auto + +import numpy as np + + +async def handle_example_connection(reader, writer): + data = await reader.read(100) + message = data.decode() + addr = writer.get_extra_info('peername') + print(f"Received {message!r} from {addr!r}") + + print(f"Send: {message!r}") + writer.write(data) + await writer.drain() + + print("Close the client socket") + writer.close() + + + + + +async def handle_pilesos_connection(reader, writer): + writer.write( + b"""Hey, you. You're finally awake. You were trying to cross the border, right? Walked right into that Imperial ambush, same as us, and that thief over there.\n""") + writer.write(b'What is your name?\n') + await writer.drain() + + name = (await reader.readline()).decode().strip() + + writer.write(f'Hi {name}\n'.encode()) + writer.write(b"""Protocol is as follows:\n""") + writer.write(b"""- You get three bits of sensor data:\n""") + writer.write(b""" - Whether you bumped into something earlier\n""") + writer.write(b""" - Whether there is dirt at your position\n""") + writer.write(b""" - Whether you are home\n""") + writer.write(b"""- Each tick you can output a command (one letter):\n""") + writer.write(b""" - F -- go forward one cell\n""") + writer.write(b""" - R -- turn right by 90 degrees\n""") + writer.write(b""" - L -- turn left by 90 degrees\n""") + writer.write(b""" - S -- suck up dirt\n""") + writer.write(b""" - T -- turn off and finish\n""") + writer.write(b"""- After you finish, you will receive your score, and this connection will be closed.\n""") + await writer.drain() + + map_state = MapState(MAP) + + writer.write(f'{map_state.get_current_obs()}\n'.encode()) + await writer.drain() + + while True: + action = (await reader.readline()).decode().strip() + + try: + result = map_state.act(action) + except Exception as e: + writer.write(f'{e}\n'.encode()) + await writer.drain() + continue + + writer.write(f'{result}\n'.encode()) + await writer.drain() + + if action == 'T': + break + + writer.write(f'Your score is {map_state.score}\n'.encode()) + writer.write(f'Well done!\n'.encode()) + await writer.drain() + + writer.close() + + +async def run_server(): + server = await asyncio.start_server(handle_pilesos_connection, '0.0.0.0', 5555) + + addr = server.sockets[0].getsockname() + print(f'Serving on {addr}') + + async with server: + await server.serve_forever() + + +if __name__ == '__main__': + asyncio.run(run_server()) diff --git a/src/pilesos/__init__.py b/src/pilesos/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/pilesos/__pycache__/__init__.cpython-37.pyc b/src/pilesos/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..db29783f4333d023262bc58dca2c2be08fe2c149 GIT binary patch literal 139 zcmZ?b<>g`kf?szoM1$zZAOZ#$feZ&AE@lA|DGb33nv8xc8Hzx{2;!HCerR!OQL%nv zQcRA)o*N literal 0 HcmV?d00001 diff --git a/src/pilesos/__pycache__/mapstate.cpython-37.pyc b/src/pilesos/__pycache__/mapstate.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c5923d03c7f8cf9185314a267e176b65c48f8e45 GIT binary patch literal 3806 zcma)9&2JmW6`z^?;POKhDanbI8m(gYi)c%wZ5juy8(5YoTc}JK5^Xoz7F&w5l1Y(E zdUlo40)44`GGL&+HVR-L+drVE{t?Ncm$~-je<3K){@yG_ON@$i7xQM`%$wOa?|W~} z%;XrJFaG?+Z~i&M*uMxleOwG~qQ!p!kWBI}>v5m=gfBSZqHFbR-!@~b>-es;{fu;c zPr80qX8c^}cJiR}_J#B$17y+xbZES9hXt8^A^e%!Oy*?%8I$>tA6tGActOqppE39> z@S>arK6@;mYQw_I4U8+l`I-ZEde@Y&UQb-uf$3 z^C0~4{pI^{sN&`3u4*n1RKF9pl6ZO0?uKzcUXE33GVV18G4WX)Jki-b)$awZM@{uz zV$xWOWpjExel$P1Q*}aDujI5B1W~gW27%56L9Z_lyEHBY!Q;bbH(gOAPgNu^OQ1xc z44@12@ph{hCXf13U7~rqz!|VWDBXSu&G6)LH+_YfzgTe}fck3{M+)`A>_mOJvHIMV zR?_ZA=X6KjVRZLR45oDl+=2d_H~MolU)Ow7^KDhY2F=$ht|GPT%=*^$!o2PAX0A=xJgtMgmCu-;E#82w1+9yQ}&_pmnzrS@nn+bYqSb{stF_rjJ9#^|A5pcxg> z9NT2Z5^4cYZ+NB0u~#7H**#Kg=O2;1!;u zX#SibP^7y_gwFv^{qO=qa5^qb1EvtBBYQG(#%AJ<`waRF@=DeOTJqZ5372_UcxL-K zxnObz_w!*PoC%9CxY<2x5xL_;$g-RRO-ar}zL&Ijw>dD8S@THqp0*GHO&C&1JK7Hh z{aEK)hf0M}VvzDF0=q*Lg_!(&w;3ma3jfel^4zT_2I%3|2}}4fPfbp!DrU5Gcjewi za@83b?llj)$!|$yMv>yEbjoOTyhsr~Zkbh(k%T8P>F+>B{3UzEo{EHz#4#Da8A-l~ z#01Pr><;2n2M*D(_C(@J@q(NqGaM!!%^&kM_PfqgYbXtF8T`RhJITJx!Hpozk-f-X z;jB&u4rTAbk>89LS(5GK4}@yqI|W+b7s<@{8%5Be1+$VkDLrmHWRKS#qNad!th%Dq zh^R+GtCY1954!C{Tiq~H%a~FWd$foKzH<~RsK@Q^Qa)2Zrg=v-qy5k%f;56rZqZIt zspb=HwWCD+gwFUWf%gHBN{uT~DAi849fh&xZOuDp^kPyDIl}MJVhSb=m>jBTA_5!xCnERh!cyfeJ-=O} zA}6RlsBM27tgJRRw(6!{P^JnYf7H22NR5qezH#@|uBqxv3&vYCGDXW0jjj?fW==Jw zo*RFQN~qdeuy%i^k=8XP7JOs8y1r50*tvuC`c@-YX#{t+?$&hfL9=@p)|Be2ik*7P zDjf+^rs(c_Q8+YtVA^9WTy+S_m|UB28{wfOZtyE835sHlBUqp>^1`IQiZ##7T%}$d z6($~qqv{pDUMWxIX!Q|}RzD)}a{xaRNfX!7dhG*DX)8`tnzN0Fs8my=5|feD4{1cj z!5QvNS~n4nQqny%6XDWio)dT}rHg`HEax&NZB^#**MmPTMXASBlD>;SCS*(VDc`}` z;E7>T{ftP~3EUyDLEx7J%vGpzN@J8^)PyYJ;v)96cO(6o_=wU&yaZ6<1>qHK1SGtG Q>2Cl^5UW%w%@vFP1u44-qW}N^ literal 0 HcmV?d00001 diff --git a/src/pilesos/__pycache__/pilesos.cpython-37.pyc b/src/pilesos/__pycache__/pilesos.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cde120d4e3e0d083e88886460d96f844b62f90d7 GIT binary patch literal 561 zcmYjNy-ou$3{EcBqoM^>VrO8xg&SBADjK~ zGVuyb*mo3a$zSZ)`TRKtYip~5Og(*EzSH^1$-)!`V{*GiV1$u{C}k?kAPuBA7A7$2 zMHn>?Qf0z(5%<2RPsD+b_H#F_D?d2BvVeCPCpp&^7E&-Kx0?hYQfWjQfPxTuM!u?+ zIZUID)vugQ3$V3~l^@jqjDFA{+-ZdS42_Qv+zhLnMYHiK$q&gb@94x_JkuZ&Dkrh@ z8l?_OO`1+vVln@V zfA6-N2Ok;8rv{kJ1_VMruK(_`-IXTsitlS(WhH3sSG6u{Gb=bAYJEG)imrmZjaSpk zA@ksnfpsmxfK&ch_I6xfw)rFu{b-@8%o^)52OSU7wmnNcEiIGz{%)sckN>e{9H}2< Cv4oKT literal 0 HcmV?d00001 diff --git a/src/pilesos/__pycache__/shirokii.cpython-37.pyc b/src/pilesos/__pycache__/shirokii.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ad5c9bf1364359399bbbbde7f14dc280d5a24a7f GIT binary patch literal 5087 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 I*DE{!19Dhb5&!@I literal 0 HcmV?d00001 diff --git a/src/pilesos/mapstate.py b/src/pilesos/mapstate.py new file mode 100644 index 0000000..3678f07 --- /dev/null +++ b/src/pilesos/mapstate.py @@ -0,0 +1,154 @@ +from enum import Enum, auto +from typing import Tuple + +import numpy as np + +# MAP = """ +# S.#.. +# ..#.. +# x..x. +# ..#.. +# ..#.. +# """ + +MAP = """ + Sxx.. + .##xx + ..xxx +""" + +REWARD_EVERY_ACTION = -1 +REWARD_SUCKED_DUST = 100 +REWARD_FINISHED_NOT_AT_HOME = -1000 + +directions = np.array([ + [0, 1], + [1, 0], + [0, -1], + [-1, 0], +], dtype=int) + + +class CellState(Enum): + EMPTY = auto() + WALL = auto() + STARTING = auto() + DIRT = auto() + + @staticmethod + def from_char(c): + return { + '.': CellState.EMPTY, + '#': CellState.WALL, + 'S': CellState.STARTING, + 'x': CellState.DIRT, + }[c] + + +class Action(Enum): + FORWARD = auto() + LEFT = auto() + RIGHT = auto() + SUCK = auto() + DIE = auto() + + @staticmethod + def from_char(c): + return { + 'F': Action.FORWARD, + 'L': Action.LEFT, + 'R': Action.RIGHT, + 'S': Action.SUCK, + 'D': Action.DIE, + }[c] + + +class Observation: + has_bumped: bool + has_dirt: bool + is_home: bool + + def __init__(self, has_bumped, has_dirt, is_home): + self.has_bumped = has_bumped + self.has_dirt = has_dirt + self.is_home = is_home + + def __repr__(self): + return f'{self.has_bumped:b}{self.has_dirt:b}{self.is_home:b}' + + +class MapState: + n: int + m: int + map: np.ndarray + + starting_pos: np.ndarray + + current_pos: np.ndarray + current_direction: int + + last_reward: int + + @staticmethod + def default(): + return MapState(MAP) + + def __init__(self, s: str): + lines = s.split() + + self.n = len(lines) + self.m = len(lines[0]) + + self.map = np.zeros((self.n, self.m), dtype=object) + + for i in range(self.n): + for j in range(self.m): + self.map[i, j] = CellState.from_char(lines[i][j]) + + if self.map[i, j] == CellState.STARTING: + self.starting_pos = np.array([i, j], dtype=int) + self.current_pos = self.starting_pos + self.current_direction = 0 + + def get_current_obs(self, has_bumped=False): + current_cell = self.map[self.current_pos[0], self.current_pos[1]] + + return Observation(has_bumped=has_bumped, + has_dirt=current_cell == CellState.DIRT, + is_home=current_cell == CellState.STARTING) + + def act(self, action: Action) -> Tuple[Observation, int, bool]: + reward = REWARD_EVERY_ACTION + + if action == Action.FORWARD: + next_pos = self.current_pos + directions[self.current_direction] + + if 0 <= next_pos[0] < self.n and 0 <= next_pos[1] < self.m and \ + self.map[next_pos[0], next_pos[1]] != CellState.WALL: + self.current_pos = next_pos + return self.get_current_obs(), reward, False + + return self.get_current_obs(has_bumped=True), reward, False + if action == Action.RIGHT: + self.current_direction += 1 + self.current_direction %= 4 + + return self.get_current_obs(), reward, False + elif action == Action.LEFT: + self.current_direction -= 1 + self.current_direction %= 4 + + return self.get_current_obs(), reward, False + elif action == Action.SUCK: + if self.map[self.current_pos[0], self.current_pos[1]] == CellState.DIRT: + self.map[self.current_pos[0], self.current_pos[1]] = CellState.EMPTY + reward += REWARD_SUCKED_DUST + + return self.get_current_obs(), reward, False + elif action == Action.DIE: + if self.map[self.current_pos[0], self.current_pos[1]] != CellState.STARTING: + reward += REWARD_FINISHED_NOT_AT_HOME + + return self.get_current_obs(), reward, True + else: + raise ValueError(f'Invalid action {action}') diff --git a/src/pilesos/pilesos.py b/src/pilesos/pilesos.py new file mode 100644 index 0000000..82575ca --- /dev/null +++ b/src/pilesos/pilesos.py @@ -0,0 +1,6 @@ +from pilesos.mapstate import Action, Observation + + +class Pilesos: + def decide(self, observation: Observation, prev_reward: int) -> Action: + raise NotImplementedError() diff --git a/src/pilesos/shirokii.py b/src/pilesos/shirokii.py new file mode 100644 index 0000000..57d4a90 --- /dev/null +++ b/src/pilesos/shirokii.py @@ -0,0 +1,239 @@ +import collections +from typing import Dict, Tuple + +import numpy as np +from enum import Enum, auto + +from pilesos.mapstate import Action, Observation +from pilesos.pilesos import Pilesos + +directions = np.array([ + [0, 1], + [1, 0], + [0, -1], + [-1, 0], +], dtype=int) + + +def add(pos, dir_i): + return tuple(np.array(pos, dtype=int) + directions[dir_i]) + + +def bfs_neighbours(pos, dir_i): + a = [ + (Action.FORWARD, add(pos, dir_i), dir_i), + (Action.LEFT, pos, (dir_i + 3) % 4), + (Action.RIGHT, pos, (dir_i + 1) % 4), + ] + # np.random.shuffle(a) + return a + + +class CellState(Enum): + HOME = auto() + UNKNOWN = auto() + EMPTY = auto() + WALL = auto() + + +class Shirokii(Pilesos): + map: Dict[Tuple[int, int], CellState] + + pos: Tuple[int, int] + dir_i: int + + prev_pos: Tuple[int, int] + prev_action: Action + + bfs_distances: Dict[Tuple[Tuple[int, int], int], int] + bfs_came_by: Dict[Tuple[Tuple[int, int], int], Action] + bfs_came_from: Dict[Tuple[Tuple[int, int], int], Tuple[Tuple[int, int], int]] + + def __init__(self): + self.pos = (0, 0) + self.dir_i = 0 + + self.map = { + self.pos: CellState.HOME, + } + for dir_i in [0, 1]: + self.map[add(self.pos, dir_i)] = CellState.UNKNOWN + + for i in range(0, 15): + self.map[(-1, i)] = CellState.WALL + self.map[(i, -1)] = CellState.WALL + + self.prev_action = None + + self.bfs_distances = None + self.bfs_came_by = None + self.bfs_came_from = None + + def print(self): + min_x, min_y = +1e9, +1e9 + max_x, max_y = -1e9, -1e9 + + for pos, cell_state in self.map.items(): + min_x = min(min_x, pos[0]) + min_y = min(min_y, pos[1]) + + max_x = max(max_x, pos[0]) + max_y = max(max_y, pos[1]) + + print('===============') + + for x in range(min_x, max_x + 1): + for y in range(min_y, max_y + 1): + cell_state = self.map.get((x, y)) + + c = ' ' + if cell_state == CellState.HOME: + c = 'H' + if cell_state == CellState.EMPTY: + c = '.' + if cell_state == CellState.WALL: + c = '#' + if cell_state == CellState.UNKNOWN: + c = '?' + + if (x, y) == self.pos: + if self.dir_i == 0: + c = '→' + if self.dir_i == 1: + c = '↓' + if self.dir_i == 2: + c = '←' + if self.dir_i == 3: + c = '↑' + + print(c, end='') + print() + + print('===============') + + def bfs(self): + q = collections.deque() + start_state = (tuple(self.pos), self.dir_i) + q.append(start_state) + + np.random.seed(0) + + self.bfs_distances = { + start_state: 0 + } + + self.bfs_came_by = { + start_state: None + } + + self.bfs_came_from = { + start_state: None + } + + while len(q) > 0: + state = q.popleft() + + pos, dir_i = state + + if self.map[pos] == CellState.UNKNOWN: + continue + + for action, new_pos, new_dir_i in bfs_neighbours(pos, dir_i): + new_state = new_pos, new_dir_i + + if new_state in self.bfs_distances: + continue + + if self.map[new_pos] == CellState.WALL: + continue + + self.bfs_distances[new_state] = self.bfs_distances[state] + 1 + self.bfs_came_by[new_state] = action + self.bfs_came_from[new_state] = state + + q.append(new_state) + + def how_to_go_to_state(self, state): + last_action = None + + while True: + pos, dir_i = state + if state == (self.pos, self.dir_i): + return last_action + + last_action = self.bfs_came_by[state] + state = self.bfs_came_from[state] + + def how_to_go_to_closest_state(self, desired_cell_state): + min_distance = 1e9 + min_state = None + max_dist2 = -1e9 + + for pos, cell_state in self.map.items(): + if cell_state != desired_cell_state: + continue + + cur_states = [(pos, dir_i) for dir_i in range(4)] + + cur_distances = [self.bfs_distances.get(state, 1e9) for state in cur_states] + + min_i = np.argmin(cur_distances) + cur_distance = cur_distances[min_i] + + cur_dist2 = pos[0] ** 2 + pos[1] ** 2 + + if cur_distance < min_distance: + min_distance = cur_distance + min_state = cur_states[min_i] + max_dist2 = cur_dist2 + elif cur_distance == min_distance and max_dist2 < cur_dist2: + min_distance = cur_distance + min_state = cur_states[min_i] + max_dist2 = cur_dist2 + + if min_state is None: + return None + + return self.how_to_go_to_state(min_state) + + def decide(self, observation: Observation, prev_reward: int) -> Action: + if self.prev_action == Action.FORWARD: + new_pos = add(self.pos, self.dir_i) + + if observation.has_bumped: + self.map[new_pos] = CellState.WALL + else: + if self.map[new_pos] == CellState.UNKNOWN: + self.map[new_pos] = CellState.EMPTY + + self.pos = new_pos + + for dir_i in range(4): + new_pos2 = add(self.pos, dir_i) + if new_pos2 not in self.map: + self.map[new_pos2] = CellState.UNKNOWN + + if self.prev_action == Action.LEFT: + self.dir_i = (self.dir_i + 3) % 4 + + if self.prev_action == Action.RIGHT: + self.dir_i = (self.dir_i + 1) % 4 + + if observation.has_dirt: + self.prev_action = Action.SUCK + return Action.SUCK + + self.bfs() + + action_to_unknown = self.how_to_go_to_closest_state(CellState.UNKNOWN) + if action_to_unknown is not None: + self.prev_action = action_to_unknown + return action_to_unknown + + action_to_home = self.how_to_go_to_closest_state(CellState.HOME) + if action_to_home is not None: + self.prev_action = action_to_home + return action_to_home + + self.prev_action = Action.DIE + return Action.DIE diff --git a/src/server/__init__.py b/src/server/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/server/server.py b/src/server/server.py new file mode 100644 index 0000000..ceac29d --- /dev/null +++ b/src/server/server.py @@ -0,0 +1 @@ +# def serve(socket) diff --git a/src/simulate.py b/src/simulate.py new file mode 100644 index 0000000..efb93ec --- /dev/null +++ b/src/simulate.py @@ -0,0 +1,50 @@ +from pilesos.mapstate import MapState +from pilesos.shirokii import Shirokii + +# MAP = """ +# S.x#x +# ##.#x +# xxx.x +# """ + +MAP = """ + S....... + .....x.. + ........ + ###..### + ......x. + ........ + .x#.x#x. + x.#..#.. +""" + + +def main(): + map_state = MapState(MAP) + pilesos = Shirokii() + + obs = map_state.get_current_obs() + reward = 0 + score = 0 + + while True: + action = pilesos.decide(obs, reward) + + pilesos.print() + print() + print(f'Observation = {obs}') + print(f'Reward = {reward}') + print(f'Score = {score}') + print(f'Action = {action}') + + obs, reward, has_finished = map_state.act(action) + score += reward + + if has_finished: + break + + print(score) + + +if __name__ == '__main__': + main() diff --git a/src/testenv.py b/src/testenv.py new file mode 100644 index 0000000..7115ea4 --- /dev/null +++ b/src/testenv.py @@ -0,0 +1,50 @@ +from pilesos.mapstate import MapState +from pilesos.shirokii import Shirokii + +# MAP = """ +# S.x#x +# ##.#x +# xxx.x +# """ + +MAP = """ + S.......... + ..#######.. + ..#.....#.. + ..#.#x#.#.. + ..#.###.#.. + ..#.....#.. + ..####.##.. + ..........x +""" + + +def main(): + map_state = MapState(MAP) + pilesos = Shirokii() + + obs = map_state.get_current_obs() + reward = 0 + score = 0 + + while True: + action = pilesos.decide(obs, reward) + + pilesos.print() + print() + print(f'Observation = {obs}') + print(f'Reward = {reward}') + print(f'Score = {score}') + print(f'Action = {action}') + + obs, reward, has_finished = map_state.act(action) + score += reward + + if has_finished: + break + + print(score) + + +if __name__ == '__main__': + main()

!~A|ciNG3tM7y$0kuNgt)!>WF7Yn(iO?t>US){4 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®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 z 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≈$#SrpU%a|F-!v?)G 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 gP@uk literal 0 HcmV?d00001 diff --git a/src/gym/envs/robotics/assets/stls/hand/knuckle.stl b/src/gym/envs/robotics/assets/stls/hand/knuckle.stl new file mode 100644 index 0000000000000000000000000000000000000000..4faedd75409416ac79c8481c067bddff06eac19c GIT binary patch literal 30184 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 LLaWrTqT>Gno7it= literal 0 HcmV?d00001 diff --git a/src/gym/envs/robotics/assets/stls/hand/lfmetacarpal.stl b/src/gym/envs/robotics/assets/stls/hand/lfmetacarpal.stl new file mode 100644 index 0000000000000000000000000000000000000000..535cf4dbca59590f813c6dcc8abbd10bc7810a3a GIT binary patch literal 75084 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 literal 0 HcmV?d00001 diff --git a/src/gym/envs/robotics/assets/stls/hand/palm.stl b/src/gym/envs/robotics/assets/stls/hand/palm.stl new file mode 100644 index 0000000000000000000000000000000000000000..65e47eb65dad73dee839c05a7b1b2c285541defb GIT binary patch literal 347784 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