def select_cluster_combinations( self, cluster1: Cluster, cluster2: Cluster, genome_count: int ) -> List[Tuple[StorageGenome]]: """ :param cluster1: Cluster to choose 1 :param cluster2: Cluster to choose 2 :param genome_count: int number of seats which should be filled :return: List[Tuple[StorageGenome]] combination from given cluster """ genomes1 = self.get_genomes_in_cluster(cluster1.cluster_id) genomes2 = self.get_genomes_in_cluster(cluster2.cluster_id) g1 = weighted_choice_range(genomes1, genome_count) g2 = weighted_choice_range(genomes2, genome_count) return list(zip(g1, g2))
def select_genomes_for_breeding(self, breeding_percentage: float) -> List[Tuple[StorageGenome, StorageGenome]]: """ Selects genomes for breeding currently best two from all Clusters :type breeding_percentage: float :return: tuple(Storage) """ result = [] for cluster in self.cluster_repository.get_current_clusters(): genome_one = self.get_genomes_in_cluster(cluster.cluster_id) genome_two = genome_one seats_to_mutation = int(cluster.offspring * breeding_percentage) result.extend( list( zip( weighted_choice_range(genome_one, seats_to_mutation), weighted_choice_range(genome_two, seats_to_mutation), ) ) ) return result
def select_genomes_for_mutation(self, mutation_percentage: float) -> List[StorageGenome]: """ Selects genome for mutation currently the best from all Clusters :param mutation_percentage: float :return: StorageGenome the most fit """ result = [] for cluster in self.cluster_repository.get_current_clusters(): step = self.get_genomes_in_cluster(cluster.cluster_id) seats_to_mutation = int(cluster.offspring * mutation_percentage) result.extend(weighted_choice_range(step, seats_to_mutation)) return result