ray/rllib/env/apis/task_settable_env.py
2022-03-24 17:04:02 -07:00

50 lines
1.5 KiB
Python

import gym
from typing import List, Any
TaskType = Any # Can be different types depending on env, e.g., int or dict
class TaskSettableEnv(gym.Env):
"""
Extension of gym.Env to define a task-settable Env.
Your env must implement this interface in order to be used with MAML.
For curriculum learning, you can add this API to your env such that
the `env_task_fn` can set the next task as needed.
Supports:
- Sampling from a distribution of tasks for meta-learning.
- Setting the env to any task it supports.
- Getting the current task this env has been set to.
Examples:
>>> from ray.rllib.env.apis.task_settable_env import TaskSettableEnv
>>> env = TaskSettableEnv(...) # doctest: +SKIP
"""
def sample_tasks(self, n_tasks: int) -> List[TaskType]:
"""Samples task of the meta-environment
Args:
n_tasks (int) : number of different meta-tasks needed
Returns:
tasks (list) : an (n_tasks) length list of tasks
"""
raise NotImplementedError
def set_task(self, task: TaskType) -> None:
"""Sets the specified task to the current environment
Args:
task: task of the meta-learning environment
"""
raise NotImplementedError
def get_task(self) -> TaskType:
"""Gets the task that the agent is performing in the current environment
Returns:
task: task of the meta-learning environment
"""
raise NotImplementedError