Ejemplo n.º 1
0
    def initialize_population(self, population=None, size=None):
        if population is not None:
            self.previous_generation = population
            self.max_id = len(population.keys())
        elif size is not None:
            self.max_id = self.config.POPULATION_SIZE
            pop_size = self.config.POPULATION_SIZE
            input_size = size[0]
            output_size = size[1]

            for genome_id in range(pop_size):
                genome = Genome(genome_id)

                node_id = 0
                # Input Nodes
                for _ in range(input_size):
                    node_gene = self.random.choice(self.node_classes)(node_id, NodeType.INPUT)
                    genome.add_node_gene(node_gene)
                    node_id += 1
                
                # Output Nodes
                for _ in range(output_size):
                    node_gene = self.random.choice(self.node_classes)(node_id, NodeType.OUTPUT)
                    genome.add_node_gene(node_gene)
                    node_id += 1
                
                # Connect each input to every other output
                for in_id in range(input_size):
                    for out_id in range(output_size):
                        connection = ConnectionGene(in_id, out_id + input_size, 1.0, True, self.innovator.next_innovation_number((in_id, out_id)))
                        genome.add_connection_gene(connection)

                self.previous_generation[genome_id] = genome
        else:
            raise ValueError("Invalid Parameters")
Ejemplo n.º 2
0
def generate_complete_genome(id, n, r, ir):
    g = Genome(id)

    for i in range(n):
        g.add_node_gene(TestNode(i, r.choice(list(NodeType))))

    for i in range(n):
        for j in range(i, n):
            w = r.random()
            a = r.random() < 0.7
            inr = ir.next_innovation_number((i, j))
            g.add_connection_gene(ConnectionGene(i, j, w, a, inr))

    return g
Ejemplo n.º 3
0
def generate_genome(id, n, r, ir):
    g = Genome(id)

    max_c = int(n * (n - 1) / 2)
    c = r.randint(max_c - 1, max_c)

    for i in range(n):
        g.add_node_gene(TestNode(i, r.choice(list(NodeType))))

    for _ in range(c):
        i = r.randint(0, n - 1)
        o = r.randint(0, n - 1)
        w = r.random()
        a = r.random() < 0.7
        inr = ir.next_innovation_number((i, o))
        g.add_connection_gene(ConnectionGene(i, o, w, a, inr))

    return g