diff --git a/NAMESPACE b/NAMESPACE index 5206eeab57ca1ef2958fb135685538b85d6f2de5..409693445639dcb980e0b0b3409c096388a2fe06 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -126,6 +126,7 @@ getMIPstartsCPLEX, getNumColsCPLEX, getNumMIPstartsCPLEX, getNumNnzCPLEX, +getNumQConstrsCPLEX, getNumQuadCPLEX, getOrderCPLEX, getQConstrCPLEX, diff --git a/R/cplexAPI.R b/R/cplexAPI.R index 3a9cd8758d2bd91963d5253a6b34a2b8044179dc..848895df53f2fc35efb156465b35c0e29f51873a 100644 --- a/R/cplexAPI.R +++ b/R/cplexAPI.R @@ -3063,6 +3063,19 @@ readCopyOrderCPLEX <- function(env, lp, fname) { } + + +#------------------------------------------------------------------------------# +getNumQConstrsCPLEX <- function(env, lp) { + + nq <- .Call("getNumQConstrs", PACKAGE = "cplexAPI", + cplexPointer(env), + cplexPointer(lp) + ) + + return(nq) +} + #------------------------------------------------------------------------------# addQConstrCPLEX <- function(env, lp, lzn, qzn, rhs, sense, diff --git a/inst/NEWS.Rd b/inst/NEWS.Rd index b5a0cd46f1bb81b50e6dd9dfe11931576adec5c4..4db336b4202d125bb9560328747671845cae908d 100644 --- a/inst/NEWS.Rd +++ b/inst/NEWS.Rd @@ -8,6 +8,8 @@ \section{Changes in version 1.3.2 2016-11-16}{ \itemize{ \item Fixed a bug in \code{getQuad()}. Thx to Florian Schwendinger. + \item Added function \code{getNumQConstrsCPLEX} to access cplex function + \code{CPXgetnumqconstrs} } } diff --git a/inst/c2r.map b/inst/c2r.map index bf4b0412483df2dd9e064ff10dadf5b45b7c4949..4dced44afd1f122a86eeb265b42960f75dd9da1c 100644 --- a/inst/c2r.map +++ b/inst/c2r.map @@ -95,6 +95,7 @@ CPXgetdj <- cplexAPI::getDjCPLEX CPXgeterrorstring <- cplexAPI::getErrorStrCPLEX CPXgetgrad <- cplexAPI::getGradCPLEX CPXgetindconstr <- cplexAPI::getIndConstrCPLEX +CPXgetnumqconstrs <- cplexAPI::getNumQConstrsCPLEX CPXinfodblparam <- cplexAPI::getInfoDblParmCPLEX CPXinfointparam <- cplexAPI::getInfoIntParmCPLEX CPXinfolongparam <- cplexAPI::getInfoLongParmCPLEX diff --git a/man/getNumQConstrsCPLEX.Rd b/man/getNumQConstrsCPLEX.Rd new file mode 100644 index 0000000000000000000000000000000000000000..da5c4563979ba2a70b3375c6722f0dcaf4815062 --- /dev/null +++ b/man/getNumQConstrsCPLEX.Rd @@ -0,0 +1,55 @@ +\name{getNumQConstrsCPLEX} +\alias{getNumQConstrsCPLEX} +\alias{CPXgetnumqconstrs} + +\title{ + Return the Number of quadratic constraints. +} + +\description{ + Low level interface function to the IBM ILOG CPLEX function + \code{CPXgetnumqconstrs}. Consult the IBM ILOG CPLEX documentation for more + detailed information. +} + +\usage{ + getNumQConstrsCPLEX(env, lp) +} + +\arguments{ + \item{env}{ + An object of class \code{"\linkS4class{cplexPtr}"} as returned by + \code{\link{openEnvCPLEX}}. This is basically a pointer to an + IBM ILOG CPLEX environment. + } + \item{lp}{ + An object of class \code{"\linkS4class{cplexPtr}"} as returned by + \code{\link{initProbCPLEX}}. This is basically a pointer to an + IBM ILOG CPLEX problem object. + } +} + +\details{ + Interface to the C function \code{getNumQConstrs} which calls the CPLEX + function \code{CPXgetnumqconstrs}. +} + +\value{ + If successful the number of quadratic constraints is returned. + If \code{env} or \code{lp} do not exist, zero is + returned. +} + +\references{ + The IBM ILOG CPLEX home page at + \url{https://www.ibm.com/developerworks/university/academicinitiative/}. +} + +\author{ + Claus Jonathan Fritzemeier <clausjonathan.fritzemeier@uni-duesseldorf.de> + + Maintainer: Claus Jonathan Fritzemeier <clausjonathan.fritzemeier@uni-duesseldorf.de> +} + + +\keyword{ optimize } diff --git a/src/cplexAPI.c b/src/cplexAPI.c index 496e5598e96916e4ef58aba8d11ae9ba5986d5d6..7228412f094579545ad39e2f1aaa9c22b7d03eee 100644 --- a/src/cplexAPI.c +++ b/src/cplexAPI.c @@ -6195,6 +6195,7 @@ SEXP ordWrite(SEXP env, SEXP lp, SEXP fname) { } + /* -------------------------------------------------------------------------- */ /* read ORD file and copy priority order information into a problem object */ SEXP readCopyOrder(SEXP env, SEXP lp, SEXP fname) { @@ -6218,6 +6219,24 @@ SEXP readCopyOrder(SEXP env, SEXP lp, SEXP fname) { } +/* -------------------------------------------------------------------------- */ +/* get number of quadratic constraint of a specified CPLEX problem object */ +SEXP getNumQConstrs(SEXP env, SEXP lp) { + + SEXP out = R_NilValue; + int qconstrs = 0; + + checkEnv(env); + checkProb(lp); + + qconstrs = CPXgetnumqconstrs(R_ExternalPtrAddr(env), + R_ExternalPtrAddr(lp)); + + out = Rf_ScalarInteger(qconstrs); + + return out; +} + /* -------------------------------------------------------------------------- */ /* add quadratic constraint to a specified CPLEX problem object */ SEXP addQConstr(SEXP env, SEXP lp, SEXP lzn, SEXP qzn, diff --git a/src/cplexAPI.h b/src/cplexAPI.h index ccfd9cf67fbda638ba5f3b2acaff12415f3b9d1b..cb0d7747e35e6024b4d8031aa3c09293885994fc 100644 --- a/src/cplexAPI.h +++ b/src/cplexAPI.h @@ -678,6 +678,9 @@ SEXP ordWrite(SEXP env, SEXP lp, SEXP fname); /* read ORD file and copy priority order information into a problem object */ SEXP readCopyOrder(SEXP env, SEXP lp, SEXP fname); +/* get number of quadratic constraint of a specified CPLEX problem object */ +SEXP getNumQConstrs(SEXP env, SEXP lp); + /* add quadratic constraint to a specified CPLEX problem object */ SEXP addQConstr(SEXP env, SEXP lp, SEXP lzn, SEXP qzn, SEXP rhs, SEXP sense, diff --git a/src/init.c b/src/init.c index daddb10fd58dee1b3151b91d51f8ca9d2817654e..e0c37eb2fa749df72269c3daac1fe2e8a9fb6013 100644 --- a/src/init.c +++ b/src/init.c @@ -220,6 +220,7 @@ static const R_CallMethodDef callMethods[] = { {"getOrder", (DL_FUNC) &getOrder, 2}, {"ordWrite", (DL_FUNC) &ordWrite, 3}, {"readCopyOrder", (DL_FUNC) &readCopyOrder, 3}, + {"getNumQConstrs", (DL_FUNC) &getNumQConstrs, 2}, {"addQConstr", (DL_FUNC) &addQConstr, 12}, {"delQConstrs", (DL_FUNC) &delQConstrs, 4}, {"getQConstr", (DL_FUNC) &getQConstr, 3},