Beispiel #1
0
def test_cpuagent_deserializes_correctly():
    serialized_agent = {
        'states': [
            {
                'grid': [0, 0, 0, 0, 0, 0, 0, 0, 0],
                'next_states_values': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
                'next_states_transitions': [Action.top_left, Action.top_center, Action.top_right,
                                            Action.middle_left, Action.middle_center, Action.middle_right,
                                            Action.bottom_left, Action.bottom_center, Action.bottom_right]
            },
            {
                'grid': [1, 1, 1, 1, 1, 1, 1, 1, 0],
                'next_states_values': [0.0],
                'next_states_transitions': [Action.bottom_right]
            }
        ]
    }

    agent = CPUAgent()
    agent.deserialize(serialized_agent)

    assert_array_equal(agent.states[0].grid, np.array([0, 0, 0, 0, 0, 0, 0, 0, 0]))
    assert_array_equal(agent.states[1].grid, np.array([1, 1, 1, 1, 1, 1, 1, 1, 0]))

    assert_array_equal(agent.states[0].next_states_values, np.array([0, 0, 0, 0, 0, 0, 0, 0, 0]))
    assert_array_equal(agent.states[1].next_states_values, np.array([0]))

    assert_array_equal(agent.states[0].next_states_transitions, np.array([Action.top_left, Action.top_center,
                                                                          Action.top_right, Action.middle_left,
                                                                          Action.middle_center, Action.middle_right,
                                                                          Action.bottom_left, Action.bottom_center,
                                                                          Action.bottom_right]))
    assert_array_equal(agent.states[1].next_states_transitions, np.array([Action.bottom_right]))
Beispiel #2
0
def test_cpuagent_add_state_correctness(states, grid, expected_results):
    agent = CPUAgent()
    agent.states = states
    agent.add_state(State(grid))

    assert len(agent.states) == expected_results
    assert_array_equal(agent.states[len(agent.states) - 1].grid, grid)
Beispiel #3
0
def test_cpuagent_get_state_correctness():
    agent = CPUAgent()
    agent.states = [
        State(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0])),
        State(np.array([0, 0, 0, 0, 0, 0, 0, 0, 1])),
    ]

    result = agent.get_state(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0])).grid
    assert_array_equal(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0]), result)
Beispiel #4
0
def test_cpuagent_loads_correctly(tmpdir):
    root = Path(tmpdir)
    weights_path = root / "agent.json"

    agent = CPUAgent()
    weights_path.write_text('{"states": {}}')
    agent.load(weights_path)

    assert not agent.states
Beispiel #5
0
def test_cpuagent_generates_random_moves():
    agent = CPUAgent()
    new_grid = np.array([1, 2, 1, 2, 1, 2, 1, 0, 0])
    agent.update_grid(new_grid)

    generated_moves = set()
    for _ in range(10):
        generated_moves.add(agent.get_random_move())

    assert len(generated_moves) == 2
    assert Action.bottom_center in generated_moves
    assert Action.bottom_right in generated_moves
Beispiel #6
0
def test_cpuagent_update_state_correctness():
    agent = CPUAgent()
    agent.states = [
        State(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0])),
        State(np.array([1, 1, 1, 1, 1, 1, 1, 1, 0])),
    ]

    new_state = State(np.array([1, 1, 1, 1, 1, 1, 1, 1, 0]))
    new_state.next_states_values *= 2

    agent.update_state(new_state)

    assert_array_equal(agent.states[1].next_states_values, new_state.next_states_values)
Beispiel #7
0
def test_cpuagent_generates_best_move_correctly():
    agent = CPUAgent()
    new_grid = np.array([1, 2, 1, 2, 1, 2, 1, 0, 0])
    agent.update_grid(new_grid)

    agent.current_state.next_states_values = np.array([-1, 1])

    generated_moves = set()
    for _ in range(10):
        generated_moves.add(agent.get_best_move())

    assert len(generated_moves) == 1
    assert Action.bottom_center not in generated_moves
    assert Action.bottom_right in generated_moves
Beispiel #8
0
def test_cpuagent_updates_grid_correctly():
    agent = CPUAgent()
    new_grid = np.array([1, 2, 1, 2, 1, 2, 1, 0, 0])
    agent.update_grid(new_grid)

    assert_array_equal(new_grid, agent.grid)
    assert_array_equal(new_grid, agent.current_state.grid)

    assert_array_equal(agent.current_state.next_states_values, np.array([0, 0]))
    assert_array_equal(agent.current_state.next_states_transitions, np.array([Action.bottom_center,
                                                                              Action.bottom_right]))

    assert len(agent.states) == 1

    new_state = agent.states[0]
    assert_array_equal(new_grid, new_state.grid)
    assert_array_equal(new_state.next_states_values, np.array([0, 0]))
    assert_array_equal(new_state.next_states_transitions, np.array([Action.bottom_center, Action.bottom_right]))
Beispiel #9
0
def test_cpuagent_saves_correctly(tmpdir):
    root = Path(tmpdir)
    weights_path = root / "agent.json"

    CPUAgent().save(weights_path)

    assert weights_path.exists()
    serialized_agent = json.loads(weights_path.read_text())

    assert "states" in serialized_agent
    assert not serialized_agent["states"]
Beispiel #10
0
def test_cpuagent_serializes_correctly():
    agent = CPUAgent()
    agent.states = [
        State(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0])),
        State(np.array([1, 1, 1, 1, 1, 1, 1, 1, 0]))
    ]

    serialized_agent = agent.serialize()

    assert 'states' in serialized_agent
    assert len(serialized_agent["states"]) == 2

    assert_array_equal(serialized_agent["states"][0]["grid"], np.array([0, 0, 0, 0, 0, 0, 0, 0, 0]))
    assert_array_equal(serialized_agent["states"][1]["grid"], np.array([1, 1, 1, 1, 1, 1, 1, 1, 0]))

    assert_array_equal(serialized_agent["states"][0]["next_states_values"], np.array([0, 0, 0, 0, 0, 0, 0, 0, 0]))
    assert_array_equal(serialized_agent["states"][1]["next_states_values"], np.array([0]))

    assert_array_equal(serialized_agent["states"][0]["next_states_transitions"],
                       np.array([0, 1, 2, 3, 4, 5, 6, 7, 8]))
    assert_array_equal(serialized_agent["states"][1]["next_states_transitions"], np.array([8]))
Beispiel #11
0
def test_cpuagent_correct_initialization():
    agent = CPUAgent()

    assert agent.current_state is None
    assert agent.grid is None
    assert not agent.states
Beispiel #12
0
def test_cpuagent_get_state_raises_value_error_if_state_not_found():
    agent = CPUAgent()

    with pytest.raises(ValueError, match="could not be found in saved states"):
        agent.get_state(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0]))
Beispiel #13
0
def test_cpuagent_has_state_correctness(states, grid, expected_results):
    agent = CPUAgent()
    agent.states = states

    assert agent.has_state(State(grid)) == expected_results