optimize function reproduce for time usage
This commit is contained in:
@@ -2,7 +2,6 @@ from typing import List, Union, Tuple, Callable
|
|||||||
import time
|
import time
|
||||||
|
|
||||||
import jax
|
import jax
|
||||||
import jax.numpy as jnp
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
from .species import SpeciesController
|
from .species import SpeciesController
|
||||||
@@ -19,6 +18,7 @@ class Pipeline:
|
|||||||
def __init__(self, config, seed=42):
|
def __init__(self, config, seed=42):
|
||||||
self.generation_timestamp = time.time()
|
self.generation_timestamp = time.time()
|
||||||
self.randkey = jax.random.PRNGKey(seed)
|
self.randkey = jax.random.PRNGKey(seed)
|
||||||
|
np.random.seed(seed)
|
||||||
|
|
||||||
self.config = config
|
self.config = config
|
||||||
self.N = config.basic.init_maximum_nodes
|
self.N = config.basic.init_maximum_nodes
|
||||||
@@ -34,9 +34,6 @@ class Pipeline:
|
|||||||
self.generation = 0
|
self.generation = 0
|
||||||
self.species_controller.init_speciate(self.pop_nodes, self.pop_connections)
|
self.species_controller.init_speciate(self.pop_nodes, self.pop_connections)
|
||||||
|
|
||||||
# self.species_controller.speciate(self.pop_nodes, self.pop_connections,
|
|
||||||
# self.generation, self.o2o_distance, self.o2m_distance)
|
|
||||||
|
|
||||||
self.best_fitness = float('-inf')
|
self.best_fitness = float('-inf')
|
||||||
|
|
||||||
def ask(self, batch: bool):
|
def ask(self, batch: bool):
|
||||||
|
|||||||
@@ -239,7 +239,9 @@ class SpeciesController:
|
|||||||
self.species = {}
|
self.species = {}
|
||||||
# int -> idx in the pop_nodes, pop_connections of elitism
|
# int -> idx in the pop_nodes, pop_connections of elitism
|
||||||
# (int, int) -> the father and mother idx to be crossover
|
# (int, int) -> the father and mother idx to be crossover
|
||||||
|
|
||||||
crossover_pair: List[Union[int, Tuple[int, int]]] = []
|
crossover_pair: List[Union[int, Tuple[int, int]]] = []
|
||||||
|
|
||||||
for spawn, s in zip(spawn_amounts, remaining_species):
|
for spawn, s in zip(spawn_amounts, remaining_species):
|
||||||
assert spawn >= self.genome_elitism
|
assert spawn >= self.genome_elitism
|
||||||
|
|
||||||
@@ -264,10 +266,8 @@ class SpeciesController:
|
|||||||
# only use good genomes to crossover
|
# only use good genomes to crossover
|
||||||
sorted_members = sorted_members[:repro_cutoff]
|
sorted_members = sorted_members[:repro_cutoff]
|
||||||
|
|
||||||
# Randomly choose parents and produce the number of offspring allotted to the species.
|
list_idx1, list_idx2 = np.random.choice(len(sorted_members), size=(2, spawn), replace=True)
|
||||||
for _ in range(spawn):
|
for c1, c2 in zip(list_idx1, list_idx2):
|
||||||
# allow to replace, for the case that the species only has one genome
|
|
||||||
c1, c2 = np.random.choice(len(sorted_members), size=2, replace=True)
|
|
||||||
idx1, fitness1 = sorted_members[c1], sorted_fitnesses[c1]
|
idx1, fitness1 = sorted_members[c1], sorted_fitnesses[c1]
|
||||||
idx2, fitness2 = sorted_members[c2], sorted_fitnesses[c2]
|
idx2, fitness2 = sorted_members[c2], sorted_fitnesses[c2]
|
||||||
if fitness1 >= fitness2:
|
if fitness1 >= fitness2:
|
||||||
|
|||||||
Reference in New Issue
Block a user