Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ga_instance.best_solution() does not return the solution that minimizes my fitness function #281

Open
24spiders opened this issue Mar 4, 2024 · 2 comments

Comments

@24spiders
Copy link

As mentioned, I have constructed an instance of PyGAD along with a custom fitness function. However, PyGAD does not return the best solution - that is, I have modified my fitness function to print the loss value every time it is called. While it iterates, I can see it return values such as follows:

Solution 8, value [16. 0.24717325 0.4 ], dist 75884.1558043205

Where 'dist' is what should be minimized. These 3 parameters result in a fairly low value of dist. However, once PyGAD completes and exits, the result is output:

Optimized Parameters: [27.          0.24717325  0.4       ]
Loss Value: 5777062.193619523

This loss value is obviously larger than the one it found with solution 8 - I am wondering why it is returning an answer with such a large loss value?

Initialization:

# Execute GA
import pygad
num_generations = 10
num_parents_mating = 4
mutation_rate = 0.1
num_genes = 3  # Number of parameters to optimize
sol_per_pop = 10  # Population size
initial_population = [ [np.random.uniform(low=3, high=40), 
                        np.random.uniform(low=0.1, high=0.4),
                        np.random.uniform(low=0, high=1),] for i in range(num_generations)]

ga_instance = pygad.GA(num_generations=num_generations,
                       num_parents_mating=num_parents_mating,
                       initial_population=initial_population,
                       fitness_func=calc_loss,
                       mutation_percent_genes=mutation_rate,
                       gene_space = [range(3,40), [0.1,0.2,0.3,0.4], [0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0]],
                        parallel_processing = 16,)
@ahmedfgad
Copy link
Owner

Can you please share a dummy fitness function so that we can better assist you?

@moritz-weber
Copy link

@24spiders pygad tries to maximize fitness values. Does your fitness function result in positive dist values? You could try to multiply the output of your fitness function with -1 and see if pygad minimizes the error then.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants