Join the official Python Developers Survey 2018 and win valuable prizes:

Python library for Bayesian Optimization.

## Project description

A python library for Bayesian Optimization.

## Setup BOlib

• The following packages must be installed before installing BOlib
```# for ptyhon3
apt-get install python3-tk
# or for python2
apt-get install python-tk
```
• Create and activate virtualenv (for python2) or venv (for ptyhon3)
```# for ptyhon3
python3 -m venv --system-site-packages .env
# or for python2
virtualenv --system-site-packages .env

source .env/bin/activate
```
```# for ptyhon3
python3 -m pip install --upgrade pip
# or for python2
python -m pip install --upgrade pip
```
• Install GPlib package
```python -m pip install bolib
```

## Use BOlib

• Import BOlib to use it in your python script.
```import bolib
```
• Some well-known objetive functions have been included.
```of = bolib.ofs.Branin()

of.evaluate([1.0, 1.0])  # 27.702905548512433
```
• To use Bayesian Optimization we need a probabilistic model. In this example we will use Gaussian Processes.
```import gplib
import numpy as np

# We initialize data before the first evaluation.

data = {
'X': np.zeros((2, len(of.get_bounds()))),
'Y': np.array([[-1.0], [1.0]])
}

model = gplib.GP(
mean_function=gplib.mea.Constant(data),
covariance_function=gplib.cov.Sum([
gplib.cov.SquaredExponential(data, is_ard=True),
gplib.cov.WhiteNoise(data)
]),
likelihood_function=gplib.lik.Gaussian(),
inference_method=gplib.inf.ExactGaussian()
)

metric = gplib.me.LML()

fitting_method = gplib.fit.MultiStart(
obj_fun=metric.fold_measure,
ls_method="Powell",
max_fun_call=300,
max_ls_fun_call=300
)

validation = gplib.val.Full()
```
• Bayesian Optimization also needs an acquisition function.
```af = bolib.afs.ExpectedImprovement()
```
• Finally, we can initialize our optimization model and start the optimization process.
```seed = 1

bo = bolib.methods.BayesianOptimization(
model, fitting_method, validation, af, seed
)

x0 = bolib.util.random_sample(of.get_bounds(), batch_size=15)

bo.minimize(
of.evaluate, x0,
bounds=of.get_bounds(),
tol=1e-7,
maxiter=of.get_max_eval(),
disp=True
)
```
• BOlib is also Scipy compatible.
```import scipy.optimize as spo

result = spo.minimize(
of.evaluate,
x0,
bounds=of.get_bounds(),
method=bo.minimize,
tol=1e-7,
options={
'maxiter': of.get_max_eval(),
'disp': True
}
)
```
• There are more examples in examples/ directory. Check them out!

## Develop BOlib

```git clone https://gitlab.com/ibaidev/bolib.git
cd bolib
git config user.email 'MAIL'
git config user.name 'NAME'
git config credential.helper 'cache --timeout=300'
git config push.default simple
```
• Update API documentation
```source ./.env/bin/activate
pip install Sphinx
cd docs/
sphinx-apidoc -f -o ./ ../bolib
```