Pimp your objective function for faster, robust optimization
Project description
embarrassingly
Embarrassingly obvious (in retrospect) ways to hack objective functions before you send them to optimization routines. See blog article for motivation and explanation
Install
pip install embarrassingly
Example 1 : Parallel objective computation
from embarrassingly.parallel import Parallel
import optuna
def pre_objective(worker, trial):
print('Hi this is worker ' + str(worker))
x = [trial.suggest_float('x' + str(i), 0, 1) for i in range(3)]
return x[0] + x[1] * x[2]
def test_optuna():
objective = Parallel(pre_objective, num_workers=7)
study = optuna.create_study()
study.optimize(objective, n_trials=15, n_jobs=7)
Example 2 : Plateau finding
from scipy.optimize import shgo
from embarrassingly.underpromoted import plateaudinous, Underpromoted2d
bounds = [(-1 ,1) ,(-1 ,1)]
f = plateaudinous
res1 = shgo(func=f, bounds=bounds, n=8, iters=4, options={'minimize_every_iter': True, 'ftol': 0.1})
print('Minimum at '+str(res1.x))
f_tilde = Underpromoted2d(f, bounds=bounds, radius=0.05)
res1 = shgo(func=f_tilde, bounds=bounds, n=8, iters=4, options={'minimize_every_iter': True, 'ftol': 0.1})
print('Landed at '+str(res1.x))
Example 3 : Expensive functions
See shy_shgo.py
def slow_and_pointless(x):
""" Example of a function with varying computation time """
r = np.linalg.norm(x)
quad = (0.5*0.5-r*r)/(0.5*0.5)
compute_time = max(0,0.5*quad+x[0])
time.sleep(compute_time)
return schwefel([1000*x[0],980*x[1]])[0]
# Save time by making it a "shy" objective function
bounds = [(-0.5, 0.5), (-0.5, 0.5)]
SAP = Shy(slow_and_pointless, bounds=bounds, t_unit=0.01, d_unit=0.3)
from scipy.optimize import minimize
res = scipy.optimize.shgo(func=SAP, bounds=bounds, n=8, iters=4, options={'minimize_every_iter': True, 'ftol': 0.1})
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
embarrassingly-0.0.6.tar.gz
(10.2 kB
view details)
Built Distribution
File details
Details for the file embarrassingly-0.0.6.tar.gz
.
File metadata
- Download URL: embarrassingly-0.0.6.tar.gz
- Upload date:
- Size: 10.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.6.1 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.55.0 CPython/3.9.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f88fbc9459322a67d9038f35031d74b3ec70dec56a2e06fa10797b2ce18c2981 |
|
MD5 | 8a91f56e0df5d47b07d8f9d55e88dec4 |
|
BLAKE2b-256 | a669eea2ebb14bbdf095b3f4a868b8562557cf4581ef80a717e2a91b1a4371a7 |
File details
Details for the file embarrassingly-0.0.6-py3-none-any.whl
.
File metadata
- Download URL: embarrassingly-0.0.6-py3-none-any.whl
- Upload date:
- Size: 12.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.6.1 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.55.0 CPython/3.9.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | fe1880e50e295c28567e7d3b9b7e4ebb7218b0e5b097e2f900c17ba30485b0fd |
|
MD5 | 7f37cfffaa1a757398bfd1769101f1c8 |
|
BLAKE2b-256 | bf57c0be723e2b5c822a8b730beeac5689c846558d45fd25cfdd4c8fec02800d |