def test_uniform_crossover_all(self): self.indiv1, self.indiv2 = Genotype.xover_genes(self.indiv1, self.indiv2, cxpb=1) indiv1_allchanged = not any([ np.allclose(self.indiv1[0].mean, np.array([0, 0])), np.allclose(self.indiv1[0].cov, np.array([[1, 0], [0, 1]])), np.allclose(self.indiv1[1].mean, np.array([5, 5])), np.allclose(self.indiv1[1].cov, np.array([[5, 0], [0, 10]])) ]) self.assertTrue(indiv1_allchanged)
def test_views_swap_all_genes(self): orig_all_vals = np.copy(self.indiv2.all_values) self.indiv1, self.indiv2 = Genotype.xover_genes(self.indiv1, self.indiv2, cxpb=1) self.indiv1.recreate_views() self.indiv1.resample_values() close = np.allclose(self.indiv1.all_values, orig_all_vals) self.assertTrue(close)
def test_uniform_crossover_none(self): self.indiv1, self.indiv2 = Genotype.xover_genes(self.indiv1, self.indiv2, mixing_ratio=0.0) indiv1_unchanged = all([ np.allclose(self.indiv1[0].mean, np.array([0, 0])), np.allclose(self.indiv1[0].cov, np.array([[1, 0], [0, 1]])), np.allclose(self.indiv1[1].mean, np.array([5, 5])), np.allclose(self.indiv1[1].cov, np.array([[5, 0], [0, 10]])) ]) self.assertTrue(indiv1_unchanged)
def test_uniform_crossover_genes(self): # Get the sequence of the numbers to be generated rng = np.random.RandomState(42) swaps = [ True if rng.rand() < 0.5 else False for _ in range(len(self.indiv1) * 2) ] indiv1_means = [i.mean for i in self.indiv1] indiv2_means = [i.mean for i in self.indiv2] indiv1_covs = [i.cov for i in self.indiv1] indiv2_covs = [i.cov for i in self.indiv2] Genotype.global_rng = np.random.RandomState(42) self.indiv1, self.indiv2 = Genotype.xover_genes(self.indiv1, self.indiv2, mixing_ratio=0.5) # Test means for i, (clust1, clust2, swap) in enumerate(zip(self.indiv1, self.indiv2, swaps[0::2])): with self.subTest(i=i): if swap: self.assertTrue( np.array_equal(clust1.mean, indiv2_means[i])) self.assertTrue( np.array_equal(clust2.mean, indiv1_means[i])) else: self.assertTrue( np.array_equal(clust1.mean, indiv1_means[i])) self.assertTrue( np.array_equal(clust2.mean, indiv2_means[i])) # Test covs for i, (clust1, clust2, swap) in enumerate(zip(self.indiv1, self.indiv2, swaps[1::3])): with self.subTest(i=i): if swap: self.assertTrue(np.array_equal(clust1.cov, indiv2_covs[i])) self.assertTrue(np.array_equal(clust2.cov, indiv1_covs[i])) else: self.assertTrue(np.array_equal(clust1.cov, indiv1_covs[i])) self.assertTrue(np.array_equal(clust2.cov, indiv2_covs[i]))