PyGAD - Python Genetic Algorithm!¶
PyGAD is an open-source Python library for building the genetic algorithm and optimizing machine learning algorithms. It works with Keras and PyTorch.
Try the Optimization Gadget, a free cloud-based tool powered by PyGAD. It makes optimization easier by reducing or removing the need for coding, and it shows helpful visualizations.
PyGAD supports different types of crossover, mutation, and parent selection operators. It lets you optimize many types of problems with the genetic algorithm by writing your own fitness function. It works with both single-objective and multi-objective optimization problems.

Logo designed by Asmaa Kabil
Besides building the genetic algorithm, PyGAD builds and optimizes machine learning algorithms. At the moment, PyGAD supports building and training (using the genetic algorithm) artificial neural networks for classification problems.
The library is under active development, and new features are added often. Please contact us if you want a feature to be supported.
Donation & Support¶
You can donate to PyGAD through:
Credit/Debit Card: https://donate.stripe.com/eVa5kO866elKgM0144
PayPal: Use either this link paypal.me/ahmedfgad or the e-mail address ahmed.f.gad@gmail.com
Interac e-Transfer: Use the e-mail address ahmed.f.gad@gmail.com
Buy a product at Teespring: pygad.creator-spring.com
Installation¶
To install PyGAD, use pip to download and install the library from PyPI (Python Package Index). The library is available on PyPI at this page: https://pypi.org/project/pygad.
Install PyGAD with the following command:
pip3 install pygad
Quick Start¶
To get started with PyGAD, import it.
import pygad
PyGAD can optimize a wide range of problems. As a quick and simple example, let us find the best set of weights that satisfy the following function:
y = f(w1:w6) = w1x1 + w2x2 + w3x3 + w4x4 + w5x5 + w6x6
where (x1,x2,x3,x4,x5,x6)=(4,-2,3.5,5,-11,-4.7) and y=44
The first step is to prepare the inputs and the output of this equation.
function_inputs = [4,-2,3.5,5,-11,-4.7]
desired_output = 44
The next step is to write the fitness function that calculates a fitness value for each solution. Here is one example.
If the fitness function returns a number, then the problem is single-objective. If it returns a list, tuple, or numpy.ndarray, then it is a multi-objective problem (even if it has a single element).
def fitness_func(ga_instance, solution, solution_idx):
output = numpy.sum(solution*function_inputs)
fitness = 1.0 / numpy.abs(output - desired_output)
return fitness
Next, prepare the parameters of PyGAD. Here is an example set of parameters.
fitness_function = fitness_func
num_generations = 50
num_parents_mating = 4
sol_per_pop = 8
num_genes = len(function_inputs)
init_range_low = -2
init_range_high = 5
parent_selection_type = "sss"
keep_parents = 1
crossover_type = "single_point"
mutation_type = "random"
mutation_percent_genes = 10
After the parameters are ready, create an instance of the pygad.GA class.
ga_instance = pygad.GA(num_generations=num_generations,
num_parents_mating=num_parents_mating,
fitness_func=fitness_function,
sol_per_pop=sol_per_pop,
num_genes=num_genes,
init_range_low=init_range_low,
init_range_high=init_range_high,
parent_selection_type=parent_selection_type,
keep_parents=keep_parents,
crossover_type=crossover_type,
mutation_type=mutation_type,
mutation_percent_genes=mutation_percent_genes)
After creating the instance, call the run() method to start the optimization.
ga_instance.run()
After the run() method completes, you can access information about the best solution found by PyGAD.
solution, solution_fitness, solution_idx = ga_instance.best_solution()
print("Parameters of the best solution : {solution}".format(solution=solution))
print("Fitness value of the best solution = {solution_fitness}".format(solution_fitness=solution_fitness))
prediction = numpy.sum(numpy.array(function_inputs)*solution)
print("Predicted output based on the best solution : {prediction}".format(prediction=prediction))
Parameters of the best solution : [3.92692328 -0.11554946 2.39873381 3.29579039 -0.74091476 1.05468517]
Fitness value of the best solution = 157.37320042925006
Predicted output based on the best solution : 44.00635432206546
There is much more you can do with PyGAD. Read the documentation to explore its features.
PyGAD’s Modules¶
PyGAD has the following modules:
The main module has the same name as the library,
pygad. It is the main interface to build the genetic algorithm.The
nnmodule builds artificial neural networks.The
gannmodule optimizes neural networks (for classification and regression) using the genetic algorithm.The
cnnmodule builds convolutional neural networks.The
gacnnmodule optimizes convolutional neural networks using the genetic algorithm.The
kerasgamodule trains Keras models using the genetic algorithm.The
torchgamodule trains PyTorch models using the genetic algorithm.The
visualizemodule visualizes the results.The
utilsmodule holds the operators (crossover, mutation, and parent selection) and the NSGA-II and NSGA-III code.The
helpermodule has some helper functions.
The documentation explains these modules.
PyGAD Citation - Bibtex Formatted¶
If you used PyGAD, please consider citing its paper with the following details:
@article{gad2023pygad,
title={Pygad: An intuitive genetic algorithm python library},
author={Gad, Ahmed Fawzy},
journal={Multimedia Tools and Applications},
pages={1--14},
year={2023},
publisher={Springer}
}
Genetic Algorithm
Operators & Visualization
Neural Networks
Keras & PyTorch
Releases
Help & Resources