Code Duplication    Length = 31-31 lines in 2 locations

NiaPy/algorithms/basic/pso.py 2 locations

@@ 736-766 (lines=31) @@
733
		d.update({'nmutt': self.nmutt})
734
		return d
735
736
	def runIteration(self, task, pop, fpop, xb, fxb, **dparams):
737
		r"""Core function of algorithm.
738
739
		Args:
740
			task (Task): Optimization task.
741
			pop (numpy.ndarray): Current population of particles.
742
			fpop (numpy.ndarray): Current particles function/fitness values.
743
			xb (numpy.ndarray): Current global best particle.
744
			fxb (float: Current global best particles function/fitness value.
745
			**dparams: Additional arguments.
746
747
		Returns:
748
			Tuple[np.ndarray, np.ndarray, np.ndarray, float, dict]:
749
			1. New population of particles.
750
			2. New populations function/fitness values.
751
			3. New global best particle.
752
			4. New global best particle function/fitness value.
753
			5. Additional arguments.
754
755
		See Also:
756
			* :func:`NiaPy.algorithm.basic.WeightedVelocityClampingParticleSwarmAlgorithm.runIteration`
757
		"""
758
		pop, fpop, xb, fxb, d = CenterParticleSwarmOptimization.runIteration(self, task, pop, fpop, xb, fxb, **dparams)
759
		v = d['V']
760
		v_a = (np.sum(v, axis=0) / len(v))
761
		v_a = v_a / np.max(np.abs(v_a))
762
		for _ in range(self.nmutt):
763
			g = task.repair(xb + v_a * self.uniform(task.Lower, task.Upper), self.Rand)
764
			fg = task.eval(g)
765
			if fg <= fxb: xb, fxb = g, fg
766
		return pop, fpop, xb, fxb, d
767
768
class MutatedCenterUnifiedParticleSwarmOptimization(MutatedCenterParticleSwarmOptimization):
769
	r"""Implementation of Mutated Particle Swarm Optimization.
@@ 639-669 (lines=31) @@
636
		d.update({'nmutt': self.nmutt})
637
		return d
638
639
	def runIteration(self, task, pop, fpop, xb, fxb, **dparams):
640
		r"""Core function of algorithm.
641
642
		Args:
643
			task (Task): Optimization task.
644
			pop (numpy.ndarray): Current population of particles.
645
			fpop (numpy.ndarray): Current particles function/fitness values.
646
			xb (numpy.ndarray): Current global best particle.
647
			fxb (float): Current global best particles function/fitness value.
648
			**dparams: Additional arguments.
649
650
		Returns:
651
			Tuple[np.ndarray, np.ndarray, np.ndarray, float, dict]:
652
			1. New population of particles.
653
			2. New populations function/fitness values.
654
			3. New global best particle.
655
			4. New global best particle function/fitness value.
656
			5. Additional arguments.
657
658
		See Also:
659
			* :func:`NiaPy.algorithm.basic.WeightedVelocityClampingParticleSwarmAlgorithm.runIteration`
660
		"""
661
		pop, fpop, xb, fxb, d = ParticleSwarmAlgorithm.runIteration(self, task, pop, fpop, xb, fxb, **dparams)
662
		v = d['V']
663
		v_a = (np.sum(v, axis=0) / len(v))
664
		v_a = v_a / np.max(np.abs(v_a))
665
		for _ in range(self.nmutt):
666
			g = task.repair(xb + v_a * self.uniform(task.Lower, task.Upper), self.Rand)
667
			fg = task.eval(g)
668
			if fg <= fxb: xb, fxb = g, fg
669
		return pop, fpop, xb, fxb, d
670
671
class MutatedCenterParticleSwarmOptimization(CenterParticleSwarmOptimization):
672
	r"""Implementation of Mutated Particle Swarm Optimization.