Code Duplication    Length = 31-31 lines in 2 locations

NiaPy/algorithms/basic/pso.py 2 locations

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