예제 #1
0
 def compute_utility(self, grid: FastGrid) -> float:
     r = prairie_fire(grid)
     rewards = 0.0
     penalties = 0.0
     top_score_reward = 0
     for tile in r:
         clusters = r[tile]
         num_clusters = len(clusters)
         if num_clusters > 0:
             top_score_reward = self.rewards_for_top_score[tile]
             max_cluster_size = max(c['count'] for c in clusters)
             penalties += 3.0**num_clusters
             rewards += 1.5**max_cluster_size
         #
         #
         # for cluster in clusters:
         #     # {'count': 0, 'minx': 1000, 'maxx': -1, 'miny': 5, 'maxy': -1, 'adjacent_tiles': []}
         #
         #
         #
         #     rewards += (self.rewards_for_cluster_sizes[tile] * cluster['count']) #if cluster['count'] >= 2 else 0
         #     rewards += self.rewards_for_cluster_dimensions_x[cluster['maxx'] - cluster['minx']]
         #     rewards += self.rewards_for_cluster_dimensions_y[cluster['maxy'] - cluster['miny']]
         # special_reward_for_zeros = sum(x['count'] for x in r[0])
         # rewards += 10 * special_reward_for_zeros
         rewards += top_score_reward
     return sigmoid(rewards - penalties)
예제 #2
0
 def test_can_distinguish_between_two_cut_off_clusters(self):
     B = self.create_fastgrid_from(
         [2, 2, 2, 0, 64, 64, 64, 64, 0, 0, 2, 2, 0, 0, 0,
          2])  # 2 groups of connected 2s each size 3
     r = prairie_fire(B)
     self.assertIsNotNone(r)
     self.assertTrue(r[2][0]['count'] == 3)
     self.assertTrue(r[2][1]['count'] == 3)
예제 #3
0
    def test_can_light_fire_on_thread_of_values_grid(self):
        B = self.create_fastgrid_from(
            [2, 2, 2, 0, 0, 0, 2, 0, 0, 0, 2, 2, 0, 0, 0, 2])  # 7 connected 2s
        r = prairie_fire(B)
        self.assertIsNotNone(r)
        self.assertEqual(r[2][0]['count'], 7)
        self.assertEqual(r[2][0]['minx'], 0)
        self.assertEqual(r[2][0]['maxx'], 3)
        self.assertEqual(r[2][0]['miny'], 0)
        self.assertEqual(r[2][0]['maxy'], 3)

        self.assertEqual(r[0][0]['count'], 7)
        self.assertEqual(r[0][0]['minx'], 0)
        self.assertEqual(r[0][0]['maxx'], 2)
        self.assertEqual(r[0][0]['miny'], 1)
        self.assertEqual(r[0][0]['maxy'], 3)

        self.assertEqual(r[0][1]['count'], 2)
        self.assertEqual(r[0][1]['minx'], 3)
        self.assertEqual(r[0][1]['maxx'], 3)
        self.assertEqual(r[0][1]['miny'], 0)
        self.assertEqual(r[0][1]['maxy'], 1)
예제 #4
0
 def test_can_light_fire_on_monotonous_grid(self):
     B = self.create_smooth_grid()
     r = prairie_fire(B)
     self.assertIsNotNone(r)