Code Duplication    Length = 31-31 lines in 2 locations

NiaPy/algorithms/basic/pso.py 2 locations

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