Nothing
## These tests are problematic on CRAN because they
## actually install RMOSEK and Rcplex on debian and
## they never tell us what IBM cplex is being used.
## So there is no real way to troubleshoot, short of
## installing everything ourselves.
TOL <- 1e-4
x_bool <- Variable(boolean=TRUE)
y_int <- Variable(integer=TRUE)
A_bool <- Variable(3, 2, boolean=TRUE)
B_int <- Variable(2, 3, integer=TRUE)
## Check for all installed QP solvers
MIP_SOLVERS <- c("ECOS_BB", "GUROBI", "MOSEK")
solvers <- intersect(MIP_SOLVERS, installed_solvers())
bool_prob <- function(solver) {
test_that("Test Boolean problems", {
#skip_on_cran()
## Bool in objective
obj <- Minimize((x_bool - 0.2)^2)
p <- Problem(obj, list())
result <- solve(p, solver = solver, verbose = TRUE)
expect_equal(result$value, 0.04, tolerance = TOL)
expect_equal(result$getValue(x_bool), 0, tolerance = TOL)
# Bool in constraint
t <- Variable()
obj <- Minimize(t)
p <- Problem(obj, list(x_bool^2 <= t))
result <- solve(p, solver = solver, verbose = TRUE)
expect_equal(result$value, 0, tolerance = TOL)
expect_equal(result$getValue(x_bool), 0, tolerance = 1e-4)
# Matrix Bool in objective
C <- cbind(c(0,1,0), c(1,1,1))
obj <- Minimize(sum_squares(A_bool - C))
p <- Problem(obj, list())
result <- solve(p, solver = solver, verbose = TRUE)
expect_equal(result$value, 0, tolerance = TOL)
expect_equal(result$getValue(A_bool), C, tolerance = 1e-4)
# Matrix Bool in constraint
t <- Variable()
obj <- Minimize(t)
p <- Problem(obj, list(sum_squares(A_bool - C) <= t))
result <- solve(p, solver = solver, verbose = TRUE)
expect_equal(result$value, 0, tolerance = TOL)
expect_equal(result$getValue(A_bool), C, tolerance = 1e-4)
})
}
int_prob <- function(solver) {
test_that("Test Integer problems", {
#skip_on_cran()
## Int in objective
obj <- Minimize((y_int - 0.2)^2)
p <- Problem(obj, list())
result <- solve(p, solver = solver, verbose = TRUE)
expect_equal(result$value, 0.04, tolerance = TOL)
expect_equal(result$getValue(y_int), 0, tolerance = TOL)
## Infeasible Int prblem
obj <- Minimize(0)
p <- Problem(obj, list(y_int == 0.5))
result <- solve(p, solver = solver, verbose = TRUE)
expect_true(result$status %in% CVXR:::INF_OR_UNB)
})
}
int_socp <- function(solver) {
test_that("Test SOCP problems", {
#skip_on_cran()
## Int in objective
t <- Variable()
obj <- Minimize(t)
p <- Problem(obj, list(square(y_int - 0.2) <= t))
result <- solve(p, solver = solver, verbose = TRUE)
expect_equal(result$value, 0.04, tolerance = TOL)
expect_equal(result$getValue(y_int), 0, tolerance = TOL)
})
}
bool_socp <- function(solver) {
test_that("Test Bool SOCP problems", {
#skip_on_cran()
## Int in objective
t <- Variable()
obj <- Minimize(t)
p <- Problem(obj, list(square(x_bool - 0.2) <= t))
result <- solve(p, solver = solver, verbose = TRUE)
expect_equal(result$value, 0.04, tolerance = TOL)
expect_equal(result$getValue(x_bool), 0, tolerance = TOL)
})
}
test_all_solvers <- function() {
for (solver in solvers) {
bool_prob(solver)
int_prob(solver)
bool_socp(solver)
int_socp(solver)
}
}
test_all_solvers()
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.