Source code for syllabus.examples.task_wrappers.pistonball_task_wrapper

""" Task wrapper for NLE that can change tasks at reset using the NLE's task definition format. """
from pettingzoo.butterfly import pistonball_v6
from pettingzoo.utils.env import ParallelEnv

from syllabus.core import PettingZooTaskWrapper
from syllabus.task_space import DiscreteTaskSpace


[docs]class PistonballTaskWrapper(PettingZooTaskWrapper): """ This wrapper simply changes the seed of a Minigrid environment. """ def __init__(self, env: ParallelEnv): super().__init__(env) self.env = env self.env.unwrapped.task = 1 self.task = None # Task completion metrics self.episode_return = 0 self.task_space = DiscreteTaskSpace(11) # 0.1 - 1.0 friction
[docs] def reset(self, new_task: int = None, **kwargs): # Change task if new one is provided # if new_task is not None: # self.change_task(new_task) self.episode_return = 0 if new_task is not None: task = new_task / 10 # Inject current_task into the environment self.env = pistonball_v6.parallel_env( ball_friction=task, continuous=False, max_cycles=125 ) self.task = new_task return self.observation(self.env.reset(**kwargs))