Exemple #1
0
    def test_preferences(self):
        d = UniformPreferenceDict(3)
        a, b = (0, 1, 2), (3, 4, 5)
        d[a, b] = 1

        e, f = (9, 9, 9), (1, 1, 1)
        d[e, f] = -1

        self.assertEqual(sorted(d.preferences()), [(0, 1, 2), (1, 1, 1),
                                                   (3, 4, 5), (9, 9, 9)])
Exemple #2
0
def should_return_correct_preference_key_items():
    # given
    a = (0, 1, 2)
    b = (3, 4, 5)
    e = (9, 9, 9)
    f = (1, 1, 1)

    preferences = UniformPreferenceDict(len(a))

    # when
    preferences[a, b] = 1
    preferences[e, f] = -1

    # then
    assert sorted(preferences.preferences()) == [a, f, b, e]
Exemple #3
0
    def test_interface_with_direct_optimizer_scalar_lengthscale(self):
        with self.test_session():
            # set RNG seed
            np.random.seed(RNG_SEED)
            tf.set_random_seed(RNG_SEED)

            # set up
            bounds = [
                (-3, 6),
                (-3, 6),
            ]

            optimizer = DirectOptimizer(bounds)
            model = BinaryPreferenceModel(
                lengthscale=1.0,
                **CONFIG
            )

            data = UniformPreferenceDict(2)
            a = (0, 0)
            b = (1, 1)
            c = (2, 2)
            d = (3, 3)
            data[a, b] = 1
            data[a, c] = 1
            data[b, c] = 1
            data[b, d] = 1
            data[c, d] = 1

            # construct acquirer
            acquirer = ExpectedImprovementAcquirer(data, model, optimizer)

            # test that `next` needs to be called before `best`
            with self.assertRaises(ValueError):
                acquirer.best

            # test that `next` needs to be called before `valuations`
            with self.assertRaises(ValueError):
                acquirer.valuations

            # test `next`
            a1, a2 = a
            b1, b2 = b
            xn = xn1, xn2 = acquirer.next
            eps = 0.5
            self.assertTrue(
                (a1 - eps < xn1 < b1) and
                (a2 - eps < xn2 < b2)
            )
            self.assertTrue(np.allclose(xn, acquirer.next))

            # test `best`
            best = acquirer.best
            self.assertTrue(np.allclose(a, best))
            self.assertTrue(np.allclose(best, acquirer.best))

            # test `valuations`
            valuations = acquirer.valuations
            x, f = zip(*valuations)
            self.assertEqual(len(x), len(data.preferences()))
            self.assertTrue(all(a < b for a, b in zip(x, x[1:])))
            self.assertTrue(all(a > b for a, b in zip(f, f[1:])))

            # test `update`
            e = (-1, -1)
            acquirer.update(e, a, 1)
            acquirer.update(e, b, 1)

            # test `next`
            l1, l2 = (x[0] for x in bounds)
            xn1, xn2 = acquirer.next
            self.assertTrue(
                (l1 < xn1 < a1) and
                (l2 < xn2 < a2),
            )

            # test `best`
            best = acquirer.best
            self.assertTrue(np.allclose(e, best))

            # test `valuations`
            valuations = acquirer.valuations
            x, f = zip(*valuations)
            self.assertEqual(len(x), len(data.preferences()))
            self.assertTrue(all(a < b for a, b in zip(x, x[1:])))
            self.assertTrue(all(a > b for a, b in zip(f, f[1:])))
Exemple #4
0
    def test_interface_with_grid_search_optimizer_ard_lengthscale(self):
        with self.test_session():
            # set RNG seed
            np.random.seed(RNG_SEED)
            tf.set_random_seed(RNG_SEED)

            # set up
            bounds = [
                (-3, 6),
                (-3, 6),
            ]
            optimizer = GridSearchOptimizer(bounds)
            model = BinaryPreferenceModel(
                ard=True,
                **CONFIG
            )

            data = UniformPreferenceDict(2)
            a = (0, 0)
            b = (1, 0)
            c = (2, 0)
            d = (3, 0)
            data[a, b] = 1
            data[a, c] = 1
            data[b, c] = 1
            data[b, d] = 1
            data[c, d] = 1

            ab = (0.5, 0)
            bc = (1.5, 0)
            cd = (2.5, 0)
            data[a, ab] = 1
            data[ab, b] = 1
            data[b, bc] = 1
            data[bc, c] = 1
            data[c, cd] = 1
            data[cd, d] = 1

            data[ab, bc] = 1
            data[ab, cd] = 1
            data[bc, cd] = 1

            # construct acquirer
            acquirer = ExpectedImprovementAcquirer(data, model, optimizer)

            # test that `next` needs to be called before `best`
            with self.assertRaises(ValueError):
                acquirer.best

            # test that `next` needs to be called before `valuations`
            with self.assertRaises(ValueError):
                acquirer.valuations

            # test `next`
            a1, a2 = a
            b1, b2 = b
            xn = xn1, xn2 = acquirer.next
            eps = 1.0
            self.assertTrue(
                (a1 - eps < xn1 < b1),
            )
            self.assertTrue(np.allclose(xn, acquirer.next))

            # test `best`
            best = acquirer.best
            self.assertTrue(np.allclose(a, best))
            self.assertTrue(np.allclose(best, acquirer.best))

            # test `valuations`
            valuations = acquirer.valuations
            x, f = zip(*valuations)
            self.assertEqual(len(x), len(data.preferences()))
            self.assertTrue(all(a < b for a, b in zip(x, x[1:])))
            self.assertTrue(all(a > b for a, b in zip(f, f[1:])))

            # test `lengthscale`
            s1, s2 = model.lengthscale
            self.assertTrue(s1 < s2)

            # test `update`
            e = (-1, 0)
            acquirer.update(e, a, 1)
            acquirer.update(e, ab, 1)
            acquirer.update(e, b, 1)
            acquirer.update(e, bc, 1)

            # test `next`
            l1, l2 = (x[0] for x in bounds)
            xn1, xn2 = acquirer.next
            self.assertTrue(
                (l1 <= xn1 < a1),
            )

            # test `best`
            best = acquirer.best
            self.assertTrue(best < b)

            # test `valuations`
            valuations = acquirer.valuations
            x, f = zip(*valuations)
            self.assertEqual(len(x), len(data.preferences()))
            self.assertTrue(all(a < b for a, b in zip(x, x[1:])))
            self.assertTrue(all(a > b for a, b in zip(f, f[1:])))

            # test `lengthscale`
            s1, s2 = model.lengthscale
            self.assertTrue(s1 < s2)
Exemple #5
0
    def test_interface_with_grid_search_optimizer_vector_lengthscale(self):
        with self.test_session():
            # set RNG seed
            np.random.seed(RNG_SEED)
            tf.set_random_seed(RNG_SEED)

            # set up
            bounds = [
                (-3, 6),
                (-3, 6),
            ]
            optimizer = GridSearchOptimizer(bounds)
            lengthscale = np.array([1, 10], np.float32)
            model = BinaryPreferenceModel(lengthscale=lengthscale, **CONFIG)

            data = UniformPreferenceDict(2)
            a = (0, 0)
            b = (1, 0)
            c = (2, 0)
            d = (3, 0)
            data[a, b] = 1
            data[a, c] = 1
            data[b, c] = 1
            data[b, d] = 1
            data[c, d] = 1

            # construct acquirer
            acquirer = ExpectedImprovementAcquirer(data, model, optimizer)

            # test that `next` needs to be called before `best`
            with self.assertRaises(ValueError):
                acquirer.best  # pylint: disable=pointless-statement

            # test that `next` needs to be called before `valuations`
            with self.assertRaises(ValueError):
                acquirer.valuations  # pylint: disable=pointless-statement

            # test `next`
            a1, _ = a
            b1, _ = b
            xn = xn1, _ = acquirer.next
            eps = 0.5
            self.assertTrue((a1 - eps < xn1 < b1))
            self.assertTrue(np.allclose(xn, acquirer.next))

            # test `best`
            best = acquirer.best
            self.assertTrue(np.allclose(a, best))
            self.assertTrue(np.allclose(best, acquirer.best))

            # test `valuations`
            valuations = acquirer.valuations
            x, f = zip(*valuations)
            self.assertEqual(len(x), len(data.preferences()))
            self.assertTrue(all(a < b for a, b in zip(x, x[1:])))
            self.assertTrue(all(a > b for a, b in zip(f, f[1:])))

            # test `lengthscale`
            self.assertAllClose(model.lengthscale, lengthscale)

            # test `update`
            e = (-1, 0)
            acquirer.update(e, a, 1)
            acquirer.update(e, b, 1)

            # test `next`
            l1, _ = (x[0] for x in bounds)
            xn1, _ = acquirer.next
            self.assertTrue((l1 < xn1 < a1))

            # test `best`
            best = acquirer.best
            self.assertTrue(np.allclose(e, best))

            # test `valuations`
            valuations = acquirer.valuations
            x, f = zip(*valuations)
            self.assertEqual(len(x), len(data.preferences()))
            self.assertTrue(all(a < b for a, b in zip(x, x[1:])))
            self.assertTrue(all(a > b for a, b in zip(f, f[1:])))