Code Duplication    Length = 83-87 lines in 2 locations

NiaPy/algorithms/modified/hsaba.py 1 location

@@ 13-99 (lines=87) @@
10
11
__all__ = ['HybridSelfAdaptiveBatAlgorithm']
12
13
class HybridSelfAdaptiveBatAlgorithm(SelfAdaptiveBatAlgorithm):
14
	r"""Implementation of Hybrid self adaptive bat algorithm.
15
16
	Algorithm:
17
		Hybrid self adaptive bat algorithm
18
19
	Date:
20
		April 2019
21
22
	Author:
23
		Klemen Berkovič
24
25
	License:
26
		MIT
27
28
	Reference paper:
29
		Fister, Iztok, Simon Fong, and Janez Brest. "A novel hybrid self-adaptive bat algorithm." The Scientific World Journal 2014 (2014).
30
31
	Reference URL:
32
		https://www.hindawi.com/journals/tswj/2014/709738/cta/
33
34
	Attributes:
35
		Name (List[str]): List of strings representing algorithm name.
36
		F (float): Scaling factor for local search.
37
		CR (float): Probability of crossover for local search.
38
		CrossMutt (Callable[[numpy.ndarray, int, numpy.ndarray, float, float, mtrand.RandomState, Dict[str, Any]): Local search method based of Differential evolution strategy.
39
40
	See Also:
41
		* :class:`NiaPy.algorithms.basic.BatAlgorithm`
42
	"""
43
	Name = ['HybridSelfAdaptiveBatAlgorithm', 'HSABA']
44
45
	@staticmethod
46
	def algorithmInfo():
47
		r"""Get basic information about the algorithm.
48
49
		Returns:
50
			str: Basic information.
51
		"""
52
		return r"""Fister, Iztok, Simon Fong, and Janez Brest. "A novel hybrid self-adaptive bat algorithm." The Scientific World Journal 2014 (2014)."""
53
54
	@staticmethod
55
	def typeParameters():
56
		r"""Get dictionary with functions for checking values of parameters.
57
58
		Returns:
59
			Dict[str, Callable]: Additional arguments.
60
61
		See Also:
62
			* :func:`NiaPy.algorithms.basic.BatAlgorithm.typeParameters`
63
		"""
64
		d = SelfAdaptiveBatAlgorithm.typeParameters()
65
		d.update({
66
			'F': lambda x: isinstance(x, (int, float)) and x > 0,
67
			'CR': lambda x: isinstance(x, float) and 0 <= x <= 1
68
		})
69
		return d
70
71
	def setParameters(self, F=3, CR=0.5, CrossMutt=CrossBest1, **ukwargs):
72
		r"""Set core parameters of HybridBatAlgorithm algorithm.
73
74
		Arguments:
75
			F (Optional[float]): Scaling factor for local search.
76
			CR (Optional[float]): Probability of crossover for local search.
77
			CrossMutt (Optional[Callable[[numpy.ndarray, int, numpy.ndarray, float, float, mtrand.RandomState, Dict[str, Any], numpy.ndarray]]): Local search method based of Differential evolution strategy.
78
			ukwargs (Dict[str, Any]): Additional arguments.
79
80
		See Also:
81
			* :func:`NiaPy.algorithms.basic.BatAlgorithm.setParameters`
82
		"""
83
		SelfAdaptiveBatAlgorithm.setParameters(self, **ukwargs)
84
		self.F, self.CR, self.CrossMutt = F, CR, CrossMutt
85
86
	def localSearch(self, best, A, i, Sol, task, **kwargs):
87
		r"""Improve the best solution.
88
89
		Args:
90
			best (numpy.ndarray): Global best individual.
91
			task (Task): Optimization task.
92
			i (int): Index of current individual.
93
			Sol (numpy.ndarray): Current best population.
94
			**kwargs (Dict[str, Any]):
95
96
		Returns:
97
			numpy.ndarray: New solution based on global best individual.
98
		"""
99
		return task.repair(self.CrossMutt(Sol, i, best, self.F, self.CR, rnd=self.Rand), rnd=self.Rand)
100
101
# vim: tabstop=3 noexpandtab shiftwidth=3 softtabstop=3
102

NiaPy/algorithms/modified/hba.py 1 location

@@ 13-95 (lines=83) @@
10
11
__all__ = ['HybridBatAlgorithm']
12
13
class HybridBatAlgorithm(BatAlgorithm):
14
	r"""Implementation of Hybrid bat algorithm.
15
16
	Algorithm:
17
		Hybrid bat algorithm
18
19
	Date:
20
		2018
21
22
	Author:
23
		Grega Vrbancic and Klemen Berkovič
24
25
	License:
26
		MIT
27
28
	Reference paper:
29
		Fister Jr., Iztok and Fister, Dusan and Yang, Xin-She. "A Hybrid Bat Algorithm". Elektrotehniski vestnik, 2013. 1-7.
30
31
	Attributes:
32
		Name (List[str]): List of strings representing algorithm name.
33
		F (float): Scaling factor.
34
		CR (float): Crossover.
35
36
	See Also:
37
		* :class:`NiaPy.algorithms.basic.BatAlgorithm`
38
	"""
39
	Name = ['HybridBatAlgorithm', 'HBA']
40
41
	@staticmethod
42
	def algorithmInfo():
43
		r"""Get basic information about the algorithm.
44
45
		Returns:
46
			str: Basic information.
47
		"""
48
		return r"""Fister Jr., Iztok and Fister, Dusan and Yang, Xin-She. "A Hybrid Bat Algorithm". Elektrotehniski vestnik, 2013. 1-7."""
49
50
	@staticmethod
51
	def typeParameters():
52
		r"""Get dictionary with functions for checking values of parameters.
53
54
		Returns:
55
			Dict[str, Callable]:
56
				* F (Callable[[Union[int, float]], bool]): Scaling factor.
57
				* CR (Callable[[float], bool]): Crossover probability.
58
59
		See Also:
60
			* :func:`NiaPy.algorithms.basic.BatAlgorithm.typeParameters`
61
		"""
62
		d = BatAlgorithm.typeParameters()
63
		d.update({
64
			'F': lambda x: isinstance(x, (int, float)) and x > 0,
65
			'CR': lambda x: isinstance(x, float) and 0 <= x <= 1
66
		})
67
		return d
68
69
	def setParameters(self, F=0.50, CR=0.90, CrossMutt=CrossBest1, **ukwargs):
70
		r"""Set core parameters of HybridBatAlgorithm algorithm.
71
72
		Arguments:
73
			F (Optional[float]): Scaling factor.
74
			CR (Optional[float]): Crossover.
75
76
		See Also:
77
			* :func:`NiaPy.algorithms.basic.BatAlgorithm.setParameters`
78
		"""
79
		BatAlgorithm.setParameters(self, **ukwargs)
80
		self.F, self.CR, self.CrossMutt = F, CR, CrossMutt
81
82
	def localSearch(self, best, task, i, Sol, **kwargs):
83
		r"""Improve the best solution.
84
85
		Args:
86
			best (numpy.ndarray): Global best individual.
87
			task (Task): Optimization task.
88
			i (int): Index of current individual.
89
			Sol (numpy.ndarray): Current best population.
90
			**kwargs (Dict[str, Any]):
91
92
		Returns:
93
			numpy.ndarray: New solution based on global best individual.
94
		"""
95
		return task.repair(self.CrossMutt(Sol, i, best, self.F, self.CR, rnd=self.Rand), rnd=self.Rand)
96
97
# vim: tabstop=3 noexpandtab shiftwidth=3 softtabstop=3
98