Esempio n. 1
0
    def test_restricted_mating_selection(self):
        np.random.seed(200)
        selection = RestrictedMating(func_comp=comp_by_cv_dom_then_random)

        problem = C3DTLZ4(n_var=12, n_obj=3)
        ca_x = np.loadtxt(path_to_test_resources('ctaea', 'c3dtlz4', 'case2', 'preCA.x'))
        CA = Population.create(ca_x)
        self.evaluator.eval(problem, CA)

        da_x = np.loadtxt(path_to_test_resources('ctaea', 'c3dtlz4', 'case2', 'preDA.x'))
        DA = Population.create(da_x)
        self.evaluator.eval(problem, DA)

        Hm = CA.merge(DA)
        n_pop = len(CA)

        _, rank = NonDominatedSorting().do(Hm.get('F'), return_rank=True)

        Pc = (rank[:n_pop] == 0).sum()/len(Hm)
        Pd = (rank[n_pop:] == 0).sum()/len(Hm)

        P = selection.do(Hm, len(CA))

        assert P.shape == (91, 2)
        if Pc > Pd:
            assert (P[:, 0] < n_pop).all()
        else:
            assert (P[:, 0] >= n_pop).all()
        assert (P[:, 1] >= n_pop).any()
        assert (P[:, 1] < n_pop).any()
Esempio n. 2
0
    def test_update(self):
        problem = C3DTLZ4(n_var=12, n_obj=3)
        ca_x = np.loadtxt(
            path_to_test_resources('ctaea', 'c3dtlz4', 'case2', 'preCA.x'))
        CA = Population.create(ca_x)
        self.evaluator.eval(problem, CA)

        da_x = np.loadtxt(
            path_to_test_resources('ctaea', 'c3dtlz4', 'case2', 'preDA.x'))
        DA = Population.create(da_x)
        self.evaluator.eval(problem, DA)

        off_x = np.loadtxt(
            path_to_test_resources('ctaea', 'c3dtlz4', 'case2', 'offspring.x'))
        off = Population.create(off_x)
        self.evaluator.eval(problem, off)

        post_ca_x = np.loadtxt(
            path_to_test_resources('ctaea', 'c3dtlz4', 'case2', 'postCA.x'))
        true_pCA = Population.create(post_ca_x)
        self.evaluator.eval(problem, true_pCA)

        post_da_x = np.loadtxt(
            path_to_test_resources('ctaea', 'c3dtlz4', 'case2', 'postDA.x'))
        true_pDA = Population.create(post_da_x)
        self.evaluator.eval(problem, true_pDA)

        survival = CADASurvival(self.ref_dirs)
        mixed = Population.merge(CA, off)
        survival.ideal_point = np.array([0., 0., 0.])

        pCA, pDA = survival.do(problem, mixed, DA, len(self.ref_dirs))

        pCA_X = set([tuple(x) for x in pCA.get("X")])
        tpCA_X = set([tuple(x) for x in true_pCA.get("X")])

        pDA_X = set([tuple(x) for x in pDA.get("X")])
        tpDA_X = set([tuple(x) for x in true_pDA.get("X")])

        assert pCA_X == tpCA_X
        assert pDA_X == tpDA_X
Esempio n. 3
0
    def test_update_ca(self):
        problem = C1DTLZ3(n_var=12, n_obj=3)
        ca_x = np.loadtxt(path_to_test_resources('ctaea', 'c1dtlz3', 'case3', 'preCA.x'))
        CA = Population.create(ca_x)
        self.evaluator.eval(problem, CA)

        da_x = np.loadtxt(path_to_test_resources('ctaea', 'c1dtlz3', 'case3', 'preDA.x'))
        DA = Population.create(da_x)
        self.evaluator.eval(problem, DA)

        off_x = np.loadtxt(path_to_test_resources('ctaea', 'c1dtlz3', 'case3', 'offspring.x'))
        off = Population.create(off_x)
        self.evaluator.eval(problem, off)

        post_ca_x = np.loadtxt(path_to_test_resources('ctaea', 'c1dtlz3', 'case3', 'postCA.x'))
        true_pCA = Population.create(post_ca_x)
        self.evaluator.eval(problem, true_pCA)

        survival = CADASurvival(self.ref_dirs)
        mixed = CA.merge(off)
        survival.ideal_point = np.min(np.vstack((DA.get("F"), mixed.get("F"))), axis=0)

        pCA = survival._updateCA(mixed, len(self.ref_dirs))

        pX = set([tuple(x) for x in pCA.get("X")])
        tpX = set([tuple(x) for x in true_pCA.get("X")])
        assert pX == tpX

        problem = C1DTLZ1(n_var=9, n_obj=3)
        ca_x = np.loadtxt(path_to_test_resources('ctaea', 'c1dtlz1', 'preCA.x'))
        CA = Population.create(ca_x)
        self.evaluator.eval(problem, CA)

        da_x = np.loadtxt(path_to_test_resources('ctaea', 'c1dtlz1', 'preDA.x'))
        DA = Population.create(da_x)
        self.evaluator.eval(problem, DA)

        off_x = np.loadtxt(path_to_test_resources('ctaea', 'c1dtlz1', 'offspring.x'))
        off = Population.create(off_x)
        self.evaluator.eval(problem, off)

        post_ca_x = np.loadtxt(path_to_test_resources('ctaea', 'c1dtlz1', 'postCA.x'))
        true_pCA = Population.create(post_ca_x)
        self.evaluator.eval(problem, true_pCA)

        survival = CADASurvival(self.ref_dirs)
        mixed = CA.merge(off)
        survival.ideal_point = np.min(np.vstack((DA.get("F"), mixed.get("F"))), axis=0)

        pCA = survival._updateCA(mixed, len(self.ref_dirs))

        pX = set([tuple(x) for x in pCA.get("X")])
        tpX = set([tuple(x) for x in true_pCA.get("X")])
        assert pX == tpX

        problem = C3DTLZ4(n_var=12, n_obj=3)
        ca_x = np.loadtxt(path_to_test_resources('ctaea', 'c3dtlz4', 'case1', 'preCA.x'))
        CA = Population.create(ca_x)
        self.evaluator.eval(problem, CA)

        da_x = np.loadtxt(path_to_test_resources('ctaea', 'c3dtlz4', 'case1', 'preDA.x'))
        DA = Population.create(da_x)
        self.evaluator.eval(problem, DA)

        off_x = np.loadtxt(path_to_test_resources('ctaea', 'c3dtlz4', 'case1', 'offspring.x'))
        off = Population.create(off_x)
        self.evaluator.eval(problem, off)

        post_ca_x = np.loadtxt(path_to_test_resources('ctaea', 'c3dtlz4', 'case1', 'postCA.x'))
        true_pCA = Population.create(post_ca_x)
        self.evaluator.eval(problem, true_pCA)

        survival = CADASurvival(self.ref_dirs)
        mixed = CA.merge(off)
        survival.ideal_point = np.min(np.vstack((DA.get("F"), mixed.get("F"))), axis=0)

        pCA = survival._updateCA(mixed, len(self.ref_dirs))

        pX = set([tuple(x) for x in pCA.get("X")])
        tpX = set([tuple(x) for x in true_pCA.get("X")])
        assert pX == tpX