# -------------------------------------------------------------
# Calculator
# -------------------------------------------------------------

potentialSet = Pedone_2006Fe2()
calculator = TremoloXCalculator(parameters=potentialSet)
calculator.setVerletListsDelta(0.25*Angstrom)

# -------------------------------------------------------------
# Elements
# -------------------------------------------------------------

elements = [Oxygen, Oxygen, Oxygen, Oxygen, Titanium, Titanium]

# -------------------------------------------------------------
# Random Number Generator
# -------------------------------------------------------------

rng = numpy.random.RandomState()

# -------------------------------------------------------------
# Initial Population
# -------------------------------------------------------------

initial_population = generateInitialPopulation(
    elements=elements,
    population_size=10,
    calculator=calculator,
    volume=51.57*Angstrom**3,
    max_forces=0.01*eV/Angstrom,
    max_stress=0.1*GPa,
    max_steps=1000,
    max_step_length=0.2*Angstrom,
    external_pressure=0.0*GPa,
    rng=rng,
    log_filename_prefix="initial_population_",
    )

# -------------------------------------------------------------
# Crystal Structure Prediction
# -------------------------------------------------------------

crystal_structure_prediction = CrystalStructurePrediction(
    initial_population,
    number_of_generations=20,
    selection_pressure=2.0,
    number_of_elites=10,
    number_to_promote=4,
    heredity_probability=50.0,
    permutation_probability=20.0,
    mutation_probability=30.0,
    sigma_lattice=0.7,
    max_forces=0.01*eV/Angstrom,
    max_stress=0.1*GPa,
    max_steps=1000,
    max_step_length=0.2*Angstrom,
    external_pressure=0.0*GPa,
    rng=rng,
    write_population=True,
    log_filename_prefix="generation_",
    )
