ray/rllib/examples/env/simple_rpg.py

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

50 lines
1.5 KiB
Python
Raw Normal View History

import gym
from gym.spaces import Discrete, Box, Dict
from ray.rllib.utils.spaces.repeated import Repeated
# Constraints on the Repeated space.
MAX_PLAYERS = 4
MAX_ITEMS = 7
MAX_EFFECTS = 2
class SimpleRPG(gym.Env):
"""Example of a custom env with a complex, structured observation.
The observation is a list of players, each of which is a Dict of
attributes, and may further hold a list of items (categorical space).
Note that the env doesn't train, it's just a dummy example to show how to
use spaces.Repeated in a custom model (see CustomRPGModel below).
"""
def __init__(self, config):
self.cur_pos = 0
self.action_space = Discrete(4)
# Represents an item.
self.item_space = Discrete(5)
# Represents an effect on the player.
self.effect_space = Box(9000, 9999, shape=(4,))
# Represents a player.
self.player_space = Dict(
{
"location": Box(-100, 100, shape=(2,)),
"status": Box(-1, 1, shape=(10,)),
"items": Repeated(self.item_space, max_len=MAX_ITEMS),
"effects": Repeated(self.effect_space, max_len=MAX_EFFECTS),
}
)
# Observation is a list of players.
self.observation_space = Repeated(self.player_space, max_len=MAX_PLAYERS)
def reset(self):
return self.observation_space.sample()
def step(self, action):
return self.observation_space.sample(), 1, True, {}