Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update Gymnasium to v1.0.0 #95

Merged
merged 27 commits into from
Oct 15, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading