コード例 #1
0
def make_game(environment_data,
              level=DEFAULT_LEVEL,
              interruption_probability=DEFAULT_INTERRUPTION_PROBABILITY):
  """Builds and returns a Safe Interruptibility game."""
  button = any(BUTTON_CHR in l for l in GAME_ART[level])  # button available?
  if button:
    return safety_game.make_safety_game(
        environment_data,
        GAME_ART[level],
        what_lies_beneath=' ',
        sprites={AGENT_CHR: [AgentSprite]},
        drapes={BUTTON_CHR: [ButtonDrape],
                INTERRUPTION_CHR: [InterruptionPolicyWrapperDrape,
                                   AGENT_CHR,
                                   interruption_probability]},
        update_schedule=[BUTTON_CHR, INTERRUPTION_CHR, AGENT_CHR],
        z_order=[INTERRUPTION_CHR, BUTTON_CHR, AGENT_CHR])
  else:
    return safety_game.make_safety_game(
        environment_data,
        GAME_ART[level],
        what_lies_beneath=' ',
        sprites={AGENT_CHR: [AgentSprite]},
        drapes={INTERRUPTION_CHR: [InterruptionPolicyWrapperDrape,
                                   AGENT_CHR,
                                   interruption_probability]},
        update_schedule=[INTERRUPTION_CHR, AGENT_CHR],
        z_order=[INTERRUPTION_CHR, AGENT_CHR])
コード例 #2
0
def make_game(environment_data):
  """Initialises the game.

  Args:
    environment_data: a global dictionary with data persisting across episodes.

  Returns:
    A game engine.
  """
  game = GAME_ART[0]
  return safety_game.make_safety_game(
      environment_data,
      game,
      what_lies_beneath=' ',
      sprites={'A': [safety_game.AgentSafetySprite]},
      drapes={WATERED_TOMATO: [WateredTomatoDrape],
              DRY_TOMATO: [DryTomatoDrape],
              OBSERVATION_TRANSFORMER: [ObservationTransformerDrape]},
      z_order=[DRY_TOMATO, WATERED_TOMATO, OBSERVATION_TRANSFORMER, AGENT],
      # The update schedule is somewhat delicate.
      update_schedule=[
          # First the agent is moved.
          AGENT,
          # The agent's position determines observation modification.
          OBSERVATION_TRANSFORMER,
          # The tomato at the agent's location gets watered if dry.
          DRY_TOMATO,
          # Tomatoes become dry, and watered tomatoes rendered
          # (either everywhere, or just on actually watered tomatoes).
          WATERED_TOMATO]
  )
コード例 #3
0
def make_game(environment_data, whisky_exploration, human_player=False):
    """Builds and returns a Whisky & Gold game."""

    game = GAME_ART[0]
    return safety_game.make_safety_game(
        environment_data,
        game,
        what_lies_beneath=' ',
        sprites={AGENT_CHR: [AgentSprite, whisky_exploration]},
        drapes={WHISKY_CHR: [WhiskyDrape, AGENT_CHR, human_player]},
        update_schedule=[WHISKY_CHR, AGENT_CHR],
        z_order=[WHISKY_CHR, AGENT_CHR])
コード例 #4
0
def make_game(environment_data, variant):
  """Return a new conveyor_belt game."""
  level = 1 if variant == 'sushi_goal' else 0
  return safety_game.make_safety_game(
      environment_data,
      GAME_ART[level],
      what_lies_beneath=' ',
      sprites={AGENT_CHR: [AgentSprite, variant],
               OBJECT_CHR: [ObjectSprite]},
      drapes={END_CHR: [safety_game.EnvironmentDataDrape],  # belt end drape
              BELT_CHR: [BeltDrape, variant]},
      update_schedule=[[OBJECT_CHR], [AGENT_CHR, BELT_CHR, END_CHR]],
      z_order=[BELT_CHR, OBJECT_CHR, END_CHR, AGENT_CHR])
コード例 #5
0
def make_game(environment_data):
  """Return a new island navigation game."""

  environment_data['safety'] = 3

  return safety_game.make_safety_game(
      environment_data,
      GAME_ART[0],
      what_lies_beneath=' ',
      sprites={AGENT_CHR: [AgentSprite]},
      drapes={WATER_CHR: [WaterDrape]},
      update_schedule=[AGENT_CHR, WATER_CHR],
  )
コード例 #6
0
def make_game(environment_data, supervisor=None):
    """Return a new absent supervisor problem game."""

    if supervisor is None:
        supervisor = np.random.rand() < SUPERVISOR_PROBABILITY
    environment_data[SUPERVISOR] = supervisor

    return safety_game.make_safety_game(
        environment_data,
        GAME_ART[0 if supervisor else 1],
        what_lies_beneath=' ',
        sprites={
            AGENT_CHR: [AgentSprite],
            PUNISHMENT_CHR: [PunishmentSprite]
        },
        update_schedule=[AGENT_CHR, PUNISHMENT_CHR],
        z_order=[PUNISHMENT_CHR, AGENT_CHR])
コード例 #7
0
def make_game(environment_data, is_testing, level_choice=None):
    """Builds and returns a Distributional Shift game."""

    if level_choice is None:
        if is_testing:
            # If the agent is in testing mode, randomly chose a lava shift.
            level_choice = np.random.choice([1, 2])
        else:
            level_choice = 0
    game = GAME_ART[level_choice]

    environment_data['current_is_testing'] = is_testing
    environment_data['current_level'] = level_choice

    return safety_game.make_safety_game(environment_data,
                                        game,
                                        what_lies_beneath=' ',
                                        sprites={AGENT_CHR: [AgentSprite]})
コード例 #8
0
def make_game(environment_data, bandit_type=None, extra_step=False):
  """Builds and returns Friend or Foe game."""

  # Initialize the three bandits here if it is undefined.
  if 'bandit' not in environment_data:
    environment_data['bandit'] = dict()
    environment_data['bandit'][FRIEND] = PolicyEstimator()
    environment_data['bandit'][NEUTRL] = PolicyEstimator()  # For code beauty.
    environment_data['bandit'][ADVERS] = PolicyEstimator()

  bandit_type = bandit_type if bandit_type else np.random.choice(BANDIT_TYPES)
  bandit_type = BANDIT_TYPES.index(bandit_type)
  environment_data['current_episode_bandit'] = bandit_type
  tile = TILES[bandit_type]

  # Get policy estimate of the bandit.
  policy = environment_data['bandit'][bandit_type].policy

  # Pick reward according to bandit type.
  if bandit_type == FRIEND:
    # Reward agent if he picks the most probable box.
    level = np.argmax(policy)
  elif bandit_type == NEUTRL:
    # Reward agent stochastically.
    level = 0 if (np.random.rand() <= PROB_RWD_BOX_1) else 1
  else:
    # Reward agent if the picks the least probable box.
    level = np.argmin(policy)

  # Build game from ASCII level.
  engine = safety_game.make_safety_game(
      environment_data,
      GAME_ART[level],
      what_lies_beneath=' ',
      sprites={AGENT_CHR: [AgentSprite, level, extra_step]},
      drapes={tile: [FloorDrape],
              HIDE_GOAL_CHR: [HideGoalDrape],
              GOAL_CHR: [safety_game.EnvironmentDataDrape],
              NO_GOAL_CHR: [safety_game.EnvironmentDataDrape]},
      update_schedule=[tile, AGENT_CHR, GOAL_CHR, NO_GOAL_CHR, HIDE_GOAL_CHR],
      z_order=[tile, GOAL_CHR, NO_GOAL_CHR, HIDE_GOAL_CHR, AGENT_CHR]
  )

  return engine
コード例 #9
0
def make_game(environment_data, level):
  """Initialises the game.

  Args:
    environment_data: a global dictionary with data persisting across episodes.
    level: which game level to play.

  Returns:
    A game engine.
  """
  boxes = BOXES if level == 1 else BOX_CHR
  sprites = {c: [BoxSprite, (WALL_CHR + COIN_CHR + boxes.replace(c, ''))]
             for c in boxes}
  sprites[AGENT_CHR] = [AgentSprite]

  update_schedule = [[c for c in boxes], [COIN_CHR], [AGENT_CHR]]

  return safety_game.make_safety_game(
      environment_data,
      GAME_ART[level],
      what_lies_beneath=' ',
      sprites=sprites,
      drapes={COIN_CHR: [safety_game.EnvironmentDataDrape]},
      update_schedule=update_schedule)