I'm trying to make a genetic algorithm with PyGAD to find the best value that maximize this function: Z = (3*(x^2 - y)^2 + (100 - x)^2) + (y- x)
, x and y between [-4, 4].
Could someone send me an example of something similar to this function? The example I found uses a function with inputs that have already been given: y = f(w1:w6) = w1x1 + w2x2 + w3x3 + w4x4 + w5x5 + 6wx6
I don't know how i can get the fitness value to each individual using the function with two variables
This is a PyGAD code that solves your problem.
import pygad
def fitness_func(solution, solution_idx):
x = solution[0]
y = solution[1]
Z = -(100*(x**2 - y)**2 + (1 - x)**2)
return Z
last_fitness = 0
def on_generation(ga_instance):
global last_fitness
print("Generation = {generation}".format(generation=ga_instance.generations_completed))
print("Fitness = {fitness}".format(fitness=ga_instance.best_solution(pop_fitness=ga_instance.last_generation_fitness)[1]))
print("Change = {change}".format(change=ga_instance.best_solution(pop_fitness=ga_instance.last_generation_fitness)[1] - last_fitness))
last_fitness = ga_instance.best_solution(pop_fitness=ga_instance.last_generation_fitness)[1]
ga_instance = pygad.GA(num_generations=1000,
num_parents_mating=5,
sol_per_pop=10,
num_genes=2,
gene_space={"low": -2, "high": 2},
mutation_by_replacement=True,
fitness_func=fitness_func,
on_generation=on_generation)
ga_instance.run()
ga_instance.plot_fitness()
solution, solution_fitness, solution_idx = ga_instance.best_solution(ga_instance.last_generation_fitness)
print("Solution", solution)
print("Fitness value of the best solution = {solution_fitness}".format(solution_fitness=solution_fitness))
Based on your description, here are the values of some parameters:
num_genes=2
: It is set to 2 because you only have 2 genes.sol_per_pop=10
: Set to 10 because you said you have 10 individuals.gene_space={"low": -2, "high": 2}
: It restricts the genes to not go beyond the -2:2 range.mutation_by_replacement=True
: This makes sure the genes do not go beyond the range after mutation is applied.You can change the other parameters used according to your preference. For example, you may get better fitness by increasing the number of generations (num_generations
).
Please make sure that PyGAD is installed and run the script.