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()
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
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