def test_clone(self): """ Should create a new generation by copying the fittest indivuals in the current generation """ fit0 = [1, 2, 3, 4] pop = Population(individuals=fit0, fitness=fit0) sumfit = [] for i in range(100): pop.clone() sumfit.append(np.sum(pop.fitness)) self.assertGreater(np.max(sumfit), np.sum(fit0)) # should not change shape of 1d array ind0 = np.random.rand(50) pop = Population(individuals=ind0, fitness=range(50)) pop.clone() self.assertEqual(pop.individuals.shape, ind0.shape) # should not change shape of multi-d array ind0 = np.random.rand(50, 5) pop = Population(individuals=ind0, fitness=range(50)) pop.clone() self.assertEqual(pop.individuals.shape, ind0.shape) # should not produce NaNs ind0 = np.round(np.random.rand(100)) pop = Population(individuals=ind0) for p in range(100): pop.clone() self.assertEqual(len(np.nonzero(np.isnan(pop.individuals))[0]), 0)