예제 #1
0
    def set_parameters(self, **kwargs):
        r"""Set the algorithm parameters/arguments.

        See Also
            * :func:`niapy.algorithms.Algorithm.set_parameters`

        """
        kwargs.pop('population_size', None)
        Algorithm.set_parameters(self, population_size=1, **kwargs)
        self.candidates = None
예제 #2
0
    def set_parameters(self, population_size=20, alpha=1, beta_min=1, gamma=2, **kwargs):
        r"""Set the parameters of the algorithm.

        Args:
            population_size (Optional[int]): Population size.
            alpha (Optional[float]): Step size.
            beta_min (Optional[float]): Minimum value of beta.
            gamma (Optional[float]): Absorption coefficient.
            kwargs (Dict[str, Any]): Additional arguments.

        See Also:
            * :func:`niapy.algorithms.Algorithm.set_parameters`

        """
        Algorithm.set_parameters(self, population_size=population_size, **kwargs)
        self.alpha = alpha
        self.beta_min = beta_min
        self.gamma = gamma
예제 #3
0
class AlgorithmBaseTestCase(TestCase):
    r"""Test case for testing Algorithm class.

    Date:
        April 2019

    Author:
        Klemen Berkovič

    Attributes:
        seed (int): Starting seed of random generator.
        rng (numpy.random.Generator): Random generator.
        a (Algorithm): Algorithm to use for testing.

    See Also:
        * :class:`niapy.algorithms.Individual`

    """

    def setUp(self):
        self.seed = 1
        self.rng = default_rng(self.seed)
        self.a = Algorithm(seed=self.seed)

    def test_algorithm_info(self):
        r"""Check if method works fine."""
        i = Algorithm.info()
        self.assertIsNotNone(i)

    def test_algorithm_getParameters(self):
        r"""Check if method works fine."""
        algo = Algorithm()
        params = algo.get_parameters()
        self.assertIsNotNone(params)

    def test_init_population_numpy(self):
        r"""Test if custom generation initialization works ok."""
        a = Algorithm(population_size=10, initialization_function=init_pop_numpy)
        t = Task(problem=MyProblem(dimension=20))
        self.assertTrue(np.array_equal(np.zeros((10, t.dimension)), a.init_population(t)[0]))

    def test_init_population_individual(self):
        r"""Test if custom generation initialization works ok."""
        a = Algorithm(population_size=10, initialization_function=init_pop_individual, individual_type=Individual)
        t = Task(problem=MyProblem(dimension=20))
        i = Individual(x=np.zeros(t.dimension), task=t)
        pop, fpop, d = a.init_population(t)
        for e in pop:
            self.assertEqual(i, e)

    def test_set_parameters(self):
        self.a.set_parameters(t=None, a=20)
        self.assertRaises(AttributeError, lambda: self.assertEqual(self.a.a, None))

    def test_integers(self):
        o = self.a.integers(low=10, high=20, size=[10, 10])
        self.assertEqual(o.shape, (10, 10))
        self.assertTrue(np.array_equal(self.rng.integers(10, 20, (10, 10)), o))
        o = self.a.integers(low=10, high=20, size=(10, 5))
        self.assertEqual(o.shape, (10, 5))
        self.assertTrue(np.array_equal(self.rng.integers(10, 20, (10, 5)), o))
        o = self.a.integers(low=10, high=20, size=10)
        self.assertEqual(o.shape, (10,))
        self.assertTrue(np.array_equal(self.rng.integers(10, 20, 10), o))

    def test_standard_normal(self):
        a = self.a.standard_normal([1, 2])
        self.assertEqual(a.shape, (1, 2))
        self.assertTrue(np.array_equal(self.rng.standard_normal((1, 2)), a))
        a = self.a.standard_normal(1)
        self.assertEqual(len(a), 1)
        self.assertTrue(np.array_equal(self.rng.standard_normal(1), a))
        a = self.a.standard_normal(2)
        self.assertEqual(len(a), 2)
        self.assertTrue(np.array_equal(self.rng.standard_normal(2), a))
        a = self.a.standard_normal()
        self.assertIsInstance(a, float)
        self.assertTrue(np.array_equal(self.rng.standard_normal(), a))

    def test_uniform(self):
        a = self.a.uniform(-10, 10, [10, 10])
        self.assertEqual(a.shape, (10, 10))
        self.assertTrue(np.array_equal(self.rng.uniform(-10, 10, (10, 10)), a))
        a = self.a.uniform(4, 10, (4, 10))
        self.assertEqual(len(a), 4)
        self.assertEqual(len(a[0]), 10)
        self.assertTrue(np.array_equal(self.rng.uniform(4, 10, (4, 10)), a))
        a = self.a.uniform(1, 4, 2)
        self.assertEqual(len(a), 2)
        self.assertTrue(np.array_equal(self.rng.uniform(1, 4, 2), a))
        a = self.a.uniform(10, 100)
        self.assertIsInstance(a, float)
        self.assertEqual(self.rng.uniform(10, 100), a)

    def test_normal(self):
        a = self.a.normal(-10, 10, [10, 10])
        self.assertEqual(a.shape, (10, 10))
        self.assertTrue(np.array_equal(self.rng.normal(-10, 10, (10, 10)), a))
        a = self.a.normal(4, 10, (4, 10))
        self.assertEqual(len(a), 4)
        self.assertEqual(len(a[0]), 10)
        self.assertTrue(np.array_equal(self.rng.normal(4, 10, (4, 10)), a))
        a = self.a.normal(1, 4, 2)
        self.assertEqual(len(a), 2)
        self.assertTrue(np.array_equal(self.rng.normal(1, 4, 2), a))
        a = self.a.normal(10, 100)
        self.assertIsInstance(a, float)
        self.assertEqual(self.rng.normal(10, 100), a)