Heuristic and meta-heuristic optimisation suite in Python
Project description
FreeLunch - Meta-heuristic optimisation suite for python
Basically a dump of useful / funny metaheuristics with a (hopefully) simple interface.
Feeling cute might add automatic benchmarking later idk.
There are literally so many implementations of all of these so... here's one more!
Features
Optimisers
Your favourite not in the list? Feel free to add it.
- Differential evolution
freelunch.DE
- Simulated Annealing
freelunch.SA
- Particle Swarm
freelunch.PSO
- Krill Herd
freelunch.KrillHerd
- Self-adapting Differential Evolution
freelunch.SADE
--Coming soon to 0.1.0--
- Quantum Bees
- Grenade Explosion Method
- The Penguin one
Benchmarking functions
Tier list: TBA
- N-dimensional Ackley function
- N-dimensional Periodic function
- N-dimensional Happy Cat function
- N-dimensional Exponential function
Usage
Optimisers
Install with pip (req. numpy
).
pip install freelunch
Import and instance your favourite meta-heuristics!
import freelunch
opt = freelunch.DE(obj=my_objective_function, bounds=my_bounds) # Differential evolution
obj
- objective function, callable: obj(sol) -> float or None
bounds
- bounds for elements of sol: bounds [[lower, upper]]*len(sol)
where: (sol[i] <= lower) -> bool
and (sol[i] >= upper) -> bool
.
Check out the hyperparameters and set your own, (defaults set automatically):
print(opt.hyper_definitions)
# {
# 'N':'Population size (int)',
# 'G':'Number of generations (int)',
# 'F':'Mutation parameter (float in [0,1])',
# 'Cr':'Crossover probability (float in [0,1])'
# }
print(opt.hyper_defaults)
# {
# 'N':100,
# 'G':100,
# 'F':0.5,
# 'Cr':0.2
# }
opt.hypers.update({'N':300})
print(opt.hypers)
# {
# 'N':300,
# 'G':100,
# 'F':0.5,
# 'Cr':0.2
# }
Run by calling the instance. To return the best solution only:
quick_result = opt() # Calls optimiser.run_quick() if it exists which can be faster
# This can be checked with class.can_run_quick = bool
To return optimum after nruns
:
best_of_runs = opt(nruns=n)
Return best m
solutions in np.ndarray
:
best_m = opt(return_m=m)
Return json
friendly dict
with fun metadata!
full_output = opt(full_output=True)
# {
# 'optimiser':'DE',
# 'hypers':...,
# 'bounds':...,
# 'nruns':nruns,
# 'nfe':1234,
# 'solutions':[sol1, sol2, ..., solm*nruns],
# 'scores':[fit1, fit2, ..., fitm*nruns]
# }
Benchmarks
Access from freelunch.benchmarks
for example:
bench = freelunch.benchmarks.ackley(n=2) # Instanciate a 2D ackley benchmark function
fit = bench(sol) # evaluate by calling
bench.bounds # [[-10, 10],[-10, 10]]
bench.optimum # [0, 0]
bench.f0 # 0.0
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 freelunch-0.0.9.tar.gz
.
File metadata
- Download URL: freelunch-0.0.9.tar.gz
- Upload date:
- Size: 13.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.8.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 78f07104161320ae408be6e97cae0d6f21d079e8fc55e464698d2d601c79ea1d |
|
MD5 | 231c5010d9601b79879c20559e64f58f |
|
BLAKE2b-256 | 24536064c19fff338c8abe81889a256516d0d63a806f5a3234c831bb5511a254 |
Provenance
File details
Details for the file freelunch-0.0.9-py3-none-any.whl
.
File metadata
- Download URL: freelunch-0.0.9-py3-none-any.whl
- Upload date:
- Size: 15.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.8.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1384747aa4d6134f5ecf13ed9e27dac40bbe5014fb9f5b3c3cc6a1158ac98948 |
|
MD5 | 694627587abf3eeacb0d1ccd3fb668df |
|
BLAKE2b-256 | d6cada74c4cd7b54a276df2f9146d183bdc2684a1cbf350e8ca6c859702e41f2 |