context("test-g01-domain")
TOL <- 1e-6
a <- Variable(name = "a")
x <- Variable(2, name = "x")
y <- Variable(2, name = "y")
z <- Variable(3, name = "z")
A <- Variable(2, 2, name = "A")
B <- Variable(2, 2, name = "B")
C <- Variable(3, 2, name = "C")
# test_that("Test domain for partial minimization/maximization problems", {
# for(obj in list(Minimize(a^-1), Maximize(log(a)))) {
# prob <- Problem(obj, list(x + a >= c(5,8)))
# Optimize over nothing
# expr <- partial_optimize(prob, dont_opt_vars = list(x, a))
# dom <- domain(expr)
# constr <- list(a >= -100, x >= 0)
# prob <- Problem(Minimize(sum(x + a)), c(dom, constr))
# result <- solve(prob)
# expect_equal(result$value, 13, tolerance = TOL)
# expect_true(result$getValue(a) >= 0)
# expect_true(all(value(x + a - c(5, 8)) >= -1e-3))
# Optimize over x
# expr <- partial_optimize(prob, opt_vars = list(x))
# dom <- domain(expr)
# constr <- list(a >= -100, x >= 0)
# prob <- Problem(Minimize(sum(x + a)), c(dom, constr))
# result <- solve(prob)
# expect_equal(result$value, 0, tolerance = TOL)
# expect_true(result$getValue(a) >= 0)
# expect_equal(result$getValue(x), matrix(c(0,0)))
# Optimize over x and a
# expr <- partial_optimize(prob, opt_vars = list(x, a))
# dom <- domain(expr)
# constr <- list(a >= -100, x >= 0)
# prob <- Problem(Minimize(sum(x + a)), c(dom, constr))
# result <- solve(prob)
# expect_equal(result$getValue(a), -100, tolerance = TOL)
# expect_equal(result$getValue(x), matrix(c(0,0)), tolerance = TOL)
# }
# })
test_that("Test domain for geo_mean", {
skip_on_cran()
dom <- domain(geo_mean(x))
prob <- Problem(Minimize(sum(x)), dom)
result <- solve(prob)
expect_equal(result$value, 0, tolerance = TOL)
# No special case for only one weight
dom <- domain(geo_mean(x, c(0,2)))
dom <- c(dom, x >= -1)
prob <- Problem(Minimize(sum(x)), dom)
result <- solve(prob)
expect_equal(result$getValue(x), matrix(c(-1,0)), tolerance = TOL)
dom <- domain(geo_mean(z, c(0,1,1)))
dom <- c(dom, z >= -1)
prob <- Problem(Minimize(sum(z)), dom)
result <- solve(prob)
expect_equal(result$getValue(z), matrix(c(-1,0,0)))
})
test_that("Test domain for quad_over_lin", {
skip_on_cran()
dom <- domain(quad_over_lin(x, a))
result <- solve(Problem(Minimize(a), dom))
expect_equal(result$getValue(a), 0, tolerance = TOL)
})
test_that("Test domain for lambda_max", {
skip_on_cran()
dom <- domain(lambda_max(A))
A0 <- rbind(c(1,2), c(3,4))
result <- solve(Problem(Minimize(norm2(A-A0)), dom))
expect_equal(result$getValue(A), rbind(c(1,2.5), c(2.5,4)), tolerance = TOL)
})
test_that("Test domain for p_norm", {
skip_on_cran()
dom <- domain(p_norm(a, -0.5))
prob <- Problem(Minimize(a), dom)
result <- solve(prob)
expect_equal(result$value, 0, tolerance = TOL)
})
test_that("Test domain for log", {
skip_on_cran()
dom <- domain(log(a))
result <- solve(Problem(Minimize(a), dom))
expect_equal(result$getValue(a), 0, tolerance = TOL)
})
test_that("Test domain for log1p", {
skip_on_cran()
dom <- domain(log1p(a))
result <- solve(Problem(Minimize(a), dom))
expect_equal(result$getValue(a), -1, tolerance = TOL)
})
test_that("Test domain for entr", {
skip_on_cran()
dom <- domain(entr(a))
result <- solve(Problem(Minimize(a), dom))
expect_equal(result$getValue(a), 0, tolerance = TOL)
})
test_that("Test domain for kl_div", {
skip_on_cran()
b <- Variable()
dom <- domain(kl_div(a, b))
result <- solve(Problem(Minimize(a + b), dom))
expect_equal(result$getValue(a), 0, tolerance = TOL)
expect_equal(result$getValue(b), 0, tolerance = TOL)
})
test_that("Test domain for power", {
skip_on_cran()
dom <- domain(sqrt(a))
result <- solve(Problem(Minimize(a), dom))
expect_equal(result$getValue(a), 0, tolerance = TOL)
dom <- domain(a^2)
result <- solve(Problem(Minimize(a), c(dom, a >= -100)))
expect_equal(result$getValue(a), -100, tolerance = TOL)
dom <- domain(a^-1)
result <- solve(Problem(Minimize(a), c(dom, a >= -100)))
expect_equal(result$getValue(a), 0, tolerance = TOL)
dom <- domain(a^3)
result <- solve(Problem(Minimize(a), c(dom, a >= -100)))
expect_equal(result$getValue(a), 0, tolerance = TOL)
})
test_that("Test domain for log_det", {
skip_on_cran()
dom <- domain(log_det(A + diag(rep(1,2))))
prob <- Problem(Minimize(sum(diag(A))), dom)
result <- solve(prob, solver = "SCS")
expect_equal(result$value, -2, tolerance = 1e-3)
})
test_that("Test domain for matrix_frac", {
skip_on_cran()
dom <- domain(matrix_frac(x, A + diag(rep(1,2))))
prob <- Problem(Minimize(sum(diag(A))), dom)
result <- solve(prob, solver = "SCS")
expect_equal(result$value, -2, tolerance = 1e-3)
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.