Nothing
context("test-g01-nonlinear_atoms")
TOL <- 1e-6
x <- Variable(2, name = "x")
y <- Variable(2, name = "y")
A <- Variable(2, 2, name = "A")
B <- Variable(2, 2, name = "B")
C <- Variable(3, 2, name = "C")
test_that("Test log problem", {
skip_on_cran()
# Log in objective
obj <- Maximize(sum(log(x)))
constr <- list(x <= as.matrix(c(1, exp(1))))
p <- Problem(obj, constr)
result <- solve(p)
expect_equal(result$value, 1, tolerance = TOL)
expect_equal(result$getValue(x), matrix(c(1, exp(1))), tolerance = TOL)
# Log in constraint
obj <- Minimize(sum(x))
constr <- list(log(x) >= 0, x <= as.matrix(c(1,1)))
p <- Problem(obj, constr)
result <- solve(p)
expect_equal(result$value, 2, tolerance = TOL)
expect_equal(result$getValue(x), matrix(c(1, 1)), tolerance = TOL)
# Index into log
obj <- Maximize(log(x)[2])
constr <- list(x <= as.matrix(c(1, exp(1))))
p <- Problem(obj, constr)
result <- solve(p)
expect_equal(result$value, 1, tolerance = TOL)
# Scalar log
obj <- Maximize(log(x[2]))
constr <- list(x <= as.matrix(c(1, exp(1))))
p <- Problem(obj, constr)
result <- solve(p)
expect_equal(result$value, 1, tolerance = TOL)
})
test_that("Test the entr function", {
skip_on_cran()
expect_equal(value(entr(0)), 0)
expect_warning(expect_equal(value(entr(-1)), -Inf))
})
test_that("Test a problem with KL-divergence", {
skip_on_cran()
kK <- 50
kSeed <- 10
# Generate a random reference distribution
# set.seed(kSeed)
npSPriors <- matrix(stats::runif(kK), nrow = kK, ncol = 1)
npSPriors <- npSPriors/sum(npSPriors)
# Reference distribution
p_refProb <- Parameter(kK, 1, nonneg = TRUE)
# Distribution to be estimated
v_prob <- Variable(kK, 1)
objkl <- 0.0
con <- 0.0
for(k in 1:kK) {
# objkl <- objkl + kl_div(v_prob[k,1], p_refProb[k,1]) # TODO: Parameters are unimplemented
objkl <- objkl + kl_div(v_prob[k,1], npSPriors[k,1])
con <- con + v_prob[k,1]
}
constrs <- list(con == 1)
klprob <- Problem(Minimize(objkl), constrs)
value(p_refProb) <- npSPriors
result <- solve(klprob, solver = "SCS", verbose = TRUE)
expect_equal(result$getValue(v_prob), npSPriors, tolerance = 1e-3)
result <- solve(klprob, solver = "ECOS", verbose = TRUE)
expect_equal(result$getValue(v_prob), npSPriors, tolerance = 1e-3)
})
test_that("Test a problem with entr", {
skip_on_cran()
for(n in c(5, 10, 25)) {
print(n)
x <- Variable(n)
obj <- Maximize(sum(entr(x)))
p <- Problem(obj, list(sum(x) == 1))
result <- solve(p, solver = "ECOS", verbose = TRUE)
expect_equal(result$getValue(x), matrix(rep(1.0/n, n)), tolerance = TOL)
result <- solve(p, solver = "SCS", verbose = TRUE)
expect_equal(result$getValue(x), matrix(rep(1.0/n, n)), tolerance = 1e-3)
}
})
test_that("Test a problem with exp", {
skip_on_cran()
for(n in c(5, 10, 25)) {
print(n)
x <- Variable(n)
obj <- Minimize(sum(exp(x)))
p <- Problem(obj, list(sum(x) == 1))
result <- solve(p, solver = "ECOS", verbose = TRUE)
expect_equal(result$getValue(x), matrix(rep(1.0/n, n)), tolerance = TOL)
result <- solve(p, solver = "SCS", verbose = TRUE)
expect_equal(result$getValue(x), matrix(rep(1.0/n, n)), tolerance = 1e-3)
}
})
test_that("Test a problem with log", {
skip_on_cran()
for(n in c(5, 10, 25)) {
print(n)
x <- Variable(n)
obj <- Maximize(sum(log(x)))
p <- Problem(obj, list(sum(x) == 1))
result <- solve(p, solver = "ECOS", verbose = TRUE)
expect_equal(result$getValue(x), matrix(rep(1.0/n, n)), tolerance = TOL)
result <- solve(p, solver = "SCS", verbose = TRUE)
expect_equal(result$getValue(x), matrix(rep(1.0/n, n)), tolerance = 1e-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.