Skip to content
This repository has been archived by the owner on Feb 28, 2024. It is now read-only.

Commit

Permalink
Merge pull request #29 from betatim/benchmarks
Browse files Browse the repository at this point in the history
Benchmark functions were locked into one of the tests
  • Loading branch information
glouppe committed Mar 29, 2016
2 parents 5195e68 + 1867ea1 commit adba1e0
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 19 deletions.
35 changes: 35 additions & 0 deletions skopt/benchmarks.py
@@ -0,0 +1,35 @@
"""A collection of benchmark problems"""

import numpy as np


def branin(x, a=1, b=5.1 / (4 * np.pi**2), c=5. / np.pi,
r=6, s=10, t=1. / (8 * np.pi)):
"""Branin-Hoo function is defined on the square x1 ∈ [-5, 10], x2 ∈ [0, 15].
It has three minima with f(x*) = 0.397887 at x* = (-pi, 12.275),
(+pi, 2.275), and (9.42478, 2.475).
More details: <http://www.sfu.ca/~ssurjano/branin.html>
"""
return (a * (x[1] - b * x[0]**2 + c * x[0] - r)**2 +
s * (1 - t) * np.cos(x[0]) + s)

def hartmann_6(x,
alpha=np.asarray([1.0, 1.2, 3.0, 3.2]),
P=10**-4 * np.asarray([[1312, 1696, 5569, 124, 8283, 5886],
[2329, 4135, 8307, 3736, 1004, 9991],
[2348, 1451, 3522, 2883, 3047, 6650],
[4047, 8828, 8732, 5743, 1091, 381]]),
A=np.asarray([[10, 3, 17, 3.50, 1.7, 8],
[0.05, 10, 17, 0.1, 8, 14],
[3, 3.5, 1.7, 10, 17, 8],
[17, 8, 0.05, 10, 0.1, 14]])):
"""The six dimensional Hartmann function is defined on the unit hypercube.
It has six local minima and one global minimum f(x*) = -3.32237 at
x* = (0.20169, 0.15001, 0.476874, 0.275332, 0.311652, 0.6573).
More details: <http://www.sfu.ca/~ssurjano/hart6.html>
"""
return -np.sum(alpha * np.exp(-np.sum(A * (x - P)**2, axis=1)))
20 changes: 20 additions & 0 deletions skopt/tests/test_benchmarks.py
@@ -0,0 +1,20 @@
import numpy as np
from sklearn.utils.testing import assert_array_almost_equal
from sklearn.utils.testing import assert_almost_equal

from skopt.benchmarks import branin
from skopt.benchmarks import hartmann_6


def test_branin():
xstars = np.asarray([(-np.pi, 12.275), (+np.pi, 2.275), (9.42478, 2.475)])
f_at_xstars = np.asarray([branin(xstar) for xstar in xstars])
branin_min = np.array([0.397887] * xstars.shape[0])
assert_array_almost_equal(f_at_xstars, branin_min)


def test_hartmann6():
assert_almost_equal(hartmann_6((0.20169, 0.15001, 0.476874,
0.275332, 0.311652, 0.6573)),
-3.32237,
decimal=5)
21 changes: 2 additions & 19 deletions skopt/tests/test_gp_opt.py
Expand Up @@ -3,25 +3,8 @@
from sklearn.utils.testing import assert_less

from skopt.gp_opt import gp_minimize


def branin(x, a=1, b=5.1 / (4 * pi ** 2), c=5. / pi,
r=6, s=10, t=1. / (8 * pi)):
return (a * (x[1] - b * x[0] ** 2 + c * x[0] - r) ** 2 +
s * (1 - t) * cos(x[0]) + s)


def hartmann_6(x,
alpha=np.asarray([1.0, 1.2, 3.0, 3.2]),
P=10**-4 * np.asarray([[1312, 1696, 5569, 124, 8283, 5886],
[2329, 4135, 8307, 3736, 1004, 9991],
[2348, 1451, 3522, 2883, 3047, 6650],
[4047, 8828, 8732, 5743, 1091, 381]]),
A=np.asarray([[10, 3, 17, 3.50, 1.7, 8],
[0.05, 10, 17, 0.1, 8, 14],
[3, 3.5, 1.7, 10, 17, 8],
[17, 8, 0.05, 10, 0.1, 14]])):
return -np.sum(alpha * np.exp(-np.sum(A * (x - P)**2, axis=1)))
from skopt.benchmarks import branin
from skoprt.benchmarks import hartmann_6


def check_branin(search):
Expand Down

0 comments on commit adba1e0

Please sign in to comment.