Example #1
0
 def nominate_delegates(self):
     return [
         x.v for x in list(
             paretofront_layers(
                 self.individuals, lambda indv: self.driver.
                 calculate_objectives(indv)))[0]
     ]
Example #2
0
    def test_paretofront_layers_moremore(self):
        """ Previous tests were not enough, some errors did show in e.g. kursawe. """

        def mk_indiv():
            return [random.uniform(a, b) for a, b in kursawe.dims]

        def eval_fits(indiv):
            return indiv, [f(indiv) for f in kursawe.fitnesses]

        random.seed()
        pop = [eval_fits(mk_indiv()) for _ in range(400)]
        layers = paretofront_layers(pop, operator.itemgetter(1))
        for layA, layB in itertools.combinations(layers, 2):
            for indA_1, indA_2 in itertools.product(layA, repeat=2):
                try:
                    self.assertEqual(0, domination_cmp(indA_1[1], indA_2[1]))
                except AssertionError as e:
                    print("ERR!\n\nA = {0}\nB = {1}\nf(A) = {2}\nf(B) = {3}".format(indA_1[0],
                                                                                    indA_2[0],
                                                                                    indA_1[1],
                                                                                    indA_2[1]))
                    raise e
            for indA in layA:
                for indB in layB:
                    try:
                        self.assertFalse(dominates(indB[1], indA[1]))
                    except AssertionError as e:
                        print("ERR!\n\nA = {0}\nB = {1}\nf(A) = {2}\nf(B) = {3}".format(indA[0],
                                                                                        indB[0],
                                                                                        indA[1],
                                                                                        indB[1]))
                        raise e
Example #3
0
        def emigrate(self):
            logger = logging.getLogger(__name__)

            def fitfun_res(ind):
                return [f(ind) for f in self.outer.fitnesses]

            current_population = self.driver.population

            refugees = []
            for _ in range(self.outer.migrants_number):
                pareto_layers = [
                    l
                    for l in ea_utils.paretofront_layers(current_population,
                                                         fitfun_res=fitfun_res)
                ]

                weights = [1 / (i + 1) for i in range(len(pareto_layers))]

                chosen_layer = weighted_choice(zip(pareto_layers, weights))

                refugee = random.choice(chosen_layer)
                refugees.append(refugee)
                if refugee not in current_population:
                    logger.error("DUPA WSZECHCZASÓW")
                current_population.remove(refugee)

            logger.debug("after emigrate: " + str(len(self.driver.population)))

            self.all_refugees.extend(refugees)
            return self.driver.message_adapter.emigrate(refugees)
Example #4
0
    def test_paretofront_layers_even_more(self):
        fitnesses = [lambda xs: (xs[0] - 2) ** 2, lambda xs: (xs[1] + 3) ** 2]

        def fits(xs):
            return [f(xs) for f in fitnesses]

        random.seed()
        mkd = lambda: random.choice([0, 1, 2, 3])
        #noinspection PyUnusedLocal
        pop = [[mkd() for j in range(3)]
               for i in range(1000)]
        res = paretofront_layers(pop, fits)
        ind_a = [2, 3, 2]
        ind_b = [2, 2, 1]
        self.assertNotEqual(0, domination_cmp(fits(ind_a), fits(ind_b)))
        self.assertNotEqual(0, domination_cmp(fits(ind_b), fits(ind_a)))
        for layer in res:
            for ind_a, ind_b in itertools.combinations(layer, 2):
                fa, fb = fits(ind_a), fits(ind_b)
                self.assertEqual(0, domination_cmp(fa, fb))
                self.assertEqual(0, domination_cmp(fa, fa))
                self.assertEqual(0, domination_cmp(fb, fb))
                self.assertFalse(dominates(fa, fb))
                self.assertFalse(dominates(fa, fa))
                self.assertFalse(dominates(fb, fb))
Example #5
0
    def test_paretofront_layers_moremore(self):
        """ Previous tests were not enough, some errors did show in e.g. kursawe. """
        def mk_indiv():
            return [random.uniform(a, b) for a, b in kursawe.dims]

        def eval_fits(indiv):
            return indiv, [f(indiv) for f in kursawe.fitnesses]

        random.seed()
        pop = [eval_fits(mk_indiv()) for _ in range(400)]
        layers = paretofront_layers(pop, operator.itemgetter(1))
        for layA, layB in itertools.combinations(layers, 2):
            for indA_1, indA_2 in itertools.product(layA, repeat=2):
                try:
                    self.assertEqual(0, domination_cmp(indA_1[1], indA_2[1]))
                except AssertionError as e:
                    print("ERR!\n\nA = {0}\nB = {1}\nf(A) = {2}\nf(B) = {3}".
                          format(indA_1[0], indA_2[0], indA_1[1], indA_2[1]))
                    raise e
            for indA in layA:
                for indB in layB:
                    try:
                        self.assertFalse(dominates(indB[1], indA[1]))
                    except AssertionError as e:
                        print(
                            "ERR!\n\nA = {0}\nB = {1}\nf(A) = {2}\nf(B) = {3}".
                            format(indA[0], indB[0], indA[1], indB[1]))
                        raise e
Example #6
0
def rank(individuals: "Iterator Individual", calc_objective):
    """
    :param individuals: Grupa indywiduów.
    :param calc_objective: Określa jak otrzymać wektor wyników.
    :return: Itertator: posortowane dane wejściowe od najlepszych do najgorszych.
    """
    return iter(indiv
                for eqv_class in paretofront_layers(individuals,
                                                    fitfun_res=calc_objective)
                for indiv in eqv_class)
Example #7
0
    def test_paretofront_layers(self):
        def identity(x):
            return [x]

        indvs = [[0, 0], [1, 1], [0, 1], [1, 0], [1, 1]]
        res = list(paretofront_layers(indvs, identity))
        self.assertEqual(sum(len(layer) for layer in res), len(indvs))
        self.assertListEqual(res[0], [[0, 0]])
        self.assertTrue([0, 1] in res[1])
        self.assertTrue([1, 0] in res[2])
        self.assertListEqual(res[3], [[1, 1], [1, 1]])
Example #8
0
def rank(individuals: 'Iterator Individual', calc_objective):
    """
    :param individuals: Grupa indywiduów.
    :param calc_objective: Określa jak otrzymać wektor wyników.
    :return: Itertator: posortowane dane wejściowe od najlepszych do najgorszych.
    """
    return iter(indiv
                for eqv_class
                in paretofront_layers(individuals,
                                      fitfun_res=calc_objective)
                for indiv
                in eqv_class
    )
Example #9
0
    def test_paretofront_layers(self):
        def identity(x):
            return [x]

        indvs = [[0, 0], [1, 1], [0, 1], [1, 0], [1, 1]]
        res = list(paretofront_layers(indvs, identity))
        self.assertEqual(sum(len(layer)
                             for layer in res),
                         len(indvs))
        self.assertListEqual(res[0], [[0, 0]])
        self.assertTrue([0, 1] in res[1])
        self.assertTrue([1, 0] in res[2])
        self.assertListEqual(res[3], [[1, 1], [1, 1]])
Example #10
0
    def test_paretofront_layers_even_more(self):
        fitnesses = [lambda xs: (xs[0] - 2)**2, lambda xs: (xs[1] + 3)**2]

        def fits(xs):
            return [f(xs) for f in fitnesses]

        random.seed()
        mkd = lambda: random.choice([0, 1, 2, 3])
        #noinspection PyUnusedLocal
        pop = [[mkd() for j in range(3)] for i in range(1000)]
        res = paretofront_layers(pop, fits)
        ind_a = [2, 3, 2]
        ind_b = [2, 2, 1]
        self.assertNotEqual(0, domination_cmp(fits(ind_a), fits(ind_b)))
        self.assertNotEqual(0, domination_cmp(fits(ind_b), fits(ind_a)))
        for layer in res:
            for ind_a, ind_b in itertools.combinations(layer, 2):
                fa, fb = fits(ind_a), fits(ind_b)
                self.assertEqual(0, domination_cmp(fa, fb))
                self.assertEqual(0, domination_cmp(fa, fa))
                self.assertEqual(0, domination_cmp(fb, fb))
                self.assertFalse(dominates(fa, fb))
                self.assertFalse(dominates(fa, fa))
                self.assertFalse(dominates(fb, fb))
Example #11
0
 def nominate_delegates(self):
     return [x.v for x in
         list(paretofront_layers(self.individuals, lambda indv: self.driver.calculate_objectives(indv)))[
         0]]