示例#1
0
    def test_mdp_serialization(self):
        # Where to store serialized states -- will be overwritten each timestep
        dummy_path = os.path.join(TESTING_DATA_DIR, 'test_mdp_serialization',
                                  'dummy.json')

        # Get starting seed and random agent pair
        seed = 47
        random_pair = AgentPair(RandomAgent(all_actions=True),
                                RandomAgent(all_actions=True))

        # Run rollouts with different seeds until sparse reward is achieved
        sparse_reward = 0
        while sparse_reward <= 0:
            np.random.seed(seed)
            state = self.base_mdp.get_standard_start_state()
            for _ in range(1500):
                # Ensure serialization and deserializations are inverses
                reconstructed_state = OvercookedState.from_dict(
                    load_from_json(save_as_json(state.to_dict(), dummy_path)))
                self.assertEqual(
                    state, reconstructed_state,
                    "\nState: \t\t\t{}\nReconstructed State: \t{}".format(
                        state, reconstructed_state))

                # Advance state
                joint_action, _ = zip(*random_pair.joint_action(state))
                state, infos = self.base_mdp.get_state_transition(
                    state, joint_action)
                sparse_reward += sum(infos['sparse_reward_by_agent'])
            seed += 1
示例#2
0
        def check_transition(action, expected_path, recompute=False):
            # Compute actual values
            state = env.state
            pred_state, _ = self.base_mdp.get_state_transition(state, action)
            new_state, sparse_reward, _, _ = env.step(action)
            self.assertEqual(pred_state, new_state,
                             '\n' + str(pred_state) + '\n' + str(new_state))

            # Recompute expected values if desired
            if recompute:
                actual = {
                    "state": pred_state.to_dict(),
                    "reward": sparse_reward
                }
                save_as_json(actual, expected_path)

            # Compute expected values
            expected = load_from_json(expected_path)
            expected_state = OvercookedState.from_dict(expected['state'])
            expected_reward = expected['reward']

            # Make sure everything lines up (note __eq__ is transitive)
            self.assertTrue(
                pred_state.time_independent_equal(expected_state),
                '\n' + str(pred_state) + '\n' + str(expected_state))
            self.assertEqual(sparse_reward, expected_reward)
示例#3
0
def load_dict_from_unknown_filetype(filepath):
    try:
        # json.load
        return load_from_json(filepath)
    except:
        # eval of str from file
        return load_dict_from_file(filepath)
示例#4
0
 def setUp(self):
     Recipe.configure({})
     trajectory_path = os.path.join(TESTING_DATA_DIR, "test_visualizations",
                                    "trajectory.json")
     events_path = os.path.join(TESTING_DATA_DIR, "test_visualizations",
                                "expected_extracted_events.json")
     self.trajectory1 = AgentEvaluator.load_traj_from_json(trajectory_path)
     self.extracted_events1 = load_from_json(events_path)
示例#5
0
    def test_start_positions(self):
        actual_start_state = self.base_mdp.get_standard_start_state()
        expected_state_path = os.path.join(TESTING_DATA_DIR, "test_start_positions", "expected.json")

        # NOTE: Uncomment the following line if expected start state deliberately changed
        # save_as_json(actual_start_state.to_dict(), expected_state_path)

        expected_start_state = OvercookedState.from_dict(load_from_json(expected_state_path))
        self.assertEqual(actual_start_state, expected_start_state, '\n' + str(actual_start_state) + '\n' + str(expected_start_state))
 def load_traj_from_json(filename):
     traj_dict = load_from_json(filename)
     traj_dict["ep_states"] = [[
         OvercookedState.from_dict(ob) for ob in curr_ep_obs
     ] for curr_ep_obs in traj_dict["ep_states"]]
     traj_dict["ep_actions"] = [[
         tuple(tuple(a) if type(a) is list else a for a in j_a)
         for j_a in ep_acts
     ] for ep_acts in traj_dict["ep_actions"]]
     return traj_dict
示例#7
0
 def test_default_hud_data_from_trajectories(self):
     traj_path = os.path.join(
         TESTING_DATA_DIR, 'test_state_visualizer', 'test_trajectory.json'
     )  # NOTE: for test purposes reward is added here despite there was no soup delivery in trajectory
     test_trajectory = AgentEvaluator.load_traj_from_json(traj_path)
     hud_data_path = os.path.join(
         TESTING_DATA_DIR, 'test_state_visualizer',
         'expected_default_hud_data_from_trajectories.json')
     expected_hud_data = load_from_json(hud_data_path)
     result_hud_data = StateVisualizer().default_hud_data_from_trajectories(
         test_trajectory)
     self.assertEqual(json.dumps(result_hud_data, sort_keys=True),
                      json.dumps(expected_hud_data, sort_keys=True))
示例#8
0
    def load_frames_rectangles(json_path):
        frames_json = load_from_json(json_path)

        if "textures" in frames_json.keys(): # check if its format of soups.json
            assert frames_json["textures"][0]["scale"] == 1 # not implemented support for scale here
            frames = frames_json["textures"][0]["frames"]

        else: # assume its format of objects.json, terrain.json and chefs.json
            frames = []
            for filename, frame_dict in frames_json["frames"].items():
                frame_dict["filename"] = filename
                frames.append(frame_dict)

        result = {}
        for frame_dict in frames:
            assert not frame_dict.get("rotated") # not implemented support yet
            assert not frame_dict.get("trimmed") # not implemented support yet
            frame_name = frame_dict["filename"].split(".")[0]
            frame = frame_dict["frame"]
            rect = pygame.Rect(frame["x"], frame["y"], frame["w"], frame["h"])
            result[frame_name] = rect
        return result
示例#9
0
def on_trajectory_selected(data):
    traj_idx = int(data["trajectory_idx"] or 0)
    trajectory_path = os.path.join(TRAJECTORIES_DIR, data["trajectory_file"])
    trajectories = AgentEvaluator.load_traj_from_json(trajectory_path)
    trajectories_json = load_from_json(trajectory_path)
    trajectory_states = trajectories_json["ep_states"][traj_idx]
    trajectory_rewards = trajectories_json["ep_rewards"][traj_idx]
    scores = cumulative_rewards_from_rew_list(trajectory_rewards)
    states = [{"state":state, "time_left": time_left, "score": score} for state, score, time_left in zip(trajectory_states, scores, reversed(range(len(trajectory_states))))]
    terrain = trajectories_json["mdp_params"][traj_idx]["terrain"]
    settings = copy.deepcopy(DEFAULT_EVENT_CHART_SETTINGS)
    settings["show_cumulative_data"] = False
    settings["chart_box_view_box"] = "0 0 800 150"

    start_info = {
        "terrain": terrain,
        "state": states[0]
    }
    socketio.emit("replay_trajectory", {"start_info": start_info,
                                        "states": states,
                                        "max_trajectory_idx": len(trajectories["ep_states"])-1,
                                        "trajectory_chart_events": extract_events(trajectories, traj_idx),
                                        "trajectory_chart_settings": settings})
示例#10
0
 def test_temporary_orders_display(self):
     for d in load_from_json(
             os.path.join(
                 state_visualizer_dir,
                 "render_state_data_test_temporary_orders_display.json")):
         test_render_state_from_dict(d)
示例#11
0
 def test_generated_layout_states(self):
     for d in load_from_json(
             os.path.join(state_visualizer_dir,
                          "render_state_data_test_generated_layout.json")):
         test_render_state_from_dict(d)
示例#12
0
 def test_various_states(self):
     for d in load_from_json(
             os.path.join(state_visualizer_dir,
                          "render_state_data_test_various.json")):
         test_render_state_from_dict(d)
示例#13
0
 def test_cooking_timer_display(self):
     for d in load_from_json(
             os.path.join(state_visualizer_dir,
                          "render_state_data_test_cooking_display.json")):
         test_render_state_from_dict(d)
示例#14
0
 def load_traj_from_json(filename):
     AgentEvaluator._configure_recipe_if_needed()
     traj_dict = load_from_json(filename)
     return AgentEvaluator.load_traj_from_json_obj(traj_dict)