Nothing
test_that("simple minimization works", {
objective <- function(x) x^2
out <- Optimizer$new("stats::nlm")$
minimize(objective, initial = 2)
expect_type(
out,
"list"
)
expect_named(
out,
c("value", "parameter", "seconds", "initial", "error", "gradient", "code", "iterations")
)
})
test_that("simple maximization works", {
objective <- function(x) -x^2
out <- Optimizer$new("stats::nlm")$
maximize(objective, initial = 2)
expect_type(
out,
"list"
)
expect_named(
out,
c("value", "parameter", "seconds", "initial", "error", "gradient", "code", "iterations")
)
})
test_that("minimization with additional arguments works", {
objective <- function(x, a = 1) x^2 + a
out <- Optimizer$new("stats::nlm")$
minimize(objective, initial = 2, "a" = 10)
expect_type(
out,
"list"
)
expect_named(
out,
c("value", "parameter", "seconds", "initial", "error", "gradient", "code", "iterations")
)
})
test_that("error can be detected", {
error_optimizer <- define_optimizer(
.optimizer = function(f, p, ...) {
if (identical(p, 1:2)) stop("error message")
list(v = f(p), z = 1:2)
},
.objective = "f", .initial = "p", .value = "v",
.parameter = "z", .direction = "min"
)
out <- error_optimizer$
minimize(objective = TestFunctions::TF_ackley, initial = 1:2)
expect_true(out$error)
expect_equal(out$error_message, "error message")
})
test_that("exceed of time limit can be detected", {
skip_if_not(.Platform$OS.type == "windows")
slow_optimizer <- define_optimizer(
.optimizer = function(f, p, ...) {
Sys.sleep(2)
stats::nlm(f = f, p = p)
},
.objective = "f", .initial = "p", .value = "v",
.parameter = "z", .direction = "min"
)
slow_optimizer$seconds <- 1
out <- slow_optimizer$
minimize(objective = TestFunctions::TF_ackley, initial = 1:2)
expect_true(out$error)
expect_equal(out$error_message, "time limit exceeded")
})
test_that("fixed argument that is NULL can be passed", {
f <- function(x, a, b, ind) {
if (is.null(ind)) {
(x[1]^2 + x[2] + a)^2 + (x[1] + x[2]^2 + b)^2 + (x[3] - 1)^2
}
}
expect_false(
optimizer_nlm()$minimize(
objective = f,
initial = c(0, 0, 0),
a = -11, b = -7, ind = NULL
)$error
)
expect_false(
Optimizer$new("stats::nlm")$minimize(
objective = f,
initial = c(0, 0, 0),
a = -11, b = -7, ind = NULL
)$error
)
})
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.