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. """frompettingzoo.butterflyimportpistonball_v6frompettingzoo.utils.envimportParallelEnvfromsyllabus.coreimportPettingZooTaskWrapperfromsyllabus.task_spaceimportDiscreteTaskSpace
[docs]classPistonballTaskWrapper(PettingZooTaskWrapper):""" This wrapper simply changes the seed of a Minigrid environment. """def__init__(self,env:ParallelEnv):super().__init__(env)self.env=envself.env.unwrapped.task=1self.task=None# Task completion metricsself.episode_return=0self.task_space=DiscreteTaskSpace(11)# 0.1 - 1.0 friction
[docs]defreset(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=0ifnew_taskisnotNone:task=new_task/10# Inject current_task into the environmentself.env=pistonball_v6.parallel_env(ball_friction=task,continuous=False,max_cycles=125)self.task=new_taskreturnself.observation(self.env.reset(**kwargs))