Using your own environments
To use a custom environment with academia package, a wrapper needs to be created to make the environment compatible with package’s environment API. This can be achieved by extending one of the classes provided by this module.
The most basic class for environments is
ScalableEnvironment, which defines the environment API used throughout
academia package. However there are also some generic wrappers which can
speed up the process of creating wrappers for custom environments.
If your environment is compliant with Gymnasium’s API, check out
GenericGymnasiumWrapper. It contains implementations for all methods
exposed by academia’s environment API. You only need to take care of a few
things:
Override the constructor and handle the
difficultysetting logic there;Provide an implementation for a protected
_transform_statemethod, which transforms a state returned by the underlying environment to a NumPy array, which is the format used in academia package.(Optional) Provide an implementation for a protected
_transform_statemethod to make sure that there are no unused states (seeacademia.environments.DoorKey’s source code for an example use case).
The two other generic wrappers, GenericMiniGridWrapper and
GenericAtariWrapper work similarly but have some extra functionalities
which can help to set up some more specific environments.
The former makes it easier to handle the difficulty parameter for
MiniGrid environments while the latter provides a default
_transform_state implementation for Gymnasium’s Atari environments.
Feel free to browse package’s source code to see how these base classes are used in practise.