-
-
Notifications
You must be signed in to change notification settings - Fork 481
Integer precision issues #174
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
Labels
enhancement
New feature or request
Comments
Added in a recent commit d062234. Will be supported in the next release. |
ahmedfgad
added a commit
that referenced
this issue
Jan 29, 2024
Release Date 29 January 2024 1. Solve bugs when multi-objective optimization is used. #238 2. When the `stop_ciiteria` parameter is used with the `reach` keyword, then multiple numeric values can be passed when solving a multi-objective problem. For example, if a problem has 3 objective functions, then `stop_criteria="reach_10_20_30"` means the GA stops if the fitness of the 3 objectives are at least 10, 20, and 30, respectively. The number values must match the number of objective functions. If a single value found (e.g. `stop_criteria=reach_5`) when solving a multi-objective problem, then it is used across all the objectives. #238 3. The `delay_after_gen` parameter is now deprecated and will be removed in a future release. If it is necessary to have a time delay after each generation, then assign a callback function/method to the `on_generation` parameter to pause the evolution. 4. Parallel processing now supports calculating the fitness during adaptive mutation. #201 5. The population size can be changed during runtime by changing all the parameters that would affect the size of any thing used by the GA. For more information, check the [Change Population Size during Runtime](https://pygad.readthedocs.io/en/latest/pygad_more.html#change-population-size-during-runtime) section. #234 6. When a dictionary exists in the `gene_space` parameter without a step, then mutation occurs by adding a random value to the gene value. The random vaue is generated based on the 2 parameters `random_mutation_min_val` and `random_mutation_max_val`. For more information, check the [How Mutation Works with the gene_space Parameter?](https://pygad.readthedocs.io/en/latest/pygad_more.html#how-mutation-works-with-the-gene-space-parameter) section. #229 7. Add `object` as a supported data type for int (GA.supported_int_types) and float (GA.supported_float_types). #174 8. Use the `raise` clause instead of the `sys.exit(-1)` to terminate the execution. #213 9. Fix a bug when multi-objective optimization is used with batch fitness calculation (e.g. `fitness_batch_size` set to a non-zero number). 10. Fix a bug in the `pygad.py` script when finding the index of the best solution. It does not work properly with multi-objective optimization where `self.best_solutions_fitness` have multiple columns.
Finally found some time to port my code to the new version and run some tests. Works like charm, thanks a lot @ahmedfgad :) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Passing
gene_type=int
in theGA
class constructor, will result in internalnumpy
arrays holding 64-bit integer values. This is well known to numpy users:This, however, has two major problems:
int
s are arbitrary precision integerspygad
to explore bigger state-spaces (e.g. bit-vectors of 256-bits, or even larger in my case)To solve this problem, a one-liner fix is to add
object
inGA.supported_int_types
here. Then, users can passgene_type=object
in theGA
constructor and handle Python integers in objective functions without worrying aboutnumpy
getting in their way.The text was updated successfully, but these errors were encountered: