Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
    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)
Ejemplo n.º 4
0
    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]))