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.
PyGAD supports different types of crossover, mutation, and parent selection operators. PyGAD allows different types of problems to be optimized using the genetic algorithm by customizing the fitness function. It works with both single-objective and multi-objective optimization problems.
Logo designed by Asmaa Kabil
Besides building the genetic algorithm, it builds and optimizes machine learning algorithms. Currently, PyGAD supports building and training (using genetic algorithm) artificial neural networks for classification problems.
The library is under active development and more features added regularly. Please contact us if you want a feature to be supported.
Donation & Support¶
You can donate to PyGAD via:
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 e-mail address ahmed.f.gad@gmail.com
Buy a product at Teespring: pygad.creator-spring.com
Installation¶
To install PyGAD, simply use pip to download and install the library from PyPI (Python Package Index). The library lives a 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, simply import it.
import pygad
Using PyGAD, a wide range of problems can be optimized. A quick and simple problem to be optimized using the PyGAD is finding 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 outputs of this equation.
function_inputs = [4,-2,3.5,5,-11,-4.7]
desired_output = 44
A very important step is to implement the fitness function that will be used for calculating the fitness value for each solution. Here is one.
If the fitness function returns a number, then the problem is
single-objective. If a list
, tuple
, or numpy.ndarray
is
returned, then it is a multi-objective problem (applicable even if a
single element exists).
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 is to prepare the parameters of PyGAD. Here is an example for a 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 prepared, an instance of the pygad.GA class is created.
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, the run()
method is called to start the
optimization.
ga_instance.run()
After the run()
method completes, information about the best
solution found by PyGAD can be accessed.
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 more to do using PyGAD. Read its documentation to explore the features of PyGAD.
PyGAD’s Modules¶
PyGAD has the following modules:
The main module has the same name as the library
pygad
which is the main interface to build the genetic algorithm.The
nn
module builds artificial neural networks.The
gann
module optimizes neural networks (for classification and regression) using the genetic algorithm.The
cnn
module builds convolutional neural networks.The
gacnn
module optimizes convolutional neural networks using the genetic algorithm.The
kerasga
module to train Keras models using the genetic algorithm.The
torchga
module to train PyTorch models using the genetic algorithm.The
visualize
module to visualize the results.The
utils
module contains the operators (crossover, mutation, and parent selection) and the NSGA-II code.The
helper
module has some helper functions.
The documentation discusses 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}
}
pygad Module¶
pygad
Modulepygad.GA
Class- Functions in
pygad
- Steps to Use
pygad
- Life Cycle of PyGAD
- Examples
More About pygad Module¶
- More About PyGAD
- Multi-Objective Optimization
- Limit the Gene Value Range using the
gene_space
Parameter - More about the
gene_space
Parameter - Stop at Any Generation
- Stop Criteria
- Elitism Selection
- Random Seed
- Change Population Size during Runtime
- Prevent Duplicates in Gene Values
- More about the
gene_type
Parameter - Parallel Processing in PyGAD
- Print Lifecycle Summary
- Logging Outputs
- Solve Non-Deterministic Problems
- Reuse the Fitness instead of Calling the Fitness Function
- Why the Fitness Function is not Called for Solution at Index 0?
- Batch Fitness Calculation
- Use Functions and Methods to Build Fitness and Callbacks
utils Module¶
visualize Module¶
helper Module¶
pygad.nn Module¶
pygad.gann Module¶
pygad.gann
Modulepygad.gann.GANN
Class- Functions in the
pygad.gann
Module - Steps to Build and Train Neural Networks using Genetic Algorithm
- Prepare the Training Data
- Create an Instance of the
pygad.gann.GANN
Class - Fetch the Population Weights as Vectors
- Prepare the Fitness Function
- Prepare the Generation Callback Function
- Create an Instance of the
pygad.GA
Class - Run the Created Instance of the
pygad.GA
Class - Plot the Fitness Values
- Information about the Best Solution
- Making Predictions using the Trained Weights
- Calculating Some Statistics
- Examples
pygad.cnn Module¶
pygad.gacnn Module¶
pygad.gacnn
Modulepygad.gacnn.GACNN
Class- Functions in the
pygad.gacnn
Module - Steps to Build and Train CNN using Genetic Algorithm
- Prepare the Training Data
- Building the Network Architecture
- Building Model
- Model Summary
- Create an Instance of the
pygad.gacnn.GACNN
Class - Fetch the Population Weights as Vectors
- Prepare the Fitness Function
- Prepare the Generation Callback Function
- Create an Instance of the
pygad.GA
Class - Run the Created Instance of the
pygad.GA
Class - Plot the Fitness Values
- Information about the Best Solution
- Making Predictions using the Trained Weights
- Calculating Some Statistics
- Examples
pygad.kerasga Module¶
pygad.kerasga
Module- Steps Summary
- Create Keras Model
pygad.kerasga.KerasGA
Class- Functions in the
pygad.kerasga
Module - Examples
pygad.torchga Module¶
pygad.torchga
Module- Steps Summary
- Create PyTorch Model
pygad.torchga.TorchGA
Class- Functions in the
pygad.torchga
Module - Examples
Releases¶
- Release History
- PyGAD 1.0.17
- PyGAD 1.0.20
- PyGAD 2.0.0
- PyGAD 2.1.0
- PyGAD 2.2.1
- PyGAD 2.2.2
- PyGAD 2.3.0
- PyGAD 2.4.0
- PyGAD 2.5.0
- PyGAD 2.6.0
- PyGAD 2.7.0
- PyGAD 2.7.1
- PyGAD 2.7.2
- PyGAD 2.8.0
- PyGAD 2.8.1
- PyGAD 2.9.0
- PyGAD 2.10.0
- PyGAD 2.10.1
- PyGAD 2.10.2
- PyGAD 2.11.0
- PyGAD 2.12.0
- PyGAD 2.13.0
- PyGAD 2.14.0
- PyGAD 2.14.2
- PyGAD 2.14.3
- PyGAD 2.15.0
- PyGAD 2.15.1
- PyGAD 2.15.2
- PyGAD 2.16.0
- PyGAD 2.16.1
- PyGAD 2.16.2
- PyGAD 2.16.3
- PyGAD 2.17.0
- PyGAD 2.18.0
- PyGAD 2.18.1
- PyGAD 2.18.2
- PyGAD 2.18.3
- PyGAD 2.19.0
- PyGAD 2.19.1
- PyGAD 2.19.2
- PyGAD 3.0.0
- PyGAD 3.0.1
- PyGAD 3.1.0
- PyGAD 3.2.0
- PyGAD 3.3.0
- PyGAD 3.3.1
- PyGAD Projects at GitHub
- Stackoverflow Questions about PyGAD
- How do I proceed to load a ga_instance as “.pkl” format in PyGad?
- Binary Classification NN Model Weights not being Trained in PyGAD
- How to solve TSP problem using pyGAD package?
- How can I save a matplotlib plot that is the output of a function in jupyter?
- How do I query the best solution of a pyGAD GA instance?
- Multi-Input Multi-Output in Genetic algorithm (python)
- Submitting Issues
- Ask for Feature
- Projects Built using PyGAD
- Tutorials about PyGAD
- Adaptive Mutation in Genetic Algorithm with Python Examples
- Clustering Using the Genetic Algorithm in Python
- Working with Different Genetic Algorithm Representations in Python
- 5 Genetic Algorithm Applications Using PyGAD
- Train Neural Networks Using a Genetic Algorithm in Python with PyGAD
- Building a Game-Playing Agent for CoinTex Using the Genetic Algorithm
- How To Train Keras Models Using the Genetic Algorithm with PyGAD
- Train PyTorch Models Using Genetic Algorithm with PyGAD
- A Guide to Genetic ‘Learning’ Algorithms for Optimization
- PyGAD in Other Languages
- Research Papers using PyGAD
- More Links
- For More Information
- Tutorial: Implementing Genetic Algorithm in Python
- Tutorial: Introduction to Genetic Algorithm
- Tutorial: Build Neural Networks in Python
- Tutorial: Optimize Neural Networks with Genetic Algorithm
- Tutorial: Building CNN in Python
- Tutorial: Derivation of CNN from FCNN
- Book: Practical Computer Vision Applications Using Deep Learning with CNNs
- Contact Us