def get_offspring(self, cluster_a, cluster_b): '''Generate an offspring structure from two parent structures.''' #Prepare clusters for cluster in [cluster_a, cluster_b]: cluster.centre() cluster.rotate_random() cluster.sort_z() #Choose cutting plane cut = np.random.randint(1, cluster_a.natoms) #Make new cluster coords = np.empty(shape=(cluster_a.natoms, 3)) atom_types = [] for i in range(0, cut): coords[i] = cluster_a.get_coords(i) atom_types.append(cluster_a.atom_types[i]) for i in range(cut, cluster_a.natoms): coords[i] = cluster_b.get_coords(i) atom_types.append(cluster_b.atom_types[i]) composition = get_composition(cluster_a.atom_types) atom_types = fix_composition(composition, atom_types) offspring = Cluster(cluster_a.natoms, coords, cluster_a.minimiser, atom_types=atom_types, labels=cluster_a.labels) offspring.quenched = False offspring.sort_type() cluster_a.sort_type() cluster_b.sort_type() return offspring
def get_offspring(self,cluster_a,cluster_b): '''Generate an offspring structure from two parent structures.''' #Prepare clusters for cluster in [cluster_a,cluster_b]: cluster.centre() cluster.rotate_random() cluster.sort_z() #Choose cutting plane cut=np.random.randint(1,cluster_a.natoms) #Make new cluster coords=np.empty(shape=(cluster_a.natoms,3)) atom_types=[] for i in range(0,cut): coords[i]=cluster_a.get_coords(i) atom_types.append(cluster_a.atom_types[i]) for i in range(cut,cluster_a.natoms): coords[i]=cluster_b.get_coords(i) atom_types.append(cluster_b.atom_types[i]) composition = get_composition(cluster_a.atom_types) atom_types=fix_composition(composition,atom_types) offspring=Cluster(cluster_a.natoms, coords, cluster_a.minimiser, atom_types=atom_types, labels=cluster_a.labels) offspring.quenched=False offspring.sort_type() cluster_a.sort_type() cluster_b.sort_type() return offspring
def get_mutant(self, cluster): cluster.sort_type() atom_types = list(cluster.atom_types) swap0 = np.random.randint(0, get_composition(atom_types)[0]) swap1 = np.random.randint( get_composition(atom_types)[0], cluster.natoms) atom_types[swap0] = 1 atom_types[swap1] = 0 mutant = Cluster(cluster.natoms, np.array(cluster._coords), cluster.minimiser, atom_types=atom_types, labels=cluster.labels) mutant.sort_type() return mutant
def get_mutant(self,cluster): cluster.sort_type() atom_types=list(cluster.atom_types) swap0=np.random.randint(0, get_composition(atom_types)[0]) swap1=np.random.randint(get_composition(atom_types)[0], cluster.natoms) atom_types[swap0]=1 atom_types[swap1]=0 mutant=Cluster(cluster.natoms, np.array(cluster._coords), cluster.minimiser, atom_types=atom_types, labels=cluster.labels) mutant.sort_type() return mutant