We use the differential evolution global optimization algorithm, as implemented in the scipy Python package version 1.7.0 . Differential evolution is a stochastic direct search algorithm similar to other genetic algorithm strategies . In this strategy, a set of N initial vectors is proposed, and then "mutated" by randomly increasing or decreasing elements of the vector, and recombined, by randomly replacing some elements of the vector with elements of other vectors. The objective function is then evaluated for each of the proposed vectors, and a new set of vectors is proposed based on the lowest objective functions. This process is repeated until convergence, when new vectors no longer outperform the current solutions. We use the default optimization parameters in scipy, with a population size of 180 vectors, an iterationdependent mutation constant selected from the range (0.5,1), and a recombination constant of 0.7. We note that, depending on the problem, a single iteration of this algorithm requires between 10 3 -10 4 objective function evaluations per iteration, each of which depends on the value of 50-200 physical properties.