Ejemplo n.º 1
0
def test_measure_probability_clustering():
    # Assert that the measured resource clustering of each known layout is correct
    for layout_data in known_probability_clustering_layouts:
        assert measure_probability_clustering(
            Board(
                terrain_types=layout_data[0]['terrain_types'],
                tile_numbers=layout_data[0]['tile_numbers'])) == layout_data[1]
Ejemplo n.º 2
0
def test_measure_probability_distribution_per_resources():
    # Assert that the measured resource clustering of each known layout is correct
    for layout_data in known_probability_distribution_layouts:
        assert round(
            measure_probability_distribution_per_resources(
                Board(terrain_types=layout_data[0]['terrain_types'],
                      tile_numbers=layout_data[0]['tile_numbers'])),
            4) == round(layout_data[1], 4)
Ejemplo n.º 3
0
def generate_random_board():
    # Uses random.shuffle() on each required component of the beginner_layout (the terrain_types and tile_numbers arrays
    # ) to build and return a randomized board. We shuffle copies of the arrays to leave beginner_layout unaffected
    terrain_types = beginner_layout['terrain_types'].copy()
    tile_numbers = beginner_layout['tile_numbers'].copy()

    random.shuffle(terrain_types)
    random.shuffle(tile_numbers)

    return Board(terrain_types=terrain_types, tile_numbers=tile_numbers)
Ejemplo n.º 4
0
def find_best_board(num_random, is_seeking_balanced):
    # The current best (either highest or lowest, as determined by is_seeking_balanced) returned score
    current_best_score = 1 if is_seeking_balanced else 0
    # The Board that resulted in the current_best_score - defaults to the beginner layout so that a valid board will
    # always be returned, regardless of the value of num_random
    current_best_board = Board(terrain_types=beginner_layout['terrain_types'],
                               tile_numbers=beginner_layout['tile_numbers'])

    for board_num in range(num_random if num_random > 0 else 0):
        board_to_test = generate_random_board()
        balance_score = calculate_balance(board_to_test)

        # Update the current_best_score and current_best board accordingly, based on is_seeking_balanced
        if (is_seeking_balanced and balance_score <= current_best_score) or (
                not is_seeking_balanced and balance_score >= current_best_score):
            current_best_board = board_to_test
            current_best_score = balance_score

    return current_best_board, current_best_score
Ejemplo n.º 5
0
def test_measure_resource_distribution():
    # Assert that the measured resource distribution of the perfectly distributed layout is 0
    assert measure_resource_distribution(
        Board(terrain_types=perfectly_distributed_layout['terrain_types'],
              tile_numbers=perfectly_distributed_layout['tile_numbers'])) == 0