def init(self, task): r"""Initialize dynamic arguments of Particle Swarm Optimization algorithm. Args: task (Task): Optimization task. Returns: Dict[str, numpy.ndarray]: * vMin: Mininal velocity. * vMax: Maximal velocity. * V: Initial velocity of particle. * flag: Refresh gap counter. """ return { 'min_velocity': full_array(self.vMin, task.D), 'max_velocity': full_array(self.vMax, task.D), 'v': np.full([self.NP, task.D], 0.0), 'flag': np.full(self.NP, 0), 'pc': np.asarray([ .05 + .45 * (np.exp(10 * (i - 1) / (self.NP - 1)) - 1) / (np.exp(10) - 1) for i in range(self.NP) ]) }
def test_range(self): self.assertTrue( np.array_equal( full_array(self.Upper, self.D) - full_array(self.Lower, self.D), self.task.bRange)) self.assertTrue( np.array_equal( full_array(self.Upper, self.D) - full_array(self.Lower, self.D), self.task.range()))
def init(self, task): r"""Initialize dynamic parameters of algorithm. Args: task (Task): Optimization task. Returns: Tuple[numpy.ndarray, numpy.ndarray, numpy.ndarray] 1. Array of `self.alpha` propagated values 2. Array of `self.gamma` propagated values 3. Array of `self.theta` propagated values """ return full_array(self.alpha, self.NP), full_array(self.gamma, self.NP), full_array(self.theta, self.NP)
def init_ranges(self, task): r"""Initialize ranges. Args: task (Task): Optimization task. Returns: Tuple[numpy.ndarray, numpy.ndarray, numpy.ndarray]: 1. Initial amplitude values over dimensions. 2. Final amplitude values over dimensions. 3. uAmin. """ Ainit, Afinal = full_array(self.Ainit, task.D), full_array(self.Afinal, task.D) return Ainit, Afinal, self.uAmin(Ainit, Afinal, task)
def init_amplitude(self, task): r"""Initialize amplitudes for dimensions. Args: task (Task): Optimization task. Returns: numpy.ndarray: Starting amplitudes. """ return full_array(self.A, task.D)
def init(self, task): r"""Initialize dynamic arguments of Particle Swarm Optimization algorithm. Args: task (Task): Optimization task. Returns: Dict[str, Union[float, numpy.ndarray]]: * w (numpy.ndarray): Inertial weight. * vMin (numpy.ndarray): Minimal velocity. * vMax (numpy.ndarray): Maximal velocity. * V (numpy.ndarray): Initial velocity of particle. """ return { 'w': full_array(self.w, task.D), 'min_velocity': full_array(self.vMin, task.D), 'max_velocity': full_array(self.vMax, task.D), 'v': np.full([self.NP, task.D], 0.0) }
def test_a_int_array2_fine(self): a = [25 + i for i in range(10)] A = full_array(np.asarray(a), 13) a.extend([25 + i for i in range(3)]) self.assertTrue(np.array_equal(A, np.asarray(a)))
def test_is_feasible(self): self.assertFalse(self.task.is_feasible(full_array([1, 2, 3], self.D)))
def test_a_int_array3_fine(self): a = [25 + i for i in range(10)] A = full_array(np.asarray(a), 9) a.remove(34) self.assertTrue(np.array_equal(A, np.asarray(a)))
def test_upper(self): self.assertTrue( np.array_equal(full_array(self.Upper, self.D), self.task.Upper)) self.assertTrue( np.array_equal(full_array(self.Upper, self.D), self.task.upper()))
def test_lower(self): self.assertTrue( np.array_equal(full_array(self.Lower, self.D), self.task.Lower)) self.assertTrue( np.array_equal(full_array(self.Lower, self.D), self.task.lower()))
def setUp(self): self.D, self.NP, self.F, self.CR, self.p = 10, 100, 0.5, 0.5, 0.25 self.Upper, self.Lower = full_array(100, self.D), full_array(-100, self.D) self.evalFun = Sphere().function()
def test_a_float_list3_fine(self): a = [25.25 + i for i in range(10)] A = full_array(a, 9) a.remove(34.25) self.assertTrue(np.array_equal(A, np.asarray(a)))
def test_a_float_array1_fine(self): a = [25.25 + i for i in range(10)] A = full_array(np.asarray(a), 15) a.extend([25.25 + i for i in range(5)]) self.assertTrue(np.array_equal(A, np.asarray(a)))
def test_a_int_array_fine(self): a = np.asarray([25 for i in range(10)]) A = full_array(a, 10) self.assertTrue(np.array_equal(A, np.full(10, 25)))
def generate_individual(self, D, upper, lower): arr_upper, arr_lower = full_array(upper, D), full_array(lower, D) return arr_lower + rnd.rand(D) * (arr_upper - arr_lower)
def setUp(self): self.D = 10 self.Upper, self.Lower = full_array(10, self.D), full_array(-10, self.D) self.met = limit_repair
def test_a_float_list_fine(self): a = [25.25 for i in range(10)] A = full_array(a, 10) self.assertTrue(np.array_equal(A, np.full(10, 25.25)))
def test_a_int_fine(self): A = full_array(25, 10) self.assertTrue(np.array_equal(A, np.full(10, 25)))