コード例 #1
0
def test_reverse_box():
    state = State(*list(level_reverse_box.values()))
    previous_states = state.prev_states()
    previous_states = {state.__str__() for state in previous_states}
    assert previous_states == {'#####\n# p #\n#  B#\n#  S#\n#####\n',
                               '#####\n#   #\n#p B#\n#  S#\n#####\n',
                               '#####\n#   #\n#pB #\n#  S#\n#####\n',
                               '#####\n#   #\n#  B#\n# pS#\n#####\n'}
コード例 #2
0
def test_reverse_box_on_storage():
    state = State(*list(level_reverse_box_on_storage.values()))
    previous_states = state.prev_states()
    previous_states = {state.__str__() for state in previous_states}
    assert previous_states == {'#####\n#   #\n#  $#\n# p #\n#####\n',
                               '#####\n#   #\n#p $#\n#   #\n#####\n',
                               '#####\n# p #\n#  $#\n#   #\n#####\n',
                               '#####\n#   #\n#pBS#\n#   #\n#####\n'}
コード例 #3
0
            if player not in boxes:
                out.append([player, boxes, storages, walls])
    return out


size = 8, 8
n_levels = 100
n_moves = 50
inner_height, inner_width = 8, 8
state_value_pairs = defaultdict(list)

for _ in range(n_levels):
    n_boxes = random.choice([1, 2])
    print("level: ", _, "boxes: ", n_boxes)
    levels = generate_end_states(inner_width, inner_height, n_boxes)
    states = [State(*[size[0], size[1]] + level) for level in levels]
    states_seen = {s.__str__() for s in states}
    state_value_pairs[0] = [state for state in states]
    for move in range(1, n_moves + 1):
        prev_states_list = []
        for state in states:
            prev_states_list.extend(state.prev_states())
        print(move, len(states), len(states_seen))
        states = set()
        for state in prev_states_list:
            if state.__str__() in states_seen:
                continue
            states.add(state)
            if state.filled_storages[0] == state.filled_storages[1]:
                state_value_pairs[0].append(state)
            else:
コード例 #4
0
def test_level_storage_box_mismatch():
    with pytest.raises(AssertionError):
        State(*list(level_storage_box_mismatch.values()))
コード例 #5
0
def test_level_player_on_wall_fails():
    with pytest.raises(AssertionError):
        State(*list(level_player_on_wall.values()))
コード例 #6
0
def test_level_ok_completes_level():
    state = State(*list(level_ok.values()))
    for move in level_ok_moves:
        state.next_state(move)
    assert state.filled_storages == [3, 3]
コード例 #7
0
def test_level_ok_counting_storages():
    state = State(*list(level_ok.values()))

    assert state.filled_storages == [1, 3]
コード例 #8
0
def test_level_ok_prints_right():
    state = State(*list(level_ok.values()))
    out = state.__str__()
    lev = '######\n#p   #\n# $  #\n#  BS#\n# BS #\n######\n'

    assert lev == out
コード例 #9
0
def test_reverse_no_boxes():
    state = State(*list(level_reverse_no_boxes.values()))
    previous_states = state.prev_states()
    previous_players = {state.player for state in previous_states}
    assert previous_players == {(2, 1), (1, 2), (3, 2), (2, 3)}
コード例 #10
0
def test_move_into_wall_down():
    state = State(*list(level_move_into_walls.values()))
    for move in move_into_wall_down:
        state.next_state(move)
    assert state.player == (1, 4)
コード例 #11
0
def test_push_two_boxes_from_down():
    state = State(*list(level_two_boxes.values()))
    for move in push_two_boxes_from_down:
        state.next_state(move)
    assert state.player == (2, 6)
コード例 #12
0
def test_move_into_wall_right():
    state = State(*list(level_move_into_walls.values()))
    for move in move_into_wall_right:
        state.next_state(move)
    assert state.player == (2, 1)
コード例 #13
0
def test_move_out_down():
    state = State(*list(level_move_out_of_screen.values()))
    for move in move_out_down:
        state.next_state(move)
    assert state.player == (1, 3)
コード例 #14
0
def test_move_out_right():
    state = State(*list(level_move_out_of_screen.values()))
    for move in move_out_right:
        state.next_state(move)
    assert state.player == (5, 1)
コード例 #15
0

level_easiest = {
    'width':
    8,
    'height':
    8,
    'player': (1, 1),
    'boxes': [(2, 3)],
    'storages': [(2, 6)],
    'walls':
    set([(0, i) for i in range(8)] + [(7, i) for i in range(8)] +
        [(i, 0) for i in range(8)] + [(i, 7) for i in range(8)])
}

start_state = State(*list(level_easiest.values()))
print(start_state.__str__())
ForwardSolvers.deep_q_learning(start_state, 1000, 15, (.25, .05), .95)

level_easy = {
    'width':
    8,
    'height':
    8,
    'player': (1, 1),
    'boxes': [(2, 2)],
    'storages': [(2, 3)],
    'walls':
    set([(0, i) for i in range(8)] + [(7, i) for i in range(8)] +
        [(i, 0) for i in range(8)] + [(i, 7) for i in range(8)])
}
コード例 #16
0

level_ok = {
    'width':
    6,
    'height':
    6,
    'player': (1, 1),
    'boxes': [(2, 2), (3, 3), (2, 4)],
    'storages': [(2, 2), (3, 4), (4, 3)],
    'walls':
    set([(0, i) for i in range(6)] + [(5, i) for i in range(6)] +
        [(i, 0) for i in range(6)] + [(i, 5) for i in range(6)])
}

start_state = State(*list(level_ok.values()))
print(start_state)
result, move, states_seen = ReverseSolvers.bfs(start_state)
print(result, move, states_seen)

print('\n|-------|\n')

start_state = State(*list(level_ok.values()))
print(start_state)
result, move, states_seen = ReverseSolvers.a_star(start_state)
print(result, move, states_seen)

print('\n|-------|\n')
level_blah = {
    'width':
    8,