If Q==NULL
then the problem is linear, if any value of the vtype
argument is "B" or "I" then the problem is a mixed-integer program.
The control
argument is used to set CPLEX's many parameters. See
details. The objsense
determines if the problem is a
maximization or minimization problem. The sense
argument is
used to set the constraint directions.
Rcplex(cvec, Amat, bvec, Qmat = NULL,
lb = 0, ub = Inf, control = list(),
objsense = c("min", "max"), sense = "L", vtype = NULL, n = 1)
ncol(Amat)==length(cvec)
)length(bvec)==nrow(Amat)
)NULL
the problem is linear. If not NULL
, it must be a symmetric positive
semidefinite matrix of size length(cvec)
by length(cvec)
. Default length(lb)==1
then lb
is the lower bound of all
variables. Otherwise, length(lb)==length(cvec)
. Set
lb=-Inf
to have no lower bound. Default 0.lb
for
further details. Default Inf
."max"
or "min"
, determines the optimization
direction. Default "min"
length(sense)==1
then the same value is taken
for each constraint. Can be one of "L"
(less than or equal),
"G"
(reater than or equal) or "E"
"C"
(continuous), "I"
(integer) or "B"
(binary). If
length(vtype)==1
the same value is taken for all
variables. Otherwise, requiresn
has to be set to NA
. In CPLEX this is alsn > 1
a list
of length equal to the number of optimal solutions containing the
following components for each solution:A
and C
may be sparse matrices from a class in
the hierarchy defined by the dgCMatrix-class
defined by the
We also provide a simple S3-style class for sparse matrices
simple_triplet_matrix
, as used in the A
and C
can be objects of this class.
See the examples
for example
usage. simple_triplet_matrix
objects MUST be in column-major
order.
The control
argument can be used to set CPLEX's many
parameters, including the particular algorithm used for solving the given
problem. See the ILOG CPLEX Parameters guide for further
details. The following parameters are supported:
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Rcplex.close
, optim
## A linear program (this is lpex1.c in the CPLEX examples)
cvec <- c(1,2,3)
Amat <- matrix(c(-1,1,1,-1,3,-1),byrow=TRUE,nc=3)
bvec <- c(20,-30)
ub <- c(40,Inf,Inf)
res <- Rcplex(cvec,Amat,bvec,ub=ub,objsense="max",sense=c('L','G'))
print(res)
## A linear program with random data
## use the barrier method
n = 20; m = 25
nnz <- trunc(.2 * m * n)
## entries in simple_triplet_matrix clas
## *must* be in column major order
nnz <- sort(sample(m*n,nnz,replace=FALSE)-1)
Amat <- simple_triplet_matrix(
i = (nnz %% m) + 1,
j = trunc(nnz/m) + 1,
v = rnorm(nnz),
nrow=m,ncol=n)
x0 <- runif(n)
b <- as.matrix(Amat) %*% x0
cvec <- rnorm(n)
res <- Rcplex(cvec,Amat,b,sense='E',control=list(method=4))
print(res)
## A quadratic problem (this is qpex1.c in the CPLEX examples)
cvec <- c(1,2,3)
Qmat <- matrix(c(-33,6,0,
6,-22,11.5,
0,11.5,-11),
byrow=TRUE,
nc=3)
Amat <- matrix(c(-1,1,1,
1,-3,1),
byrow=TRUE,nc=3)
bvec <- c(20,30)
ub <- c(40,Inf,Inf)
res <- Rcplex(cvec,Amat,bvec,Qmat,ub=ub,objsense="max")
print(res)
## A mixed integer linear program (mipex1.c in the CPLEX examples)
cvec <- c(1,2,3,1)
Amat <- matrix(c(-1,1,1,10,
1,-3,1,0,
0,1,0,-3.5),
byrow=TRUE, nc=4)
bvec <- c(20,30,0)
lb <- c(0,0,0,2)
ub <- c(40,Inf,Inf,3)
vtype <- c(rep("C",3),"I")
res <- Rcplex(cvec,Amat,bvec,lb=lb,ub=ub,sense=c("L","L","E"),
objsense="max",vtype=vtype)
print(res)
## A mixed integer quadratic program
cvec <- c(1,2,3,1)
Qmat <- matrix(c(-33,6,0,0,
6,-22,11.5,0,
0,11.5,-11,0,
0,0,0,0),
byrow=TRUE, nc=4)
Amat <- matrix(c(-1,1,1,10,
1,-3,1,0,
0,1,0,-3.5),
byrow=TRUE, nc=4)
bvec <- c(20,30,0)
ub <- c(40,Inf,Inf,3)
vtype <- c(rep("C",3),"I")
res <- Rcplex(cvec,Amat,bvec,Qmat=Qmat,ub=ub,sense=c("L","L","E"),
objsense="max",vtype=vtype)
print(res)
Rcplex.close()
Run the code above in your browser using DataLab