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