Esempio n. 1
0
    def test_update_state_return_new_state(self):
        # Given
        state = State([])

        # When
        new_state = state.update_function(None)

        # Assert
        assert isinstance(new_state, State)
        assert new_state is not state
Esempio n. 2
0
    def test_state_method_update_should_return_new_state(self):
        # Given
        update = lambda x, n: (e + n for e in x)
        state = State([0, 1], update_function=update)

        # When
        new_state = state.update(1)

        # Assert
        assert new_state is not state
        assert new_state.to_list() == [1, 2]
Esempio n. 3
0
    def test_states_are_iterable(self):
        # Given
        state1 = State([1, 2, 3])
        state2 = State([0, 1])
        my_list = []

        # When
        a, b, c = state1
        for element in state2:
            my_list.append(element)

        # Assert
        assert a == 1
        assert b == 2
        assert c == 3
        assert my_list == [0, 1]
Esempio n. 4
0
    def test_run_full_train_experiment(self):
        # Given
        state = State([0, 20]).update_function(update_state)
        agent = Agent(state, RandomQFunction(), state_to_actions)
        experiment = Experiment(agent)

        # When
        experiment.run()

        # Assert
        assert experiment.agent.state[1] == 0
Esempio n. 5
0
    def test_update_should_call_update_function(self):
        # Given
        mock_function = MagicMock()
        state = State([], update_function=mock_function)
        agent = Agent(state=state)

        # When
        action = "Do nothing"
        agent.update_state(action=action)

        # Assert
        mock_function.assert_called_once_with([], "Do nothing")
Esempio n. 6
0
    def test_run_full_train_experiment_with_record(self):
        # Given
        state = State([0, 20]).update_function(update_state)
        agent = Agent(state, RandomQFunction(), state_to_actions)
        recorder = Recorder()
        experiment = Experiment(agent)

        # When
        experiment.run(recorder=recorder)

        # Assert
        assert len(list(recorder.all_transitions)) > 0
Esempio n. 7
0
    def test_state_should_cast_to_list(self):
        # Given
        state1 = State([1, 2, 3])
        state2 = State([])

        # Assert
        assert state1.to_list() == [1, 2, 3]
        assert state2.to_list() == []
Esempio n. 8
0
    def test_zero_q_function_should_return_vector(self):
        # Given
        q_function = ZeroQFunction()
        state = State([])
        two_actions = Actions("Do Nothing", "Do Something")
        three_actions = Actions("Do Nothing", "Do Something",
                                "Do Something else")

        # When
        two_q_values = q_function.evaluate(state, two_actions)
        three_q_values = q_function.evaluate(state, three_actions)

        # Check
        assert len(two_q_values) == 2
        assert len(three_q_values) == 3
Esempio n. 9
0
def state_and_actions_to_matrix(state: State, actions: Actions):
    return [state.to_list() + [action] for action in actions]
Esempio n. 10
0
def update_state(state, action):
    position, speed = state
    new_speed = max(speed - action, 0)
    new_position = position + speed
    return State((new_position, new_speed))