Branin Function

The Branin Function is commonly used as a test function for metamodelling in computer experiments, especially in the context of optimization.

Modifications for Improved Branin Function:

To enhance the Branin function, changes were made to introduce irregularities, variability, and a dynamic aspect to its landscape. Here's an example:

function improved_branin(x, time_step)
    x1 = x[1]
    x2 = x[2]
    b = 5.1 / (4 * pi^2)
    c = 5 / pi
    r = 6
    a = 1
    s = 10
    t = 1 / (8 * pi)

    # Adding noise to the function's output
    noise = randn() * time_step  # Simulating time-varying noise
    term1 = a * (x2 - b * x1^2 + c * x1 - r)^2
    term2 = s * (1 - t) * cos(x1 + noise)  # Introducing dynamic component
    y = term1 + term2 + s
end
improved_branin (generic function with 1 method)

This improved function now incorporates irregularities, variability, and a dynamic aspect. These changes aim to make the optimization landscape more challenging and realistic.

Using the Improved Branin Function:

After defining the improved Branin function, you can proceed to test different surrogates and visualize their performance using the updated function. Here's an example of using the improved function with the Radial Basis surrogate:

using Surrogates, Plots

n_samples = 80
lower_bound = [-5, 0]
upper_bound = [10, 15]
xys = sample(n_samples, lower_bound, upper_bound, SobolSample())
zs = [improved_branin(xy, 0.1) for xy in xys]
radial_surrogate = RadialBasis(xys, zs, lower_bound, upper_bound)
x, y = -5.00:10.00, 0.00:15.00
xs = [xy[1] for xy in xys]
ys = [xy[2] for xy in xys]
p1 = surface(x, y, (x, y) -> radial_surrogate([x, y]))
scatter!(xs, ys, marker_z = zs)
p2 = contour(x, y, (x, y) -> radial_surrogate([x, y]))
scatter!(xs, ys, marker_z = zs)
plot(p1, p2, title = "Radial Surrogate")
Example block output