Learn R Programming

gek (version 1.2.0)

branin: Branin-Hoo Function

Description

The Branin-Hoo function is defined by $$f_{\rm branin}(x_1, x_2) = \left(x_2 - \frac{5.1}{4 \pi^2}x_1^2 + \frac{5}{\pi}x_1 - 6\right)^2 + 10 \left(1-\frac{1}{8\pi}\right)\cos(x_1) + 10$$ with \(x_1 \in [-5, 10]\) and \(x_2 \in [0, 15]\).

Usage

branin(x)
braninGrad(x)

Value

branin returns the function value of the Branin-Hoo function at x.

braninGrad returns the gradient of the Branin-Hoo function at x.

Arguments

x

a numeric vector of length 2 or a numeric matrix with n rows and 2 columns.

Author

Carmen van Meegen

Details

The gradient of the Branin-Hoo function is $$\nabla f_{\rm branin}(x_1, x_2) = \begin{pmatrix} 2 \left(x_2 - \frac{5.1 x_1^2}{4 \pi^2} + \frac{5 x_1}{\pi} - 6\right) \left(-10.2 \frac{x_1}{4\pi^2} + \frac{5}{\pi}\right) - 10 \left(1 - \frac{1}{8\pi}\right) \sin(x_1) \\ 2 \left( x_2 - \frac{5.1 x_1^2}{4 \pi^2} + \frac{5 x_1}{\pi} - 6\right)\end{pmatrix}.$$

The Branin-Hoo function has three global minima \(f_{\rm branin}(x^{\star}) = 0.397887\) at \(x^{\star} = (-\pi, 12.275)\), \(x^{\star} = (\pi, 2.275)\) and \(x^{\star} = (9.42478, 2.475)\).

References

Branin, Jr., F. H. (1972). Widely Convergent Method of Finding Multiple Solutions of Simultaneous Nonlinear Equations. IBM Journal of Research and Development, 16(5):504--522.

Surjanovic, S. and Bingham, D. (2013). Virtual Library of Simulation Experiments: Test Functions and Datasets. https://www.sfu.ca/~ssurjano/ (retrieved January 19, 2024).

See Also

testfunctions for further test functions.

Examples

Run this code
# Contour plot of Branin-Hoo function 
n.grid <- 21
x1 <- seq(-5, 10, length.out = n.grid)
x2 <- seq(0, 15, length.out = n.grid)
y <- outer(x1, x2, function(x1, x2) branin(cbind(x1, x2)))
contour(x1, x2, y, #asp = 1, #xaxs = "i", yaxs = "i",
 nlevels = 25, xlab = "x1", ylab = "x2")#, xlim = c(-5.5, 10), ylim = c(-0.1, 15))

x <- expand.grid(seq(-5, 10, length = n.grid), seq(0, 15, length = n.grid))
gradients <- braninGrad(x)
vectorfield(x, gradients, col = 4)

# Perspective plot of Branin-Hoo function
col.pal <- colorRampPalette(c("#00007F", "blue", "#007FFF", "cyan", "#7FFF7F", "yellow",
	"#FF7F00", "red", "#7F0000"))
colors <- col.pal(100)
y.facet.center <- (y[-1, -1] + y[-1, -n.grid] + y[-n.grid, -1] + y[-n.grid, -n.grid])/4
y.facet.range <- cut(y.facet.center, 100)
persp(x1, x2, y, phi = 30, theta = -315, expand = 0.75, ticktype = "detailed", 
	col = colors[y.facet.range])

Run the code above in your browser using DataLab