def generate_genome_given_graph(graph, connection_weights): genome = Genome(key='foo') unique_node_keys = [] input_nodes = [] for connection in graph: for node_key in connection: if node_key not in unique_node_keys: unique_node_keys.append(node_key) if node_key < 0: input_nodes.append(node_key) input_nodes = set(input_nodes) unique_node_keys = list( set(unique_node_keys + genome.get_output_nodes_keys()) - input_nodes) nodes = {} for node_key in unique_node_keys: node = NodeGene(key=node_key).random_initialization() node.set_mean(0) node.set_std(STD) nodes[node_key] = node connections = {} for connection_key, weight in zip(graph, connection_weights): connection = ConnectionGene(key=connection_key) connection.set_mean(weight) connection.set_std(STD) connections[connection_key] = connection genome.connection_genes = connections genome.node_genes = nodes return genome
def create_from_julia_dict(genome_dict: dict): config = get_configuration() genome = Genome(key=genome_dict["key"], id=None, genome_config=config) # reconstruct nodes and connections connection_genes_dict = genome_dict['connections'] for key_str, connection_gene_dict in connection_genes_dict.items(): connection_key = Genome._get_connection_key_from_key_str(key_str) connection_gene = ConnectionGene(key=connection_key) connection_gene.set_mean(connection_gene_dict['mean_weight']) connection_gene.set_std(connection_gene_dict['std_weight']) genome.connection_genes[connection_gene.key] = connection_gene node_genes_dict = genome_dict['nodes'] for key_str, node_gene_dict in node_genes_dict.items(): node_key = int(key_str) node_gene = NodeGene(key=node_key) node_gene.set_mean(node_gene_dict['mean_bias']) node_gene.set_std(node_gene_dict['std_bias']) genome.node_genes[node_gene.key] = node_gene genome.calculate_number_of_parameters() return genome
def add_node(self, key, mean=None, std=None): node = NodeGene(key=key) node.set_mean(mean) node.set_std(std) self.node_genes[key] = node