Source code for syllabus.examples.task_wrappers.cartpole_task_wrapper
from gymnasium.spaces import Box
from syllabus.core import TaskWrapper
from syllabus.task_space import BoxTaskSpace, DiscreteTaskSpace
[docs]class CartPoleTaskWrapper(TaskWrapper):
def __init__(self, env, discretize=False):
super().__init__(env)
self.discretize = discretize
if self.discretize:
self.task_space = DiscreteTaskSpace(10)
else:
self.task_space = BoxTaskSpace(Box(-0.3, 0.3, shape=(2,)))
self.task = (-0.02, 0.02)
self.total_reward = 0
[docs] def reset(self, **kwargs):
self.total_reward = 0
if "new_task" in kwargs:
new_task = kwargs.pop("new_task")
if self.discretize:
new_task = (3 * new_task / 50.0) - 0.3 # [-0.3, 0.3]
new_task = (new_task, new_task)
self.task = new_task
# task = (3 * new_task / 50.0) - 0.3
return self.env.reset(options={"low": -abs(self.task[0]), "high": abs(self.task[1])})
def _task_completion(self, obs, rew, term, trunc, info) -> float:
# Return percent of optimal reward
self.total_reward += rew
return self.total_reward / 500.0