def set_parameters(self, n=50, F=1, CR=0.8, CrossMutt=cross_rand1, **ukwargs): r"""Set the algorithm parameters. Args: n (Optional[int]): Population size. F (Optional[float]): Scaling factor. CR (Optional[float]): Crossover rate. CrossMutt (Optional[Callable[[numpy.ndarray, int, numpy.ndarray, float, float, mtrand.RandomState, list], numpy.ndarray]]): Crossover and mutation strategy. ukwargs (Dict[str, Any]): Additional arguments. See Also: * :func:`WeOptPy.algorithms.Algorithm.setParameters` """ Algorithm.set_parameters(self, n=n, init_pop_func=ukwargs.pop( 'init_pop_func', default_individual_init), itype=ukwargs.pop('itype', Individual), **ukwargs) self.F, self.CR, self.CrossMutt = F, CR, CrossMutt
def set_parameters(self, n=100, a=0.5, epsilon=0.001, alpha=1.0, r=0.5, qmin=0.0, qmax=2.0, **ukwargs): r"""Set the parameters of the algorithm. Args: n (int): Number of individuals in population. a (Optional[float]): Starting loudness. epsilon (Optional[float]): Scaling factor. alpha (Optional[float]): Constant for updating loudness. r (Optional[float]): Pulse rate. qmin (Optional[float]): Minimum frequency. qmax (Optional[float]): Maximum frequency. See Also: * :func:`NiaPy.algorithms.Algorithm.setParameters` """ Algorithm.set_parameters(self, n=n, **ukwargs) self.A, self.epsilon, self.alpha, self.r, self.Qmin, self.Qmax = a, epsilon, alpha, r, qmin, qmax
def set_parameters(self, n=None, alpha=0.1, gamma=0.3, rho=-0.2, sigma=-0.2, **ukwargs): r"""Set the arguments of an algorithm. Arguments: n (Optional[int]): Number of individuals. alpha (Optional[float]): Reflection coefficient parameter gamma (Optional[float]): Expansion coefficient parameter rho (Optional[float]): Contraction coefficient parameter sigma (Optional[float]): Shrink coefficient parameter See Also: * :func:`NiaPy.algorithms.Algorithm.setParameters` """ Algorithm.set_parameters(self, n=n, init_pop_func=ukwargs.pop( 'init_pop_func', self.init_pop), **ukwargs) self.alpha, self.gamma, self.rho, self.sigma = alpha, gamma, rho, sigma
def set_parameters(self, M=40, NoLsTests=5, NoLs=5, NoLsBest=5, NoEnabled=17, BONUS1=10, BONUS2=1, LSs=(MTS_LS1, MTS_LS2, MTS_LS3), **ukwargs): r"""Set the arguments of the algorithm. Arguments: M (int): Number of individuals in population. NoLsTests (int): Number of test runs on local search algorithms. NoLs (int): Number of local search algorithm runs. NoLsBest (int): Number of locals search algorithm runs on best solution. NoEnabled (int): Number of best solution for testing. BONUS1 (int): Bonus for improving global best solution. BONUS2 (int): Bonus for improving self. LSs (Iterable[Callable[[numpy.ndarray, float, numpy.ndarray, float, bool, numpy.ndarray, Task, Dict[str, Any]], Tuple[numpy.ndarray, float, numpy.ndarray, float, bool, int, numpy.ndarray]]]): Local searches to use. See Also: * :func:`NiaPy.algorithms.Algorithm.setParameters` """ Algorithm.set_parameters(self, n=ukwargs.pop('n', M), **ukwargs) self.NoLsTests, self.NoLs, self.NoLsBest, self.NoEnabled, self.BONUS1, self.BONUS2 = NoLsTests, NoLs, NoLsBest, NoEnabled, BONUS1, BONUS2 self.LSs = LSs
def set_parameters(self, **ukwargs): r"""Set the algorithm parameters/arguments. Args: ukwargs (dict): Additional keyword arguments. """ Algorithm.set_parameters(self, **ukwargs)
def set_parameters(self, delta=0.5, Neighborhood=neighborhood, **ukwargs): r"""Set the algorithm parameters/arguments. Args: * delta (Optional[float]): Change for searching in neighborhood. * Neighborhood (Optional[Callable[numpy.ndarray, float, Task], Tuple[numpy.ndarray, float]]]): Function for getting neighbours. """ Algorithm.set_parameters(self, n=1, **ukwargs) self.delta, self.Neighborhood = delta, Neighborhood
def set_parameters(self, epsilon=1e-20, **ukwargs): r"""Set core parameters of CovarianceMatrixAdaptionEvolutionStrategy algorithm. Args: epsilon (float): Small number. ukwargs (Dict[str, Any]): Additional arguments. """ Algorithm.set_parameters(self, **ukwargs) self.epsilon = epsilon
def set_parameters(self, n=25, a=3, Rmin=0, Rmax=2, **ukwargs): r"""Set the arguments of an algorithm. Args: n (Optional[int]): Number of individual in population a (Optional[float]): Parameter for control in :math:`r_1` value Rmin (Optional[float]): Minimu value for :math:`r_3` value Rmax (Optional[float]): Maximum value for :math:`r_3` value See Also: * :func:`NiaPy.algorithms.algorithm.Algorithm.setParameters` """ Algorithm.set_parameters(self, n=n, **ukwargs) self.a, self.Rmin, self.Rmax = a, Rmin, Rmax
def set_parameters(self, n=25, p=0.35, beta=1.5, **ukwargs): r"""Set core parameters of FlowerPollinationAlgorithm algorithm. Args: n (int): Population size. p (float): Probability switch. beta (float): Shape of the gamma distribution (should be greater than zero). See Also: * :func:`WeOptPy.algorithms.Algorithm.setParameters` """ Algorithm.set_parameters(self, n=n, **ukwargs) self.p, self.beta = p, beta self.S = np.zeros((n, 10))
def set_parameters(self, N=50, pa=0.2, alpha=0.5, **ukwargs): r"""Set the arguments of an algorithm. Arguments: N (int): Population size :math:`\in [1, \infty)` pa (float): factor :math:`\in [0, 1]` alpah (float): TODO ukwargs (Dict[str, Any]): Additional arguments See Also: * :func:`WeOptPy.algorithms.Algorithm.setParameters` """ ukwargs.pop('n', None) Algorithm.set_parameters(self, n=N, **ukwargs) self.pa, self.alpha = pa, alpha
def set_parameters(self, n=20, alpha=1, betamin=1, gamma=2, **ukwargs): r"""Set the parameters of the algorithm. Args: n (Optional[int]): Population size. alpha (Optional[float]): Alpha parameter. betamin (Optional[float]): Betamin parameter. gamma (Optional[flaot]): Gamma parameter. ukwargs (Dict[str, Any]): Additional arguments. See Also: * :func:`WeOptPy.algorithms.Algorithm.setParameters` """ Algorithm.set_parameters(self, n=n, **ukwargs) self.alpha, self.betamin, self.gamma = alpha, betamin, gamma
def set_parameters(self, n=10, limit=100, **ukwargs): r"""Set the parameters of Artificial Bee Colony Algorithm. Args: n (int): Number of individuals in population. limit (Optional[Union[float, numpy.ndarray[float]]]): Limit. ukwargs (dict): Additional arguments. See Also: * :func:`WeOptPy.algorithms.Algorithm.setParameters` """ Algorithm.set_parameters(self, n=n, init_pop_func=default_individual_init, itype=SolutionABC, **ukwargs) self.FoodNumber, self.Limit = int(self.NP / 2), limit
def set_parameters(self, n=40, A=0.5, r=0.5, Qmin=0.0, Qmax=2.0, **ukwargs): r"""Set the parameters of the algorithm. Args: A (Optional[float]): Loudness. r (Optional[float]): Pulse rate. Qmin (Optional[float]): Minimum frequency. Qmax (Optional[float]): Maximum frequency. See Also: * :func:`WeOptPy.algorithms.Algorithm.setParameters` """ Algorithm.set_parameters(self, n=n, **ukwargs) self.A, self.r, self.Qmin, self.Qmax = A, r, Qmin, Qmax
def set_parameters(self, delta=0.5, T=2000, deltaT=0.8, coolingMethod=coolDelta, epsilon=1e-23, **ukwargs): r"""Set the algorithm parameters/arguments. Arguments: delta (Optional[float]): Movement for neighbour search. T (Optional[float]); Starting temperature. deltaT (Optional[float]): Change in temperature. coolingMethod (Optional[Callable]): Neighbourhood function. epsilon (Optional[float]): Error value. See Also * :func:`NiaPy.algorithms.Algorithm.setParameters` """ ukwargs.pop('n', None) Algorithm.set_parameters(self, n=1, **ukwargs) self.delta, self.T, self.deltaT, self.cool, self.epsilon = delta, T, deltaT, coolingMethod, epsilon
def set_parameters(self, mu=1, k=10, c_a=1.1, c_r=0.5, epsilon=1e-20, **ukwargs): r"""Set the arguments of an algorithm. Args: mu (Optional[int]): Number of parents k (Optional[int]): Number of iterations before checking and fixing rho c_a (Optional[float]): Search range amplification factor c_r (Optional[float]): Search range reduction factor See Also: * :func:`WeOptPy.algorithms.Algorithm.setParameters` """ Algorithm.set_parameters(self, n=mu, itype=ukwargs.pop('itype', IndividualES), **ukwargs) self.mu, self.k, self.c_a, self.c_r, self.epsilon = mu, k, c_a, c_r, epsilon
def set_parameters(self, n=43, alpha=(1, 0.83), gamma=(1.17, 0.56), theta=(0.932, 0.832), d=euclidean, dn=euclidean, nl=1, F=1.2, CR=0.25, Combination=elitism, **ukwargs): r"""Set the parameters for the algorithm. Args: n (int): Number of individuals in population. alpha (Optional[List[float]]): Factor for fickleness index function :math:`\in [0, 1]`. gamma (Optional[List[float]]): Factor for external irregularity index function :math:`\in [0, \infty)`. theta (Optional[List[float]]): Factor for internal irregularity index function :math:`\in [0, \infty)`. d (Optional[Callable[[float, float], float]]): function that takes two arguments that are function values and calcs the distance between them. dn (Optional[Callable[[numpy.ndarray, numpy.ndarray], float]]]): function that takes two arguments that are points in function landscape and calcs the distance between them. nl (Optional[float]): Normalized range for neighborhood search :math:`\in (0, 1]`. F (Optional[float]): Mutation parameter. CR (Optional[float]): Crossover parameter :math:`\in [0, 1]`. Combination (Optional[Callable[[numpy.ndarray, numpy.ndarray, numpy.ndarray, numpy.ndarray, float, float, float, float, float, float, Task, mtrand.RandomState], Tuple[numpy.ndarray, float]]]): Function for combining individuals to get new position/individual. See Also: * :func:`WeOptPy.algorithms.Algorithm.setParameters` * Combination methods: * :func:`WeOptPy.algorithms.other.Elitism` * :func:`WeOptPy.algorithms.other.Crossover` * :func:`WeOptPy.algorithms.other.Sequential` """ Algorithm.set_parameters(self, n=n, **ukwargs) self.alpha, self.gamma, self.theta, self.d, self.dn, self.nl, self.F, self.CR, self.Combination = alpha, gamma, theta, d, dn, nl, F, CR, Combination
class AlgorithmBaseTestCase(TestCase): r"""Test case for testing Algorithm class. Date: April 2019 Author: Klemen Berkovič Attributes: seed (int): Starting seed of random generator. rnd (mtrand.RandomState): Random generator. a (Algorithm): Algorithm to use for testing. See Also: * :class:`NiaPy.algorithms.Individual` """ def setUp(self): self.seed = 1 self.rnd = rnd.RandomState(self.seed) self.a = Algorithm(seed=self.seed) def test_algorithm_info_fine(self): r"""Check if method works fine.""" i = Algorithm.algorithm_info() self.assertIsNotNone(i) def test_algorithm_getParameters_fine(self): r"""Check if method works fine.""" algo = Algorithm() params = algo.get_parameters() self.assertIsNotNone(params) def test_type_parameters_fine(self): d = Algorithm.type_parameters() self.assertIsNotNone(d) def test_init_population_numpy_fine(self): r"""Test if custome generation initialization works ok.""" a = Algorithm(n=10, init_pop_func=init_pop_numpy) t = Task(d=20, benchmark=Sphere()) self.assertTrue( np.array_equal(np.full((10, t.D), 0.0), a.init_population(t)[0])) def test_init_population_individual_fine(self): r"""Test if custom generation initialization works ok.""" a = Algorithm(n=10, init_pop_func=init_pop_individual, itype=Individual) t = Task(d=20, benchmark=Sphere()) i = Individual(x=np.full(t.D, 0.0), task=t) pop, fpop, args, kwargs = 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_randint_fine(self): o = self.a.randint(maximum=20, minimum=10, d=[10, 10]) self.assertEqual(o.shape, (10, 10)) self.assertTrue(np.array_equal(self.rnd.randint(10, 20, (10, 10)), o)) o = self.a.randint(maximum=20, minimum=10, d=(10, 5)) self.assertEqual(o.shape, (10, 5)) self.assertTrue(np.array_equal(self.rnd.randint(10, 20, (10, 5)), o)) o = self.a.randint(maximum=20, minimum=10, d=10) self.assertEqual(o.shape, (10, )) self.assertTrue(np.array_equal(self.rnd.randint(10, 20, 10), o)) def test_randn_fine(self): a = self.a.randn([1, 2]) self.assertEqual(a.shape, (1, 2)) self.assertTrue(np.array_equal(self.rnd.randn(1, 2), a)) a = self.a.randn(1) self.assertEqual(len(a), 1) self.assertTrue(np.array_equal(self.rnd.randn(1), a)) a = self.a.randn(2) self.assertEqual(len(a), 2) self.assertTrue(np.array_equal(self.rnd.randn(2), a)) a = self.a.randn() self.assertIsInstance(a, float) self.assertTrue(np.array_equal(self.rnd.randn(), a)) def test_uniform_fine(self): a = self.a.uniform(-10, 10, [10, 10]) self.assertEqual(a.shape, (10, 10)) self.assertTrue(np.array_equal(self.rnd.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.rnd.uniform(4, 10, (4, 10)), a)) a = self.a.uniform(1, 4, 2) self.assertEqual(len(a), 2) self.assertTrue(np.array_equal(self.rnd.uniform(1, 4, 2), a)) a = self.a.uniform(10, 100) self.assertIsInstance(a, float) self.assertEqual(self.rnd.uniform(10, 100), a) def test_normal_fine(self): a = self.a.normal(-10, 10, [10, 10]) self.assertEqual(a.shape, (10, 10)) self.assertTrue(np.array_equal(self.rnd.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.rnd.normal(4, 10, (4, 10)), a)) a = self.a.normal(1, 4, 2) self.assertEqual(len(a), 2) self.assertTrue(np.array_equal(self.rnd.normal(1, 4, 2), a)) a = self.a.normal(10, 100) self.assertIsInstance(a, float) self.assertEqual(self.rnd.normal(10, 100), a)