class_docstr: 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).
code: 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
      )
  
file_path: ray/python/ray/rllib/examples/env/simple_rpg.py
imports: import gymnasium
  from gymnasium.spaces import Discrete, Box, Dict
  from ray.rllib.utils.spaces.repeated import Repeated
label_desc: Use image node_id 1 to create a new SimpleRPG object from inherited base classes: gym with example: obj = SimpleRPG(config)