Try our new documentation site.

Filter Content By
Version

### mip2.R

# Copyright 2019, Gurobi Optimization, LLC
#
# This example reads a MIP model from a file, solves it and
# prints the objective values from all feasible solutions
# generated while solving the MIP. Then it creates the fixed
# model and solves that model.

library(Matrix)
library(gurobi)

args <- commandArgs(trailingOnly = TRUE)
if (length(args) < 1) {
stop('Usage: Rscript mip2.R filename\n')
}

# Read model
cat('Reading model',args[1],'...')
model <- gurobi_read(args[1])
cat('... done\n')

# Detect set of non-continous variables
numvars    <- dim(model$A)[[2]] intvars <- which(model$vtype != 'C')
numintvars <- length(intvars)
if (numintvars < 1) {
stop('All model\'s variables are continuous, nothing to do\n')
}

# Optimize
params               <- list()
params$poolsolutions <- 20 result <- gurobi(model, params) # Capture solution information if (result$status != 'OPTIMAL') {
cat('Optimization finished with status', result$status, '\n') stop('Stop now\n') } # Iterate over the solutions if ('pool' %in% names(result)) { solcount <- length(result$pool)
for (k in 1:solcount) {
cat('Solution', k, 'has objective:', result$pool[[k]]$objval, '\n')
}
} else {
solcount <- 1
cat('Solution 1 has objective:', result$objval, '\n') } # Convert to fixed model for (j in 1:numvars) { if (model$vtype[j] != 'C') {
t <- floor(result$x[j]+0.5) model$lb[j] <- t
model$ub[j] <- t } } # Solve the fixed model result2 <- gurobi(model, params) if (result2$status != 'OPTIMAL') {
stop('Error: fixed model isn\'t optimal\n')
}

if (abs(result$objval - result2$objval) > 1e-6 * (1 + abs(result$objval))) { stop('Error: Objective values differ\n') } # Print values of non-zero variables for (j in 1:numvars) { if (abs(result2$x[j]) < 1e-6) next
varnames <- ''
if ('varnames' %in% names(model)) {
varnames <- model$varnames[j] } else { varnames <- sprintf('X%d', j) } cat(format(varnames, justify='left', width=10),':', format(result2$x[j], justify='right', digits=2, width=10), '\n')
}

# Clear space
rm(model, params, result, result2)

#### Try Gurobi for Free

Choose the evaluation license that fits you best, and start working with our Expert Team for technical guidance and support.

##### Evaluation License
Get a free, full-featured license of the Gurobi Optimizer to experience the performance, support, benchmarking and tuning services we provide as part of our product offering.
##### Academic License
Gurobi supports the teaching and use of optimization within academic institutions. We offer free, full-featured copies of Gurobi for use in class, and for research.
##### Cloud Trial

Request free trial hours, so you can see how quickly and easily a model can be solved on the cloud.