def generate_children(self, number_of_children, number_of_mutations, info, lookup, magnets, ref_trajectories, real_bfield=None): # first age, as we are now creating children self.age_bcell() children = [] # Generate the IDfiled for the parent, as we need to calculate it fully here. original_bfield = None original_fitness = None if real_bfield == None: original_bfield, original_fitness = fg.calculate_cached_trajectory_fitness(info, lookup, magnets, self.genome, ref_trajectories) fitness_error = abs(self.fitness - original_fitness) logging.debug("Estimated fitness to real fitness error %2.10e"%(fitness_error)) else : original_bfield = real_bfield original_fitness = fg.calculate_trajectory_fitness_from_array(original_bfield, info, ref_trajectories) fitness_error = abs(self.fitness - original_fitness) logging.debug("Using real bfield") original_magnets = fg.generate_per_magnet_array(info, self.maglist, magnets) maglist = copy.deepcopy(self.maglist) mutation_list = self.create_mutant(number_of_mutations) maglist.mutate_from_list(mutation_list) new_magnets = fg.generate_per_magnet_array(info, maglist, magnets) update = fg.compare_magnet_arrays(original_magnets, new_magnets, lookup) updated_bfield = np.array(original_bfield) for beam in update.keys() : if update[beam].size != 0: updated_bfield = updated_bfield - update[beam] self.fitness = fg.calculate_trajectory_fitness_from_array(updated_bfield, info, ref_trajectories) for i in range(number_of_children): maglist = copy.deepcopy(self.maglist) mutation_list = self.create_mutant(number_of_mutations) maglist.mutate_from_list(mutation_list) new_magnets = fg.generate_per_magnet_array(info, maglist, magnets) update = fg.compare_magnet_arrays(original_magnets, new_magnets, lookup) child = ID_Shim_BCell() child.mutations = number_of_mutations child.genome = mutation_list child.maglist = self.maglist updated_bfield = np.array(original_bfield) for beam in update.keys() : if update[beam].size != 0: updated_bfield = updated_bfield - update[beam] child.fitness = fg.calculate_trajectory_fitness_from_array(updated_bfield, info, ref_trajectories) children.append(child) logging.debug("Child created with fitness : %2.10e" % (child.fitness)) return children
def generate_children(self, number_of_children, number_of_mutations, info, lookup, magnets, ref_trajectories, real_bfield=None): # first age, as we are now creating children self.age_bcell() children = [] # Generate the IDfiled for the parent, as we need to calculate it fully here. original_bfield = None if real_bfield == None: original_bfield, calculated_fitness = fg.calculate_cached_trajectory_fitness( info, lookup, magnets, self.genome, ref_trajectories) fitness_error = abs(self.fitness - calculated_fitness) logging.debug("Estimated fitness to real fitness error %2.10e" % (fitness_error)) self.fitness = calculated_fitness else: original_bfield = real_bfield logging.debug("Using real bfield") original_magnets = fg.generate_per_magnet_array( info, self.genome, magnets) for i in range(number_of_children): maglist = copy.deepcopy(self.genome) available_magnets = { key: range(len(magnets.magnet_sets[key])) for key in magnets.magnet_sets.keys() } maglist.mutate(number_of_mutations, available_magnets) new_magnets = fg.generate_per_magnet_array(info, maglist, magnets) update = fg.compare_magnet_arrays(original_magnets, new_magnets, lookup) child = ID_BCell() child.mutations = number_of_mutations child.genome = maglist updated_bfield = np.array(original_bfield) for beam in update.keys(): if update[beam].size != 0: updated_bfield = updated_bfield - update[beam] child.fitness = fg.calculate_trajectory_fitness_from_array( updated_bfield, info, ref_trajectories) #child.create(info, lookup, magnets, maglist, ref_total_id_field) children.append(child) logging.debug("Child created with fitness : %f" % (child.fitness)) return children
def create(self, info, lookup, magnets, maglist, ref_trajectories, number_of_changes, original_bfield): self.maglist = maglist self.changes = number_of_changes self.create_genome(number_of_changes) maglist = copy.deepcopy(self.maglist) maglist.mutate_from_list(self.genome) new_magnets = fg.generate_per_magnet_array(info, maglist, magnets) original_magnets = fg.generate_per_magnet_array(info, self.maglist, magnets) update = fg.compare_magnet_arrays(original_magnets, new_magnets, lookup) updated_bfield = np.array(original_bfield) for beam in update.keys() : if update[beam].size != 0: updated_bfield = updated_bfield - update[beam] self.fitness = fg.calculate_trajectory_fitness_from_array(updated_bfield, info, ref_trajectories)
def create(self, info, lookup, magnets, maglist, ref_trajectories, number_of_changes, original_bfield): self.maglist = maglist self.changes = number_of_changes self.create_genome(number_of_changes) maglist = copy.deepcopy(self.maglist) maglist.mutate_from_list(self.genome) new_magnets = fg.generate_per_magnet_array(info, maglist, magnets) original_magnets = fg.generate_per_magnet_array( info, self.maglist, magnets) update = fg.compare_magnet_arrays(original_magnets, new_magnets, lookup) updated_bfield = np.array(original_bfield) for beam in update.keys(): if update[beam].size != 0: updated_bfield = updated_bfield - update[beam] self.fitness = fg.calculate_trajectory_fitness_from_array( updated_bfield, info, ref_trajectories)
def generate_children(self, number_of_children, number_of_mutations, info, lookup, magnets, ref_trajectories, real_bfield=None): # first age, as we are now creating children self.age_bcell() children = [] # Generate the IDfiled for the parent, as we need to calculate it fully here. original_bfield = None original_fitness = None if real_bfield is None: original_bfield, original_fitness = fg.calculate_cached_trajectory_fitness( info, lookup, magnets, self.genome, ref_trajectories) fitness_error = abs(self.fitness - original_fitness) logging.debug("Estimated fitness to real fitness error %2.10e" % (fitness_error)) else: original_bfield = real_bfield original_fitness = fg.calculate_trajectory_fitness_from_array( original_bfield, info, ref_trajectories) fitness_error = abs(self.fitness - original_fitness) logging.debug("Using real bfield") original_magnets = fg.generate_per_magnet_array( info, self.maglist, magnets) available = magnets.availability() maglist = copy.deepcopy(self.maglist) mutation_list = self.create_mutant(number_of_mutations, available) maglist.mutate_from_list(mutation_list) new_magnets = fg.generate_per_magnet_array(info, maglist, magnets) update = fg.compare_magnet_arrays(original_magnets, new_magnets, lookup) updated_bfield = np.array(original_bfield) for beam in update.keys(): if update[beam].size != 0: updated_bfield = updated_bfield - update[beam] self.fitness = fg.calculate_trajectory_fitness_from_array( updated_bfield, info, ref_trajectories) for i in range(number_of_children): maglist = copy.deepcopy(self.maglist) mutation_list = self.create_mutant(number_of_mutations, available) maglist.mutate_from_list(mutation_list) new_magnets = fg.generate_per_magnet_array(info, maglist, magnets) update = fg.compare_magnet_arrays(original_magnets, new_magnets, lookup) child = ID_Shim_BCell() child.mutations = number_of_mutations child.genome = mutation_list child.maglist = self.maglist updated_bfield = np.array(original_bfield) for beam in update.keys(): if update[beam].size != 0: updated_bfield = updated_bfield - update[beam] child.fitness = fg.calculate_trajectory_fitness_from_array( updated_bfield, info, ref_trajectories) children.append(child) logging.debug("Child created with fitness : %2.10e" % (child.fitness)) return children