示例#1
0
    def reproduce(self, winning_generation, **methods):
        crossover_generation = []
        next_generation = []
        mutator = EIS()
        if "keep_winners" not in methods:
            methods["keep_winners"] = False
        if "num_elites" in methods:
            elites = copy.deepcopy(winning_generation[:methods["num_elites"]])
        if methods["keep_winners"] == False:
            num_shuffles = 4
        elif "num_elites" in methods:
            num_shuffles = 4
            if methods["num_elites"] > len(winning_generation):
                raise ValueError(
                    "{0} is greater than generation size {1}".format(
                        methods["num_elites"], len(winning_generation)))
        else:
            num_shuffles = 2

        for i in range(0, num_shuffles):
            random.shuffle(winning_generation)
            for j in range(0, len(winning_generation), 2):
                original = copy.deepcopy(winning_generation[j])
                target = copy.deepcopy(winning_generation[j + 1])
                child = mutator.crossover(
                    original, target,
                    self.options["minimum_replacement_depth"])
                crossover_generation.append(child)

        for j in range(0, len(crossover_generation)):
            new_mutator = EIS()
            original = copy.deepcopy(crossover_generation[j])
            next_generation.append(
                new_mutator.mutation(
                    original,
                    max_mutant_size=self.options["maximum_mutation_size"],
                    min_depth=self.options["minimum_replacement_depth"]))
        if methods["keep_winners"] == True:
            if "num_elites" not in methods:
                next_generation += winning_generation
            else:
                next_generation[:methods["num_elites"]] = elites
        return next_generation
                        "left_series":{"left_element":"R", "right_element":"C"},
                        "right_paralell":{"left_series":{"right_element":"R", "left_element":"R"}, "right_element":"R"}},"right_element":"C"},
                        }
triple_randles={"root_series":{"left_paralell":{"left_element":"R", "right_element":"R"},
"right_series":
{"left_paralell":{"left_element":"R", "right_element":"R"}, "right_series":
{"left_paralell":{"left_element":"R", "right_element":"R"}, "right_paralell":{"left_element":"R", "right_element":"R"}}}}}


z=test.construct_dict_from_tree(triple_randles["root_series"], "root_series")

#print(test.random_circuit_tree(3))
random_tree=test.random_circuit_tree(4)
#top_key=list(random_tree.keys())[0]
#random_dict=test.construct_dict_from_tree(random_tree[top_key], top_key)
circuit_artist(test.translate_tree(random_tree))
top_key=test.get_top_key(random_tree)
#print(random_tree)
#print(random_dict)
#print(test.construct_circuit_from_tree_dict(random_dict))
import random
get_node=test.find_random_node(random_tree[top_key], random.randint(1, 4), random_tree)
new_tree=test.random_circuit_tree(3)
crossed_tree=test.crossover(random_tree, new_tree)
circuit_artist(test.translate_tree(crossed_tree))

#print("\n")
#print(new_tree)
#print(replace_tree)
#print(get_node)