PyGAD-3.3.0
Release Date 29 January 2024
- Solve bugs when multi-objective optimization is used. #238
- When the
stop_ciiteriaparameter is used with thereachkeyword, then multiple numeric values can be passed when solving a multi-objective problem. For example, if a problem has 3 objective functions, thenstop_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 - The
delay_after_genparameter 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 theon_generationparameter to pause the evolution. - Parallel processing now supports calculating the fitness during adaptive mutation. #201
- 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
- When a dictionary exists in the
gene_spaceparameter without a step, then mutation occurs by adding a random value to the gene value. The random vaue is generated based on the 2 parametersrandom_mutation_min_valandrandom_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 - Add
objectas a supported data type for int (GA.supported_int_types) and float (GA.supported_float_types). #174 - Use the
raiseclause instead of thesys.exit(-1)to terminate the execution. #213 - Fix a bug when multi-objective optimization is used with batch fitness calculation (e.g.
fitness_batch_sizeset to a non-zero number). - Fix a bug in the
pygad.pyscript when finding the index of the best solution. It does not work properly with multi-objective optimization whereself.best_solutions_fitnesshave multiple columns.
self.best_solution_generation = numpy.where(numpy.array(
self.best_solutions_fitness) == numpy.max(numpy.array(self.best_solutions_fitness)))[0][0]