add init_speciate to accelerate the time cost of speciate in the first generation

This commit is contained in:
wls2002
2023-05-08 15:53:31 +08:00
parent e201d03157
commit 91206c796f
3 changed files with 20 additions and 4 deletions

View File

@@ -32,8 +32,10 @@ class Pipeline:
self.compile_functions(debug=True)
self.generation = 0
self.species_controller.speciate(self.pop_nodes, self.pop_connections,
self.generation, self.o2o_distance, self.o2m_distance)
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')

View File

@@ -45,6 +45,20 @@ class SpeciesController:
self.species_idxer = count(0)
self.species: Dict[int, Species] = {} # species_id -> species
def init_speciate(self, pop_nodes: NDArray, pop_connections: NDArray):
"""
speciate for the first generation
:param pop_connections:
:param pop_nodes:
:return:
"""
pop_size = pop_nodes.shape[0]
species_id = next(self.species_idxer)
s = Species(species_id, 0)
members = list(range(pop_size))
s.update((pop_nodes[0], pop_connections[0]), members)
self.species[species_id] = s
def speciate(self, pop_nodes: NDArray, pop_connections: NDArray, generation: int,
o2o_distance: Callable, o2m_distance: Callable) -> None:
"""

View File

@@ -23,8 +23,8 @@ def evaluate(forward_func: Callable) -> List[float]:
return fitnesses.tolist() # returns a list
# @using_cprofile
@partial(using_cprofile, root_abs_path='/mnt/e/neat-jax/', replace_pattern="/mnt/e/neat-jax/")
@using_cprofile
# @partial(using_cprofile, root_abs_path='/mnt/e/neat-jax/', replace_pattern="/mnt/e/neat-jax/")
def main():
config = Configer.load_config()
pipeline = Pipeline(config, seed=11323)