コード例 #1
0
    def test_new_cells_with_same_representation_only_best_returned_on_sample(
            self):
        worse_cell = total_cell.Cell(
            representation_info=self.TestRepresentationInfo(0),
            prioritizing_info=self.TestPrioritizingInfo(compare_value=0))

        better_cell = total_cell.Cell(
            representation_info=self.TestRepresentationInfo(0),
            prioritizing_info=self.TestPrioritizingInfo(compare_value=100))

        self.archive.update(worse_cell)
        self.archive.update(better_cell)

        sample = self.archive.sample(batch_size=1)
        self.assertEqual(next(sample), better_cell)
コード例 #2
0
    def test_sample_cells_returns_values_according_to_utilities_as_softmax(
            self):
        probabilities = [0.1, 0.7, 0.2]
        total_trials = 10**5

        cells = [
            total_cell.Cell(
                representation_info=self.TestRepresentationInfo(i),
                utility_info=self.TestUtilityInfo(
                    # Log for softmax (e^utility is used for scaling)
                    np.log(prob))) for i, prob in enumerate(probabilities)
        ]
        for cell in cells:
            self.archive.update(cell)

        sampled_cells = self.archive.sample(batch_size=total_trials)

        successes = [0] * len(probabilities)
        for cell in sampled_cells:
            successes[cell.representation_info.for_hashing] += 1

        for desired_prob, success_count in zip(probabilities, successes):
            got_prob = float(success_count) / total_trials

            abs_difference = np.abs(got_prob - desired_prob)
            max_difference = 9 * np.sqrt(desired_prob *
                                         (1 - desired_prob) / total_trials)

            # Probability of failing here is ~1e-15
            # (if the implementation is valid).
            self.assertLess(abs_difference, max_difference)
コード例 #3
0
    def setUp(self):
        self.archive = in_memory_archive.InMemoryArchive()

        self.cells_100_different = [
            total_cell.Cell(
                prioritizing_info=self.TestPrioritizingInfo(compare_value=i),
                representation_info=self.TestRepresentationInfo(for_hashing=i),
                utility_info=self.TestUtilityInfo(ret_utility=i))
            for i in range(100)
        ]
コード例 #4
0
    def test_new_cell_gets_sampled_in_archive(self):
        cell = total_cell.Cell()
        self.archive.update(cell)
        sampled_cells = self.archive.sample(batch_size=1)

        self.assertEqual(next(sampled_cells), cell)
        with self.assertRaises(
                StopIteration,
                msg='Expected that there is only one element in '
                'the returned cells batch.'):
            next(sampled_cells)
コード例 #5
0
    def test_same_representation_better_priority_utility_stays_same(self):
        worse_cell = total_cell.Cell(
            representation_info=self.TestRepresentationInfo(0),
            prioritizing_info=self.TestPrioritizingInfo(compare_value=0),
            utility_info=self.TestUtilityInfo(ret_utility=100))

        better_cell = total_cell.Cell(
            representation_info=self.TestRepresentationInfo(0),
            prioritizing_info=self.TestPrioritizingInfo(compare_value=100),
            utility_info=self.TestUtilityInfo(ret_utility=10))

        self.archive.update(worse_cell)
        self.archive.update(better_cell)

        sample = next(self.archive.sample(batch_size=1))
        self.assertEqual(
            sample.utility_info.ret_utility,
            100,
            msg='Expected that when a cell is replaced with '
            'a better one, utility for sampling stays the same.')