Skip to content

Commit

Permalink
Update Gymnasium to v1.0.0 (#95)
Browse files Browse the repository at this point in the history
Co-authored-by: Florian Felten <[email protected]>
Co-authored-by: Mark Towers <[email protected]>
Co-authored-by: Florian Felten <[email protected]>
Co-authored-by: Lucas Alegre <[email protected]>
  • Loading branch information
5 people authored Oct 15, 2024
1 parent 4b2cfa2 commit 9e5e15e
Show file tree
Hide file tree
Showing 25 changed files with 731 additions and 628 deletions.
6 changes: 2 additions & 4 deletions .github/workflows/build-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,9 @@ jobs:
- uses: actions/setup-python@v5

- name: Install dependencies
run: python -m pip install --upgrade pip setuptools build

run: pipx install build
- name: Build sdist and wheels
run: python -m build

run: pyproject-build
- name: Store wheels
uses: actions/upload-artifact@v4
with:
Expand Down
10 changes: 4 additions & 6 deletions .github/workflows/pre-commit.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,7 @@ jobs:
pre-commit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
- run: python -m pip install pre-commit
- run: python -m pre_commit --version
- run: python -m pre_commit install
- run: python -m pre_commit run --all-files
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- run: pipx install pre-commit
- run: pre-commit run --all-files
12 changes: 6 additions & 6 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
# See https://pre-commit.com/hooks.html for more hooks
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.4.0
rev: v5.0.0
hooks:
- id: check-symlinks
- id: destroyed-symlinks
Expand All @@ -17,13 +17,13 @@ repos:
- id: detect-private-key
- id: debug-statements
- repo: https://github.com/codespell-project/codespell
rev: v2.2.4
rev: v2.3.0
hooks:
- id: codespell
args:
- --ignore-words-list=reacher, mor
- repo: https://github.com/PyCQA/flake8
rev: 6.0.0
rev: 7.1.1
hooks:
- id: flake8
args:
Expand All @@ -34,16 +34,16 @@ repos:
- --show-source
- --statistics
- repo: https://github.com/asottile/pyupgrade
rev: v3.3.1
rev: v3.18.0
hooks:
- id: pyupgrade
args: ["--py37-plus"]
- repo: https://github.com/PyCQA/isort
rev: 5.12.0
rev: 5.13.2
hooks:
- id: isort
- repo: https://github.com/python/black
rev: 23.1.0
rev: 24.10.0
hooks:
- id: black
- repo: https://github.com/pycqa/pydocstyle
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ obs, info = env.reset()
next_obs, vector_reward, terminated, truncated, info = env.step(your_agent.act(obs))

# Optionally, you can scalarize the reward function with the LinearReward wrapper
env = mo_gym.LinearReward(env, weight=np.array([0.8, 0.2, 0.2]))
env = mo_gym.wrappers.LinearReward(env, weight=np.array([0.8, 0.2, 0.2]))
```
For details on multi-objective MDP's (MOMDP's) and other MORL definitions, see [A practical guide to multi-objective reinforcement learning and planning](https://link.springer.com/article/10.1007/s10458-022-09552-y).

Expand Down
1 change: 1 addition & 0 deletions docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ lastpage:
introduction/install
introduction/api
wrappers/wrappers
wrappers/vector_wrappers
examples/morl_baselines
```

Expand Down
20 changes: 20 additions & 0 deletions docs/wrappers/vector_wrappers.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
---
title: "Vector Wrappers"
---

# Vector Wrappers

Similar to the normal wrappers, MO-Gymnasium provides a few wrappers that are specifically designed to work with vectorized environments. They are all available directly from the `mo_gymnasium.wrappers.vector` module.


## `MOSyncVectorEnv`

```{eval-rst}
.. autoclass:: mo_gymnasium.wrappers.vector.MOSyncVectorEnv
```

## `MORecordEpisodeStatistics`

```{eval-rst}
.. autoclass:: mo_gymnasium.wrappers.vector.MORecordEpisodeStatistics
```
16 changes: 8 additions & 8 deletions docs/wrappers/wrappers.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,36 +4,36 @@ title: "Wrappers"

# Wrappers

A few wrappers inspired from Gymnasium's wrappers are available in MO-Gymnasium. They are all available directly from the `mo_gymnasium` module.
A few wrappers inspired from Gymnasium's wrappers are available in MO-Gymnasium. They are all available directly from the `mo_gymnasium.wrappers` module.


## `LinearReward`


```{eval-rst}
.. autoclass:: mo_gymnasium.LinearReward
.. autoclass:: mo_gymnasium.wrappers.LinearReward
```

## `MONormalizeReward`

```{eval-rst}
.. autoclass:: mo_gymnasium.MONormalizeReward
.. autoclass:: mo_gymnasium.wrappers.MONormalizeReward
```

## `MOClipReward`

```{eval-rst}
.. autoclass:: mo_gymnasium.MOClipReward
.. autoclass:: mo_gymnasium.wrappers.MOClipReward
```

## `MOSyncVectorEnv`
## `MORecordEpisodeStatistics`

```{eval-rst}
.. autoclass:: mo_gymnasium.MOSyncVectorEnv
.. autoclass:: mo_gymnasium.wrappers.MORecordEpisodeStatistics
```

## `MORecordEpisodeStatistics`
## `MOMaxAndSkipObservation`

```{eval-rst}
.. autoclass:: mo_gymnasium.MORecordEpisodeStatistics
.. autoclass:: mo_gymnasium.wrappers.MOMaxAndSkipObservation
```
12 changes: 3 additions & 9 deletions mo_gymnasium/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,10 @@

# Envs
import mo_gymnasium.envs
from mo_gymnasium import wrappers

# Utils
from mo_gymnasium.utils import (
LinearReward,
MOClipReward,
MONormalizeReward,
MORecordEpisodeStatistics,
MOSyncVectorEnv,
make,
)
from mo_gymnasium.utils import make


__version__ = "1.1.0"
__version__ = "1.2.0"
1 change: 0 additions & 1 deletion mo_gymnasium/envs/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,5 @@
import mo_gymnasium.envs.minecart
import mo_gymnasium.envs.mountain_car
import mo_gymnasium.envs.mujoco
import mo_gymnasium.envs.reacher
import mo_gymnasium.envs.resource_gathering
import mo_gymnasium.envs.water_reservoir
4 changes: 2 additions & 2 deletions mo_gymnasium/envs/lunar_lander/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@


register(
id="mo-lunar-lander-v2",
id="mo-lunar-lander-v3",
entry_point="mo_gymnasium.envs.lunar_lander.lunar_lander:MOLunarLander",
max_episode_steps=1000,
)

register(
id="mo-lunar-lander-continuous-v2",
id="mo-lunar-lander-continuous-v3",
entry_point="mo_gymnasium.envs.lunar_lander.lunar_lander:MOLunarLander",
max_episode_steps=1000,
kwargs={"continuous": True},
Expand Down
1 change: 1 addition & 0 deletions mo_gymnasium/envs/mario/joypad_space.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
"""An environment wrapper to convert binary to discrete action space. This is a modified version of the original code from nes-py."""

from typing import List

import gymnasium as gym
Expand Down
8 changes: 5 additions & 3 deletions mo_gymnasium/envs/mario/mario.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
from gymnasium.utils import EzPickle, seeding

# from stable_baselines3.common.atari_wrappers import MaxAndSkipEnv
from gymnasium.wrappers import GrayScaleObservation, ResizeObservation
from nes_py.nes_env import SCREEN_SHAPE_24_BIT

import mo_gymnasium as mo_gym
Expand All @@ -16,7 +15,7 @@
from mo_gymnasium.envs.mario.joypad_space import JoypadSpace


class MOSuperMarioBros(SuperMarioBrosEnv, EzPickle):
class MOSuperMarioBros(SuperMarioBrosEnv, gym.Env, EzPickle):
"""
## Description
Multi-objective version of the SuperMarioBro environment.
Expand Down Expand Up @@ -202,11 +201,14 @@ def step(self, action):


if __name__ == "__main__":
from gymnasium.wrappers import ResizeObservation
from gymnasium.wrappers.transform_observation import GrayscaleObservation

env = MOSuperMarioBros()
env = JoypadSpace(env, SIMPLE_MOVEMENT)
# env = MaxAndSkipEnv(env, 4)
env = ResizeObservation(env, (84, 84))
env = GrayScaleObservation(env)
env = GrayscaleObservation(env)
# env = FrameStack(env, 4)
env = mo_gym.LinearReward(env)

Expand Down
8 changes: 5 additions & 3 deletions mo_gymnasium/envs/minecart/minecart.py
Original file line number Diff line number Diff line change
Expand Up @@ -249,9 +249,11 @@ def pareto_front(self, gamma: float, symmetric: bool = True) -> List[np.ndarray]
queue = [
{
"speed": ACCELERATION * self.frame_skip,
"dist": mine_distance - self.frame_skip * (self.frame_skip + 1) / 2 * ACCELERATION
if self.incremental_frame_skip
else mine_distance - ACCELERATION * self.frame_skip * self.frame_skip,
"dist": (
mine_distance - self.frame_skip * (self.frame_skip + 1) / 2 * ACCELERATION
if self.incremental_frame_skip
else mine_distance - ACCELERATION * self.frame_skip * self.frame_skip
),
"seq": [ACT_ACCEL],
}
]
Expand Down
2 changes: 1 addition & 1 deletion mo_gymnasium/envs/mujoco/reacher.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
class MOReacherEnv(ReacherEnv):
"""
## Description
Mujoco version of `mo-reacher-v0`, based on [`Reacher-v4` environment](https://gymnasium.farama.org/environments/mujoco/reacher/).
Multi-objective version of the [`Reacher-v4` environment](https://gymnasium.farama.org/environments/mujoco/reacher/).
## Observation Space
The observation is 6-dimensional and contains:
Expand Down
9 changes: 0 additions & 9 deletions mo_gymnasium/envs/reacher/__init__.py

This file was deleted.

Loading

0 comments on commit 9e5e15e

Please sign in to comment.