Genetic algorithms for n-dimensional function maximization.
Project description
fmga
fmga (function maximization through genetic algorithms) is a package that takes a genetic algorithm approach to maximization problem of non-convex objective functions in multiple dimensions.
The objective function doesn't have to be differentiable, or even continuous in the specified domain!
The idea is to sample an evolving population of points converging to the function maximum over many iterations.
The population of n-dimensional points undergoes random mutations - and is selected through elitism along with breeding with selection weights inversely proportional to fitness and diversity ranks.
Installation
Install with pip:
pip install fmga
Import within the python script with:
import fmga
Execution
Given a function on multiple variables, say:
def f(x, y, z):
return x - math.sin(y) * z
Pass this function as the objective_function argument to the Population constructor (lambdas work too!).
fmga also supports a variable number of dimensions to optimise over, passed as the dimensions argument, which defaults to the number of arguments of the objective function passed.
Both of the following work:
population = fmga.Population(f, population_size=60, dimensions=3)
population = fmga.Population(population_size=60, objective_function=f, dimensions=3)
If you wish to define custom boundaries, create a list of tuples, for each dimension. Default boundaries are (0, 100). (This is different than in versions 1.x)
boundaries = [(0, 2.5), (0, 10)]
and pass this as the boundaries argument to the Population constructor:
population = fmga.Population(f, population_size=60, boundaries=boundaries)
Note that the default range for missing dimensions is (0, 100).
The population can be set to breed and iterate by using the .converge() method.
population.converge(iterations=20)
To perform only one iteration of breeding and mutating, do:
population.iterate()
Access population mean fitness and mean L1 diversity stats through the .mean_fitness and .mean_diversity attributes:
print(population.mean_fitness, population.mean_diversity)
The .best_estimate() method returns the point closest to the function point of maxima in the population, as a Point object.
best_point = population.best_estimate()
Every Point object has the coordinates attribute, a numpy array signifying the coordinates of point.
print(best_point.coordinates)
To find the value of the function at this point, use:
print(best_point.fitness)
Population Class Methods
The Population constructor takes the following arguments, in order:
objective_function The function to maximize!
population_size (default = 60) Number of points in the population.
boundaries (default = (0, 100) for every dimension) Must be a list of tuples. The tuple indicates the domain where the points are spread along that dimension.
elite_fraction (default = 0.1) Fraction of the population's points to be kept as elite during breeding. Must be between 0 and 1, inclusive.
mutation_probability (default = 0.05) How likely is is for a single point to mutate - this probability is the same for all points in the population.
Must be between 0 and 1, inclusive.
mutation_range (default = 5) The range of the mutation when it does occur. Note that the point will never mutate out of the domain defined!
verbose (default = 2) How much output to be displayed when iterating population after population. Must take values 0, 1 or 2 with 2 representing the most output, and 0 representing none.
dimensions (default = number of arguments of objective_function) The dimensionality of the points and the number of variables to maximize over.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file fmga-2.0.0.tar.gz
.
File metadata
- Download URL: fmga-2.0.0.tar.gz
- Upload date:
- Size: 5.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.18.4 setuptools/39.2.0 requests-toolbelt/0.8.0 tqdm/4.23.3 CPython/3.5.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d02bd3ddc62dfb571cdb1f8e3c9b48e83ea4948563a834c3345384698b8a3164 |
|
MD5 | e397b06c8a4fa3ca1f4f8840b0fbbe79 |
|
BLAKE2b-256 | 6645dcb47ba6738bee36a59fbf393d5906a34324b01efaec6c66691ca9d6ad7f |
File details
Details for the file fmga-2.0.0-py3-none-any.whl
.
File metadata
- Download URL: fmga-2.0.0-py3-none-any.whl
- Upload date:
- Size: 5.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.18.4 setuptools/39.2.0 requests-toolbelt/0.8.0 tqdm/4.23.3 CPython/3.5.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6758833fb53bce754185ab1e9e58cbe8fa0a28aeb0d6f44c564a17c033da3bca |
|
MD5 | cc53c849f8df1fae97496e57e51ec112 |
|
BLAKE2b-256 | fbc36fa9390e1d7b3aeaa8730c4962d6c232becd1680d436d6c648b3107b2e38 |