def make_object_under_test(self, renderer):
     self.environment = environment.Environment(
         task=tasks.NoReward(),
         action_space=action_spaces.SelectMove(),
         renderers={'obs': renderer},
         init_sprites=lambda: [sprite.Sprite(c0=255)],
         max_episode_length=7)
 def make_object_under_test(self):
     """Environment creator used by test_utils.EnvironmentTestMixin."""
     env = environment.Environment(
         task=tasks.NoReward(),
         action_space=action_spaces.SelectMove(),
         renderers={},
         init_sprites=lambda: [sprite.Sprite(c0=255)],
         max_episode_length=7)
     return env
  def testMoveSprites(self):
    """Take a series of actions and repeatedly check sprite motions."""
    action_space = action_spaces.SelectMove(scale=0.5)
    sprites = [sprite.Sprite(x=0.55, y=0.5), sprite.Sprite(x=0.5, y=0.5)]

    # Move second (top) sprite
    action_space.step(
        np.array([0.52, 0.52, 0.5, 0.48]), sprites, keep_in_frame=False)
    self.assertTrue(np.allclose(sprites[0].position, [0.55, 0.5], atol=1e-5))
    self.assertTrue(np.allclose(sprites[1].position, [0.5, 0.49], atol=1e-5))

    # Move first (bottom) sprite
    action_space.step(
        np.array([0.58, 0.5, 0.9, 0.9]), sprites, keep_in_frame=False)
    self.assertTrue(np.allclose(sprites[0].position, [0.75, 0.7], atol=1e-5))
    self.assertTrue(np.allclose(sprites[1].position, [0.5, 0.49], atol=1e-5))

    # Move neither sprite
    action_space.step(
        np.array([0.58, 0.5, 0.9, 0.9]), sprites, keep_in_frame=False)
    self.assertTrue(np.allclose(sprites[0].position, [0.75, 0.7], atol=1e-5))
    self.assertTrue(np.allclose(sprites[1].position, [0.5, 0.49], atol=1e-5))

    # Move second (top) sprite
    action_space.step(
        np.array([0.5, 0.5, 0.2, 0.5]), sprites, keep_in_frame=False)
    self.assertTrue(np.allclose(sprites[0].position, [0.75, 0.7], atol=1e-5))
    self.assertTrue(np.allclose(sprites[1].position, [0.35, 0.49], atol=1e-5))

    # Move first (bottom) sprite
    action_space.step(
        np.array([0.78, 0.74, 0.9, 0.9]), sprites, keep_in_frame=False)
    self.assertTrue(np.allclose(sprites[0].position, [0.95, 0.9], atol=1e-5))
    self.assertTrue(np.allclose(sprites[1].position, [0.35, 0.49], atol=1e-5))

    # Move first (bottom) sprite
    action_space.step(
        np.array([0.92, 0.9, 0.9, 0.5]), sprites, keep_in_frame=True)
    self.assertTrue(np.allclose(sprites[0].position, [1., 0.9], atol=1e-5))
    self.assertTrue(np.allclose(sprites[1].position, [0.35, 0.49], atol=1e-5))

    # Move first (bottom) sprite
    action_space.step(
        np.array([0.98, 0.9, 0.7, 0.9]), sprites, keep_in_frame=False)
    self.assertTrue(np.allclose(sprites[0].position, [1.1, 1.1], atol=1e-5))
    self.assertTrue(np.allclose(sprites[1].position, [0.35, 0.49], atol=1e-5))
    def testTaskTermination(self):
        task = tasks.FindGoalPosition(goal_position=(0.5, 0.5))
        action_space = action_spaces.SelectMove()
        env_renderers = {}
        init_sprites = lambda: [sprite.Sprite(x=0.25, y=0.25, c0=255)]

        env = environment.Environment(task, action_space, env_renderers,
                                      init_sprites)
        donothing_action = np.array([0.25, 0.25, 0.5, 0.5])
        success_action = np.array([0.25, 0.25, 0.75, 0.75])

        timestep = env.step(donothing_action)
        self.assertTrue(timestep.first())

        timestep = env.step(donothing_action)
        self.assertTrue(timestep.mid())

        timestep = env.step(success_action)
        self.assertTrue(timestep.last())

        timestep = env.step(success_action)
        self.assertTrue(timestep.first())
 def testMotionCost(self, scale, action, motion_cost, true_cost):
   action_space = action_spaces.SelectMove(
       scale=scale, motion_cost=motion_cost)
   cost = action_space.step(action, sprites=[], keep_in_frame=False)
   self.assertAlmostEqual(cost, true_cost, delta=0.01)
 def testGetMotion(self, scale, action, true_motion):
   action_space = action_spaces.SelectMove(scale=scale)
   motion = action_space.get_motion(action)
   self.assertTrue(np.allclose(motion, true_motion, atol=1e-4))
 def testNoiseScale(self, action, noise_scale):
   action_space = action_spaces.SelectMove(scale=0.1, noise_scale=noise_scale)
   action_space.apply_noise_to_action(action)
Esempio n. 8
0
def action_space():
    return action_spaces.SelectMove(scale=0.25, noise_scale=0.05)
Esempio n. 9
0
def get_config(mode='train'):
    """Generate environment config.

  Args:
    mode: Unused task mode.

  Returns:
    config: Dictionary defining task/environment configuration. Can be fed as
      kwargs to environment.Environment.
  """

    # Factor distributions common to all objects.
    common_factors = distribs.Product([
        distribs.Continuous('x', 0.1, 0.9),
        distribs.Continuous('y', 0.1, 0.9),
        distribs.Continuous('angle', 0, 360, dtype='int32'),
    ])

    # train/test split for goal-finding object scales and clustering object colors
    goal_finding_scale_test = distribs.Continuous('scale', 0.08, 0.12)
    green_blue_colors = distribs.Product([
        distribs.Continuous('c1', 64, 256, dtype='int32'),
        distribs.Continuous('c2', 64, 256, dtype='int32'),
    ])
    if mode == 'train':
        goal_finding_scale = distribs.SetMinus(
            distribs.Continuous('scale', 0.05, 0.15),
            goal_finding_scale_test,
        )
        cluster_colors = distribs.Product([
            distribs.Continuous('c0', 128, 256, dtype='int32'),
            green_blue_colors
        ])
    elif mode == 'test':
        goal_finding_scale = goal_finding_scale_test
        cluster_colors = distribs.Product([
            distribs.Continuous('c0', 0, 128, dtype='int32'), green_blue_colors
        ])
    else:
        raise ValueError(
            'Invalid mode {}. Mode must be "train" or "test".'.format(mode))

    # Create clustering sprite generators
    sprite_gen_list = []
    cluster_shapes = [
        distribs.Discrete('shape', [s])
        for s in ['triangle', 'square', 'pentagon']
    ]
    for shape in cluster_shapes:
        factors = distribs.Product([
            common_factors,
            cluster_colors,
            shape,
            distribs.Continuous('scale', 0.08, 0.12),
        ])
        sprite_gen_list.append(
            sprite_generators.generate_sprites(factors, num_sprites=2))

    # Create goal-finding sprite generators
    goal_finding_colors = [
        distribs.Product([
            distribs.Continuous('c0', 192, 256, dtype='int32'),
            distribs.Continuous('c1', 0, 128, dtype='int32'),
            distribs.Continuous('c2', 64, 128, dtype='int32'),
        ]),
        distribs.Product([
            distribs.Continuous('c0', 0, 128, dtype='int32'),
            distribs.Continuous('c1', 192, 256, dtype='int32'),
            distribs.Continuous('c2', 64, 128, dtype='int32'),
        ])
    ]
    # Goal positions corresponding to the colors in goal_finding_colors
    goal_finding_positions = [(0., 0.5), (1., 0.5)]
    goal_finding_shapes = distribs.Discrete('shape', ['spoke_4', 'star_4'])
    for colors in goal_finding_colors:
        factors = distribs.Product([
            common_factors,
            goal_finding_scale,
            goal_finding_shapes,
            colors,
        ])
        sprite_gen_list.append(
            sprite_generators.generate_sprites(
                factors, num_sprites=lambda: np.random.randint(1, 3)))

    # Create distractor sprite generator
    distractor_factors = distribs.Product([
        common_factors,
        distribs.Discrete('shape', ['circle']),
        distribs.Continuous('c0', 64, 256, dtype='uint8'),
        distribs.Continuous('c1', 64, 256, dtype='uint8'),
        distribs.Continuous('c2', 64, 256, dtype='uint8'),
        distribs.Continuous('scale', 0.08, 0.12),
    ])
    sprite_gen_list.append(
        sprite_generators.generate_sprites(
            distractor_factors, num_sprites=lambda: np.random.randint(0, 3)))

    # Concat clusters into single scene to generate
    sprite_gen = sprite_generators.chain_generators(*sprite_gen_list)
    # Randomize sprite ordering to eliminate any task information from occlusions
    sprite_gen = sprite_generators.shuffle(sprite_gen)

    # Create the combined task of goal-finding and clustering
    task_list = []
    task_list.append(
        tasks.Clustering(cluster_shapes, terminate_bonus=0., reward_range=10.))
    for colors, goal_pos in zip(goal_finding_colors, goal_finding_positions):
        goal_finding_task = tasks.FindGoalPosition(distribs.Product(
            [colors, goal_finding_shapes]),
                                                   goal_position=goal_pos,
                                                   weights_dimensions=(1, 0),
                                                   terminate_distance=0.15,
                                                   raw_reward_multiplier=30)
        task_list.append(goal_finding_task)
    task = tasks.MetaAggregated(task_list,
                                reward_aggregator='sum',
                                termination_criterion='all')

    renderers = {
        'image':
        spriteworld_renderers.PILRenderer(image_size=(64, 64), anti_aliasing=5)
    }

    config = {
        'task': task,
        'action_space': action_spaces.SelectMove(scale=0.5),
        'renderers': renderers,
        'init_sprites': sprite_gen,
        'max_episode_length': 50,
        'metadata': {
            'name': os.path.basename(__file__),
            'mode': mode
        }
    }
    return config
Esempio n. 10
0
def action_space():
    return action_spaces.SelectMove(scale=0.25)
Esempio n. 11
0
def noisy_action_space(_noise_std, _prop_motion_noise, filter_distribs):
    return action_spaces.SelectMove(
        scale=0.5,
        noise_scale=_noise_std,
        proportional_motion_noise=_prop_motion_noise,
        filter_distribs=filter_distribs)