From 3509c47947f87329a4c4da98ad84a9cfc1235a49 Mon Sep 17 00:00:00 2001 From: Claus Jonathan Fritzemeier <clausjonathan.fritzemeier@hhu.de> Date: Wed, 18 Jan 2017 11:21:16 +0100 Subject: [PATCH] getNumQConstrsCPLEX function added --- NAMESPACE | 1 + R/cplexAPI.R | 13 +++++++++ inst/NEWS.Rd | 2 ++ inst/c2r.map | 1 + man/getNumQConstrsCPLEX.Rd | 55 ++++++++++++++++++++++++++++++++++++++ src/cplexAPI.c | 19 +++++++++++++ src/cplexAPI.h | 3 +++ src/init.c | 1 + 8 files changed, 95 insertions(+) create mode 100644 man/getNumQConstrsCPLEX.Rd diff --git a/NAMESPACE b/NAMESPACE index 5206eea..4096934 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 3a9cd87..848895d 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 b5a0cd4..4db336b 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 bf4b041..4dced44 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 0000000..da5c456 --- /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 496e559..7228412 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 ccfd9cf..cb0d774 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 daddb10..e0c37eb 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}, -- GitLab