Open Collective
Open Collective
PyGAD 3.3.0
Published on January 29, 2024 by Ahmed Fawzy Gad

 Release Date 29 January 2024
  1. Solve bugs when multi-objective optimization is used.
  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.
  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.
  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 section.
  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? section.
  7. Add object as a supported data type for int (GA.supported_int_types) and float (GA.supported_float_types).
  8. Use the raise clause instead of the sys.exit(-1) to terminate the execution.
  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 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.
            self.best_solution_generation = numpy.where(numpy.array(
                self.best_solutions_fitness) == numpy.max(numpy.array(self.best_solutions_fitness)))[0][0]