Nothing
### ###
### 2-DIMENSIONAL TESTFUNCTIONS ###
### ###
### BRANIN-HOO FUNCTION ###
## input domain: [-5, 10] x [0, 15]
## global minimum: f(x) = 0.3997887
## at x = (-pi, 12.2756), x = (pi, 2.475) and x = (9.42478, 2.475)
branin <- function(x){
if(is.vector(x)) x <- matrix(x, nrow = 1)
d <- ncol(x)
if(d != 2) stop("Branin-Hoo function is only defined for 2 dimensions")
x1 <- x[ , 1]
x2 <- x[ , 2]
(x2 - 5.1 * x1^2 / (4 * pi^2) + 5 * x1 / pi - 6)^2 + 10 * (1 - 1/(8 * pi)) * cos(x1) + 10
}
braninGrad <- function(x){
if(is.vector(x)) x <- matrix(x, nrow = 1)
d <- ncol(x)
if(d != 2) stop("Branin-Hoo function is only defined for 2 dimensions")
x1 <- x[ , 1]
x2 <- x[ , 2]
res <- cbind((-10.2 * x1 / (4 * pi^2) + 5 / pi) * 2 * (x2 - 5.1 * x1^2 / (4 * pi^2) + 5 * x1 / pi - 6) - 10 * (1 - 1/(8 * pi)) * sin(x1),
2 * (x2 - 5.1 * x1^2 / (4 * pi^2) + 5 * x1 / pi - 6))
colnames(res) <- colnames(x)
res
}
### THREE-HUMP CAMELBACK FUNCTION ###
## input domain: [-5, 5] x [-5, 5]
## input domain: [-2, 2] x [-2, 2]
## global minimum: f(x) = 0
## at x = (0, 0)
camel3 <- function(x){
if(is.vector(x)) x <- matrix(x, nrow = 1)
d <- ncol(x)
if(d != 2) stop("Three-hump camel function is only defined for 2 dimensions")
x1 <- x[ , 1]
x2 <- x[ , 2]
2 * x1^2 - 1.05 * x1^4 + x1^6 / 6 + x1 * x2 + x2^2
}
camel3Grad <- function(x){
if(is.vector(x)) x <- matrix(x, nrow = 1)
d <- ncol(x)
if(d != 2) stop("Three-hump camel function is only defined for 2 dimensions")
x1 <- x[ , 1]
x2 <- x[ , 2]
res <- cbind(4 * x1 - 4.2 * x1^3 + x1^5 + x2, x1 + 2 * x2)
colnames(res) <- colnames(x)
res
}
### SIX-HUMP CAMELBACK FUNCTION ###
## input domain: [-3, 3] x [-2, 2]
## input domain: [-2, 2] x [-1, 1]
## global minimum: f(x) = -1.0316
## at x = (0.0898, -0.7126) and x = (-0.0898, 0.7126)
camel6 <- function(x){
if(is.vector(x)) x <- matrix(x, nrow = 1)
d <- ncol(x)
if(d != 2) stop("Six-hump camel function is only defined for 2 dimensions")
x1 <- x[ , 1]
x2 <- x[ , 2]
(4 - 2.1 * x1^2 + x1^4 / 3) * x1^2 + x1 * x2 + (-4 + 4 * x2^2) * x2^2
}
camel6Grad <- function(x){
if(is.vector(x)) x <- matrix(x, nrow = 1)
d <- ncol(x)
if(d != 2) stop("Six-hump camel function is only defined for 2 dimensions")
x1 <- x[ , 1]
x2 <- x[ , 2]
res <- cbind(8 * x1 - 8.4 * x1^3 + 2 * x1^5 + x2, x1 - 8 * x2 + 16 * x2^3)
colnames(res) <- colnames(x)
res
}
### HIMMELBLAU'S FUNCTION ###
## input domain: [-5, 5]^2
## local maximum: f(x) = -181.617
## at x = (-0.270845, -0.923039)
himmelblau <- function(x){
if(is.vector(x)) x <- matrix(x, nrow = 1)
d <- ncol(x)
if(d != 2) stop("Himmelblau's function is only defined for 2 dimensions")
x1 <- x[ , 1]
x2 <- x[ , 2]
(x1^2 + x2 - 11)^2 + (x1 + x2^2 - 7)^2
}
himmelblauGrad <- function(x){
if(is.vector(x)) x <- matrix(x, nrow = 1)
d <- ncol(x)
if(d != 2) stop("Himmelblau's function is only defined for 2 dimensions")
x1 <- x[ , 1]
x2 <- x[ , 2]
res <- cbind(4 * x1 * (x1^2 + x2 - 11) + 2 * (x1 + x2^2 - 7),
2 * (x1^2 + x2 - 11) + 4 * x2 * (x1 + x2^2 - 7))
colnames(res) <- colnames(x)
res
}
### ###
### MULTIDIMENSIONAL TESTFUNCTIONS ###
### ###
### ROSENBROCK (BANANA) FUNCTION ###
## input domain: [-5, 10]^d or [-2.048, 2.048]^d
## global minimum: f(x) = 0
## at x = (1, ..., 1)
banana <- function(x){
if(is.vector(x)) stop("Rosenbrock-Banana function is only defined for dimensions > 1")
d <- ncol(x)
rowSums(100 * (x[ , 2:d, drop = FALSE] - x[ , 1:(d - 1), drop = FALSE]^2)^2 + (1 - x[ , 1:(d - 1), drop = FALSE])^2)
}
bananaGrad <- function(x){
if(is.vector(x)) stop("Rosenbrock-Banana function is only defined for dimensions > 1")
d <- ncol(x)
if(d == 2){
res <- cbind(-400 * (x[ , 2] - x[ , 1]^2) * x[ , 1] + 2 * (x[ , 1] - 1),
200 * (x[ , 2] - x[ , 1]^2))
}else{
res <- cbind(-400 * (x[ , 2] - x[ , 1]^2) * x[ , 1] + 2 * (x[ , 1] - 1),
200 * (x[ , 2:(d - 1)] - x[ , 1:(d - 2)]^2) -
400 * x[ , 2:(d - 1)] * (x[ , 3:d] - x[ , 2:(d - 1)]^2) +
2 * (x[ , 2:(d - 1)] - 1),
200 * (x[ , d] - x[ , d - 1]^2))
}
colnames(res) <- colnames(x)
res
}
### SPHERE FUNCTION ###
## input domain: [-5.12, 5.12]^d
## global minimum: f(x) = 0
## at x = (0, ..., 0)
sphere <- function(x){
if(is.vector(x)) x <- matrix(x, ncol = 1)
rowSums(x^2)
}
sphereGrad <- function(x){
if(is.vector(x)) x <- matrix(x, ncol = 1)
2 * x
}
### BENT CIGAR FUNCTION ###
## input domain: [-100, 100]^d
## global minimum: f(x) = 0
## at x = (0, ..., 0)
cigar <- function(x){
if(is.vector(x)) x <- matrix(x, ncol = 1)
d <- ncol(x)
if(d == 1) return(x^2)
x[ , 1]^2 + 10^6 * rowSums(x[ , 2:d, drop = FALSE]^2)
}
cigarGrad <- function(x){
if(is.vector(x)) x <- matrix(x, ncol = 1)
d <- ncol(x)
if(d == 1) res <- 2 * x
else res <- cbind(2 * x[ , 1], 2 * 10^6 * x[ , 2:d])
colnames(res) <- colnames(x)
res
}
### RASTRIGIN FUNCTION ###
## input domain: [-5.12, 5.12]^d
## global minimum: f(x) = 0
## at x = (0, ..., 0)
rastrigin <- function(x){
if(is.vector(x)) x <- matrix(x, ncol = 1)
d <- ncol(x)
10 * d + rowSums(x^2 - 10 * cos(2 * pi * x))
}
rastriginGrad <- function(x){
if(is.vector(x)) x <- matrix(x, ncol = 1)
2 * x + 20 * pi * sin(2 * pi * x)
}
### SCHWEFEL-FUNCTION ###
## input domain: [-500, 500]^d
## global minimum: f(x) = 0
## at x = (420.9687, ..., 420.9687)
schwefel <- function(x){
if(is.vector(x)) x <- matrix(x, ncol = 1)
d <- ncol(x)
418.982887272433799807913601398 * d - rowSums(x * sin(sqrt(abs(x))))
}
schwefelGrad <- function(x){
if(is.vector(x)) x <- matrix(x, ncol = 1)
res <- -sin(sqrt(abs(x))) - x^2 * cos(sqrt(abs(x))) / (2 * abs(x)^(3/2))
res[x == 0] <- 0
res
}
### STYBLINSKI-TANG FUNCTION ###
## input domain: [-5, 5]^d
## global minimum: f(x) = -29.16599d
## at x = (-2.903534, ..., -2.903534)
styblinski <- function(x){
if(is.vector(x)) x <- matrix(x, ncol = 1)
0.5 * rowSums(x^4 - 16 * x^2 + 5 * x)
}
styblinskiGrad <- function(x){
if(is.vector(x)) x <- matrix(x, ncol = 1)
2 * x^3 - 16 * x + 2.5
}
### QING FUNCTION ###
## input domain: [-500, 500]^d
## global minimum: f(x) = 0
## at x = (-sqrt(1), ..., -sqrt(d))
## and x = (sqrt(1), ..., sqrt(d))
qing <- function(x){
if(is.vector(x)) x <- matrix(x, ncol = 1)
d <- ncol(x)
n <- nrow(x)
rowSums((x^2 - tcrossprod(rep(1, n), 1:d))^2)
}
qingGrad <- function(x){
if(is.vector(x)) x <- matrix(x, ncol = 1)
d <- ncol(x)
n <- nrow(x)
4 * x * (x^2 - tcrossprod(rep(1, n), 1:d))
}
### GRIEWANK FUNCTION ###
## input domain: [-600, 600]^d
## global minimum: f(x) = 0
## at x = (0,...,0)
griewank <- function(x){
if(is.vector(x)) x <- matrix(x, ncol = 1)
d <- ncol(x)
n <- nrow(x)
mat <- sqrt(tcrossprod(rep(1, n), 1:d))
rowSums(x^2 / 4000) - apply(cos(x / mat), 1, prod) + 1
}
griewankGrad <- function(x){
if(is.vector(x)) x <- matrix(x, ncol = 1)
d <- ncol(x)
n <- nrow(x)
mat <- sqrt(tcrossprod(rep(1, n), 1:d))
x / 2000 + sin(x / mat) / mat * tcrossprod(apply(cos(x / mat), 1, prod), rep(1, d)) / cos(x / mat)
}
### ###
### UNCERTAINTY TESTFUNCTIONS ###
### ###
### BOREHOLE-FUNCTION ###
## input domain: (x[1], ..., x[8])
## rw %in% [0.05, 0.15] radius of borehole (m)
## r %in% [100, 50000] radius of influence (m)
## Tu %in% [63070, 115600] transmissivity of upper aquifer (m2/yr)
## Hu %in% [990, 1110] potentiometric head of upper aquifer (m)
## Tl %in% [63.1, 116] transmissivity of lower aquifer (m2/yr)
## Hl %in% [700, 820] potentiometric head of lower aquifer (m)
## L %in% [1120, 1680] length of borehole (m)
## Kw %in% [9855, 12045] hydraulic conductivity of borehole (m/yr)
##
## input distributions for uncertainty analysis
## rw ~ N(0.10, 0.0161812)
## r ~ Lognormal(7.71, 1.0056)
## Tu ~ Uniform[63070, 115600]
## Hu ~ Uniform[990, 1110]
## Tl ~ Uniform[63.1, 116]
## Hl ~ Uniform[700, 820]
## L ~ Uniform[1120, 1680]
## Kw ~ Uniform[9855, 12045]
## remark: N(mu, sigma) not sigma^2
##
## output/response:
## water flow rate in m^2/yr
borehole <- function(x){
if(is.vector(x)) x <- matrix(x, nrow = 1)
d <- ncol(x)
if(d != 8) stop("Borehole function is only defined for 8 dimensions")
r_w <- x[ , 1]
r <- x[ , 2]
T_u <- x[ , 3]
H_u <- x[ , 4]
T_l <- x[ , 5]
H_l <- x[ , 6]
L <- x[ , 7]
K_w <- x[ , 8]
numerator <- 2 * pi * T_u * (H_u - H_l)
denominator <- log(r / r_w) * (1 + 2 * L * T_u / (log(r / r_w) * r_w^2 * K_w) + T_u / T_l)
numerator / denominator
}
boreholeGrad <- function(x){
if(is.vector(x)) x <- matrix(x, nrow = 1)
d <- ncol(x)
if(d != 8) stop("Borehole function is only defined for 8 dimensions")
r_w <- x[ , 1]
r <- x[ , 2]
T_u <- x[ , 3]
H_u <- x[ , 4]
T_l <- x[ , 5]
H_l <- x[ , 6]
L <- x[ , 7]
K_w <- x[ , 8]
denominator <- log(r / r_w) * r_w^2 * K_w * (T_u + T_l) + 2 * L * T_l * T_u
cbind("r_w" = 2 * pi * r_w * K_w * T_l * T_u * (H_u - H_l) * (4 * L * T_l * T_u + r_w^2 * K_w * T_u + r_w^2 * K_w * T_l) / denominator^2,
"r" = -2 * pi * r_w^4 * K_w^2 * T_l * T_u * (T_l + T_u) * (H_u - H_l) / (r * denominator^2),
"T_u" = 2 * pi * r_w^4 * K_w^2 * T_l^2 * (H_u - H_l) * log(r / r_w) / denominator^2,
"H_u" = 2 * pi * r_w^2 * K_w * T_l * T_u / denominator,
"T_l" = 2 * pi * r_w^4 * K_w^2 * T_u^2 * (H_u - H_l) * log(r / r_w) / denominator^2,
"H_l" = -2 * pi * r_w^2 * K_w * T_l * T_u / denominator,
"L" = -4 * pi * r_w^2 * K_w * T_l^2 * T_u^2 * (H_u - H_l) / denominator^2,
"K_w" = 4 * pi * r_w^2 * L * T_l^2 * T_u^2 * (H_u - H_l) / denominator^2)
}
### SULFUR-FUNCTION ###
## input distributions for uncertainty analysis
## rw ~ N(0.10, 0.0161812)
## r ~ Lognormal(7.71, 1.0056)
## Tu ~ Uniform[63070, 115600]
## Hu ~ Uniform[990, 1110]
## Tl ~ Uniform[63.1, 116]
## Hl ~ Uniform[700, 820]
## L ~ Uniform[1120, 1680]
## Kw ~ Uniform[9855, 12045]
## remark: N(mu, sigma) not sigma^2
##
## output/response:
## water flow rate in m^2/yr
sulfur <- function(x, S_0 = 1366, A = 5.1e+14){
if(is.vector(x)) x <- matrix(x, nrow = 1)
d <- ncol(x)
if(d != 9) stop("Sulfur function is only defined for 9 dimensions")
Q <- x[ , 1]
Y <- x[ , 2]
L <- x[ , 3]
Psi <- x[ , 4]
beta <- x[ , 5]
f_Psi <- x[ , 6]
T <- x[ , 7]
A_c <- x[ , 8]
R_s <- x[ , 9]
-1/2 * S_0^2 * A_c * T^2 * R_s^2 * beta * Psi * f_Psi * 3 * Q * Y * L / A
}
sulfurGrad <- function(x, S_0 = 1366, A = 5.1e+14){
if(is.vector(x)) x <- matrix(x, nrow = 1)
d <- ncol(x)
if(d != 9) stop("Sulfur function is only defined for 9 dimensions")
Q <- x[ , 1]
Y <- x[ , 2]
L <- x[ , 3]
Psi <- x[ , 4]
beta <- x[ , 5]
f_Psi <- x[ , 6]
T <- x[ , 7]
A_c <- x[ , 8]
R_s <- x[ , 9]
cbind("Q" = -1/2 * S_0^2 * A_c * T^2 * R_s^2 * beta * Psi * f_Psi * 3 * Y * L / A,
"Y" = -1/2 * S_0^2 * A_c * T^2 * R_s^2 * beta * Psi * f_Psi * 3 * Q * L / A,
"L" = -1/2 * S_0^2 * A_c * T^2 * R_s^2 * beta * Psi * f_Psi * 3 * Q * Y / A,
"Psi" = -1/2 * S_0^2 * A_c * T^2 * R_s^2 * beta * f_Psi * 3 * Q * Y * L / A,
"beta" = -1/2 * S_0^2 * A_c * T^2 * R_s^2 * Psi * f_Psi * 3 * Q * Y * L / A,
"f_Psi" = -1/2 * S_0^2 * A_c * T^2 * R_s^2 * beta * Psi * 3 * Q * Y * L / A,
"T" = -S_0^2 * A_c * T * R_s^2 * beta * Psi * f_Psi * 3 * Q * Y * L / A,
"1 - A_c" = -1/2 * S_0^2 * T^2 * R_s^2 * beta * Psi * f_Psi * 3 * Q * Y * L / A,
"1 - R_s" = -S_0^2 * A_c * T^2 * R_s * beta * Psi * f_Psi * 3 * Q * Y * L / A)
}
### SHORT COLUMN-FUNCTION ###
## input distributions for uncertainty analysis
## Y ~ Lognormal(5, 0.5) yield stress
## M ~ N(2000, 400) bending moment
## P ~ N(500, 100) axial force
## remark: N(mu, sigma) not sigma^2
## The input variables are uncorrelated,
## except for a correlation coefficient of 0.5 between M and P.
##
## output/response:
## limit state function
short <- function(x, b = 5, h = 15){
if(is.vector(x)) x <- matrix(x, nrow = 1)
d <- ncol(x)
if(d != 3) stop("Short column function is only defined for 3 dimensions")
Y <- x[ , 1]
M <- x[ , 2]
P <- x[ , 3]
1 - 4 * M / (b * h^2 * Y) - P^2 / (b^2 * h^2 * Y^2)
}
shortGrad <- function(x, b = 5, h = 15){
if(is.vector(x)) x <- matrix(x, nrow = 1)
d <- ncol(x)
if(d != 3) stop("Short column function is only defined for 3 dimensions")
Y <- x[ , 1]
M <- x[ , 2]
P <- x[ , 3]
cbind("Y" = 2 * (2 * b * M * Y + P^2) / (b^2 * h^2 * Y^3),
"M" = -4 / (b * h^2 * Y),
"P" = -2 * P / (b^2 * h^2 * Y^2))
}
### STEEL COLUMN-FUNCTION ###
## input distributions for uncertainty analysis
## Fs ~ Lognormal(400, 35) yield stress (MPa)
## P1 ~ N(500000, 50000) dead weight load (N)
## P2 ~ Gumbel(600000, 90000) variable load (N)
## P3 ~ Gumbel(600000, 90000) variable load (N)
## B ~ Lognormal(b, 3) flange breadth (mm)
## D ~ Lognormal(t, 2) flange thickness (mm)
## H ~ Lognormal(h, 5) profile height (mm)
## F0 ~ N(30, 10) initial deflection (mm)
## E ~ Weibull(210000, 4200) Young's modulus (MPa)
## remark: N(mu, sigma) not sigma^2
## The input variables are uncorrelated,
## except for a correlation coefficient of 0.5 between M and P.
##
## output/response:
## trade-off between cost and reliability for a steel column
steel <- function(x, L = 7500){
if(is.vector(x)) x <- matrix(x, nrow = 1)
d <- ncol(x)
if(d != 9) stop("Steel column function is only defined for 9 dimensions")
Fs <- x[ , 1]
P1 <- x[ , 2]
P2 <- x[ , 3]
P3 <- x[ , 4]
B <- x[ , 5]
D <- x[ , 6]
H <- x[ , 7]
F0 <- x[ , 8]
E <- x[ , 9]
P <- P1 + P2 + P3
Eb <- pi^2 * E * B * D * H^2 / (2 * L^2)
Fs - P * (1 / (2 * B * D) + F0 * Eb / (B * D * H * (Eb - P)))
}
steelGrad <- function(x, L = 7500){
if(is.vector(x)) x <- matrix(x, nrow = 1)
d <- ncol(x)
if(d != 9) stop("Steel column function is only defined for 9 dimensions")
Fs <- x[ , 1]
P1 <- x[ , 2]
P2 <- x[ , 3]
P3 <- x[ , 4]
B <- x[ , 5]
D <- x[ , 6]
H <- x[ , 7]
F0 <- x[ , 8]
E <- x[ , 9]
P <- P1 + P2 + P3
Eb <- pi^2 * E * B * D * H^2 / (2 * L^2)
cbind("Fs" = 1,
"P1" = -(1 / (2 * B * D) + F0 * Eb / (B * D * H * (Eb - P))) - P * F0 * Eb / (B * D * H * (Eb - P)^2),
"P2" = -(1 / (2 * B * D) + F0 * Eb / (B * D * H * (Eb - P))) - P * F0 * Eb / (B * D * H * (Eb - P)^2),
"P3" = -(1 / (2 * B * D) + F0 * Eb / (B * D * H * (Eb - P))) - P * F0 * Eb / (B * D * H * (Eb - P)^2),
"B" = -P / (B^2 * D) * (-0.5 + F0 * Eb / (H * (Eb - P)) - F0 * Eb * (2 * Eb - P) / (H * (Eb - P)^2)),
"D" = -P / (B * D^2) * (-0.5 + F0 * Eb / (H * (Eb - P)) - F0 * Eb * (2 * Eb - P) / (H * (Eb - P)^2)),
"H" = P * F0 * Eb * (Eb + P) / (B * D * H^2 * (Eb - P)^2),
"F0" = -P * Eb / (B *D * H * (Eb - P)),
"E" = P^2 * F0 * Eb / (B * D * H * E * (Eb - P)^2))
}
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.