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]
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)
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)
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
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