Magic_value_which_must_equal_zero = x[-1] - x[0]
return Magic_value_which_must_equal_zero
def my_generator(random, args):
n = args.get('n', 11)
return [random.uniform(0, 3) for _ in range(n)]
@inspyred.ec.evaluators.evaluator
def my_evaluator(candidate, args):
penalty = [10, 15, 50]
minfun = Min_Func(candidate)
i1 = I_Constraint1(candidate)
i1 = 0 if i1 > 1 else abs(1 - i1)
i2 = I_Constraint2(candidate)
i2 = 0 if i2 > 2 else abs(2 - i2)
e1 = abs(E_Constraint1(candidate))
return sum([c * v for c, v in zip([1] + penalty, [minfun, i1, i2, e1])])
prng = random.Random()
prng.seed(time.time())
ec = inspyred.ec.EvolutionaryComputation(prng)
ec.selector = inspyred.ec.selectors.tournament_selection
ec.variator = inspyred.ec.variators.gaussian_mutation
ec.replacer = inspyred.ec.replacers.generational_replacement
ec.terminator = inspyred.ec.terminators.evaluation_termination
final_pop = ec.evolve(generator=my_generator,
evaluator=my_evaluator,
pop_size=100,
maximize=False,
n=11,
bounder=inspyred.ec.Bounder(0, 3),
max_evaluations=20000,
mutation_rate=0.1,
num_elites=1)
# Sort and print the best individual, who will be at index 0.
final_pop.sort(reverse=True)
print(final_pop[0])