sampled_points = np.array(sampled_points) sampled_energies = np.array(sampled_energies) if len(sampled_points) > 0 and len(sampled_energies) >= len(sampled_points[0]): weights = np.linalg.lstsq(sampled_points, sampled_energies)[0] else: weights = None # Submit new candidates until enough are running while (not pbs_run.enough_jobs_running() and len(population.get_current_population()) > 2): a1, a2 = population.get_two_candidates() # Selecting the "worst" parent energy # which the child should be compared to ce_a1 = da.get_atoms(a1.info['relax_id']).get_potential_energy() ce_a2 = da.get_atoms(a2.info['relax_id']).get_potential_energy() comparison_energy = min(ce_a1, ce_a2) a3, desc = pairing.get_new_individual([a1, a2]) if a3 is None: continue if should_we_skip(a3, comparison_energy, weights): continue da.add_unrelaxed_candidate(a3, description=desc) if random() < mutation_probability: a3_mut, desc_mut = mutations.get_new_individual([a3]) if (a3_mut is not None and not should_we_skip(a3_mut, comparison_energy, weights)): da.add_unrelaxed_step(a3_mut, desc_mut)