Call the get_matplotlib() function from the plot_genes() method inside the pygad.visualize.plot.Plot class to import the matplotlib library. plot_genes() missing matplt() #315
Create a new helper method called select_unique_value() inside the pygad/helper/unique.py script to select a unique gene from an array of values.
Create a new helper method called get_random_mutation_range() inside the pygad/utils/mutation.py script that returns the random mutation range (min and max) for a single gene by its index.
Create a new helper method called change_random_mutation_value_dtype inside the pygad/utils/mutation.py script that changes the data type of the value used to apply random mutation.
Create a new helper method called round_random_mutation_value() inside the pygad/utils/mutation.py script that rounds the value used to apply random mutation.
Create the pygad/helper/misc.py script with a class called Helper that has the following helper methods:
change_population_dtype_and_round(): For each gene in the population, round the gene value and change the data type.
change_gene_dtype_and_round(): Round the change the data type of a single gene.
mutation_change_gene_dtype_and_round(): Decides whether mutation is done by replacement or not. Then it rounds and change the data type of the new gene value.
validate_gene_constraint_callable_output(): Validates the output of the user-defined callable/function that checks whether the gene constraint defined in the gene_constraint parameter is satisfied or not.
get_gene_dtype(): Returns the gene data type from the gene_type instance attribute.
get_random_mutation_range(): Returns the random mutation range using the random_mutation_min_val and random_mutation_min_val instance attributes.
get_initial_population_range(): Returns the initial population values range using the init_range_low and init_range_high instance attributes.
generate_gene_value_from_space(): Generates/selects a value for a gene using the gene_space instance attribute.
generate_gene_value_randomly(): Generates a random value for the gene. Only used if gene_space is None.
generate_gene_value(): Generates a value for the gene. It checks whether gene_space is None and calls either generate_gene_value_randomly() or generate_gene_value_from_space().
filter_gene_values_by_constraint(): Receives a list of values for a gene. Then it filters such values using the gene constraint.
get_valid_gene_constraint_values(): Selects one valid gene value that satisfy the gene constraint. It simply calls generate_gene_value() to generate some gene values then it filters such values using filter_gene_values_by_constraint().
Create a new helper method called mutation_process_random_value() inside the pygad/utils/mutation.py script that generates constrained random values for mutation. It calls either generate_gene_value() or get_valid_gene_constraint_values() based on whether the gene_constraint parameter is used or not.
A new parameter called sample_size is added. To select a gene value that respects a constraint, this variable defines the size of the sample from which a value is selected randomly. Useful if either allow_duplicate_genes or gene_constraint is used. An instance attribute of the same name is created in the instances of the pygad.GA class. Check the [sample_size Parameter](https://pygad.readthedocs.io/en/latest/pygad_more.html#sample-size-parameter) section for more information.
Use the sample_size parameter instead of num_trials in the methods solve_duplicate_genes_randomly() and unique_float_gene_from_range() inside the pygad/helper/unique.py script. It is the maximum number of values to generate as the search space when looking for a unique float value out of a range.
Fixed a bug in population initialization when allow_duplicate_genes=False. Previously, gene values were checked for duplicates before rounding, which could allow near-duplicates like 7.61 and 7.62 to pass. After rounding (e.g., both becoming 7.6), this resulted in unintended duplicates. The fix ensures gene values are now rounded before duplicate checks, preventing such cases.
More tests are created.
More examples are created.
Edited the sort_solutions_nsga2() method in the pygad/utils/nsga2.py script to accept an optional parameter called find_best_solution when calling this method just to find the best solution.
Fixed a bug while applying the non-dominated sorting in the get_non_dominated_set() method inside the pygad/utils/nsga2.py script. It was swapping the non-dominated and dominated sets. In other words, it used the non-dominated set as if it is the dominated set and vice versa. All the calls to this method were edited accordingly. Incorrect Pareto Front Assignment #320.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.