def setUp(self):
     self.mco_factory = mock.Mock(
         spec=BaseMCOFactory,
         plugin_id="pid",
         plugin_name="Plugin",
         id="mcoid",
     )
     self.factory = RangedVectorMCOParameterFactory(self.mco_factory)
     self.parameter = RangedVectorMCOParameter(self.factory)
Exemple #2
0
    def test_verify(self):

        parameter = RangedVectorMCOParameter(
            self.factory,
            lower_bound=[10, 20],
            upper_bound=[20],
            initial_value=[30],
            name="name",
            type="type",
        )

        errors = parameter.verify()
        messages = [error.local_error for error in errors]
        self.assertEqual(2, len(messages))

        expected_message = (
            'List attribute lower_bound must possess same length as '
            'determined by dimension attribute: 1')
        self.assertEqual(expected_message, messages[0])

        expected_message = (
            "Initial values at indices [0] of the Ranged Vector parameter "
            "must be within the lower and the upper bounds."
        )
        self.assertEqual(expected_message, messages[1])

        parameter.lower_bound[:] = parameter.lower_bound[:1]
        parameter.initial_value = [0]

        errors = parameter.verify()
        messages = [error.local_error for error in errors]
        self.assertEqual(1, len(messages))
        expected_message = (
            "Initial values at indices [0] of the Ranged Vector parameter "
            "must be within the lower and the upper bounds."
        )
        self.assertEqual(expected_message, messages[0])

        parameter.initial_value = [15]
        errors = parameter.verify()
        self.assertEqual(0, len(errors))

        parameter.upper_bound = [7]
        errors = parameter.verify()
        messages = [error.local_error for error in errors]
        self.assertEqual(2, len(messages))
        expected_message = (
            "Upper bound values at indices [0] of the Ranged Vector"
            " parameter must greater than the lower bound values."
        )
        self.assertEqual(expected_message, messages[1])
    def test_custom_parameter(self):
        parameter = RangedVectorMCOParameter(self.factory, lower_bound=[10])
        self.assertListEqual([10], parameter.lower_bound)
        self.assertListEqual([100.0], parameter.upper_bound)
        self.assertEqual(5, parameter.n_samples)
        self.assertEqual([55.0], parameter.initial_value)

        parameter = RangedVectorMCOParameter(self.factory,
                                             lower_bound=[10],
                                             initial_value=[100])
        self.assertEqual([10], parameter.lower_bound)
        self.assertEqual([100.0], parameter.upper_bound)
        self.assertEqual(5, parameter.n_samples)
        self.assertEqual([100.0], parameter.initial_value)
Exemple #4
0
    def test_optimize_function(self):

        factory = RangedVectorMCOParameterFactory(self.factory)

        params = [
            RangedVectorMCOParameter(factory=factory,
                                     name='coordinates',
                                     dimension=2,
                                     lower_bound=[-2, -2],
                                     upper_bound=[2, 2],
                                     initial_value=[1, 1])
        ]

        # test single-objective (scalar) function
        for point in self.optimizer.optimize_function(
                lambda arg: arg[0][0]**2 + arg[0][1]**2, params):
            x, y = point[0]
            self.assertAlmostEqual(x, 0.0)
            self.assertAlmostEqual(y, 0.0)

        # test multi-objective function (objectives should be summed)
        for point in self.optimizer.optimize_function(
                lambda arg: [arg[0][0]**2, arg[0][1]**2], params):
            x, y = point[0]
            self.assertAlmostEqual(x, 0.0)
            self.assertAlmostEqual(y, 0.0)
class TestRangedVectorMCOParameter(TestCase):
    def setUp(self):
        self.mco_factory = mock.Mock(
            spec=BaseMCOFactory,
            plugin_id="pid",
            plugin_name="Plugin",
            id="mcoid",
        )
        self.factory = RangedVectorMCOParameterFactory(self.mco_factory)
        self.parameter = RangedVectorMCOParameter(self.factory)

    def test_factory(self):
        self.assertEqual("ranged_vector", self.factory.get_identifier())
        self.assertEqual("Ranged Vector", self.factory.get_name())
        self.assertEqual(
            "A vector parameter with a ranged level in floating point values.",
            self.factory.get_description(),
        )

    def test_default(self):
        self.assertEqual([0.1], self.parameter.lower_bound)
        self.assertEqual([100.0], self.parameter.upper_bound)
        self.assertEqual(5, self.parameter.n_samples)
        self.assertEqual([50.05], self.parameter.initial_value)
        self.assertIsInstance(self.parameter.default_traits_view(), View)

    def test_sample_values(self):
        for expected, actual in zip(
            [0.1, 25.075, 50.05, 75.025, 100.0],
                list(self.parameter.sample_values[0]),
        ):
            self.assertAlmostEqual(expected, actual)
        self.parameter.lower_bound[0] = 90.0
        for expected, actual in zip(
            [90.0, 92.5, 95.0, 97.5, 100.0],
                list(self.parameter.sample_values[0]),
        ):
            self.assertAlmostEqual(expected, actual)
        self.parameter.n_samples = 3
        for expected, actual in zip([90.0, 95.0, 100.0],
                                    list(self.parameter.sample_values[0])):
            self.assertAlmostEqual(expected, actual)

    def test_custom_parameter(self):
        parameter = RangedVectorMCOParameter(self.factory, lower_bound=[10])
        self.assertListEqual([10], parameter.lower_bound)
        self.assertListEqual([100.0], parameter.upper_bound)
        self.assertEqual(5, parameter.n_samples)
        self.assertEqual([55.0], parameter.initial_value)

        parameter = RangedVectorMCOParameter(self.factory,
                                             lower_bound=[10],
                                             initial_value=[100])
        self.assertEqual([10], parameter.lower_bound)
        self.assertEqual([100.0], parameter.upper_bound)
        self.assertEqual(5, parameter.n_samples)
        self.assertEqual([100.0], parameter.initial_value)

    def test_dimension_change(self):
        self.assertEqual(1, self.parameter.dimension)
        self.assertEqual(1, len(self.parameter.upper_bound))
        self.assertEqual(1, len(self.parameter.lower_bound))
        self.assertEqual(1, len(self.parameter.initial_value))
        self.assertListEqual([100.0], self.parameter.upper_bound)
        self.assertListEqual([0.1], self.parameter.lower_bound)
        self.assertListEqual([50.05], self.parameter.initial_value)

        self.parameter.dimension = 3
        self.assertEqual(3, self.parameter.dimension)
        self.assertEqual(3, len(self.parameter.upper_bound))
        self.assertEqual(3, len(self.parameter.lower_bound))
        self.assertEqual(3, len(self.parameter.initial_value))
        self.assertListEqual([100.0, 0.0, 0.0], self.parameter.upper_bound)
        self.assertListEqual([0.1, 0.0, 0.0], self.parameter.lower_bound)
        self.assertListEqual([50.05, 0.0, 0.0], self.parameter.initial_value)

        self.parameter.upper_bound = [100.0, 0.0]
        self.parameter.dimension = 2
        self.assertEqual(2, self.parameter.dimension)
        self.assertEqual(2, len(self.parameter.upper_bound))
        self.assertEqual(2, len(self.parameter.lower_bound))
        self.assertEqual(2, len(self.parameter.initial_value))
        self.assertListEqual([100.0, 0.0], self.parameter.upper_bound)
        self.assertListEqual([0.1, 0.0], self.parameter.lower_bound)
        self.assertListEqual([50.05, 0.0], self.parameter.initial_value)

    def test_verify(self):

        parameter = RangedVectorMCOParameter(
            self.factory,
            lower_bound=[10, 20],
            upper_bound=[20],
            initial_value=[30],
            name="name",
            type="type",
        )

        errors = parameter.verify()
        messages = [error.local_error for error in errors]
        self.assertEqual(1, len(messages))

        expected_message = (
            'List attribute lower_bound must possess same length as '
            'determined by dimension attribute: 1')
        self.assertEqual(expected_message, messages[0])

        parameter.lower_bound[:] = parameter.lower_bound[:1]
        parameter.initial_value = [0]

        errors = parameter.verify()
        messages = [error.local_error for error in errors]
        self.assertEqual(1, len(messages))
        expected_message = (
            "Initial values at indices [0] of the Ranged Vector parameter "
            "must be within the lower and the upper bounds.")
        self.assertEqual(expected_message, messages[0])

        parameter.initial_value = [15]
        errors = parameter.verify()
        self.assertEqual(0, len(errors))

        parameter.upper_bound = [7]
        errors = parameter.verify()
        messages = [error.local_error for error in errors]
        self.assertEqual(2, len(messages))
        expected_message = (
            "Upper bound values at indices [0] of the Ranged Vector"
            " parameter must greater than the lower bound values.")
        self.assertEqual(expected_message, messages[1])