diff --git a/DESCRIPTION b/DESCRIPTION index 4cec144706a15b19be9991ba7177caa997533e61..460ab84b356997164b09e4d0136d651c4f506ab3 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,8 +1,8 @@ Package: clpAPI Type: Package Title: R Interface to C API of COIN-OR Clp -Version: 1.2.7 -Date: 2016-04-18 +Version: 1.2.8 +Date: 2018-02-28 Authors@R: c(person(c("C.", "Jonathan"), "Fritzemeier", role = c("cre", "ctb"), email = "clausjonathan.fritzemeier@uni-duesseldorf.de"), person("Gabriel", "Gelius-Dietrich", role = c("aut"), email = "geliudie@uni-duesseldorf.de")) Depends: R (>= 2.6.0) @@ -17,4 +17,4 @@ Author: C. Jonathan Fritzemeier [cre, ctb], Gabriel Gelius-Dietrich [aut] Maintainer: C. Jonathan Fritzemeier <clausjonathan.fritzemeier@uni-duesseldorf.de> NeedsCompilation: yes Repository: CRAN -Date/Publication: 2016-04-18 09:33:15 +Date/Publication: 2018-02-28 09:33:15 diff --git a/NAMESPACE b/NAMESPACE index cb546f186266591e1f4053f26e3a4a0453bee0ad..c46671dd65ac33b548add7c25be87ab019acbf8a 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -33,6 +33,9 @@ getColUpperCLP, getIndCLP, getLogLevelCLP, getNnzCLP, +getMaximumIterationsCLP, +getMaximumSecondsCLP, +getHitMaximumIterationsCLP, getNumColsCLP, getNumNnzCLP, getNumRowsCLP, @@ -62,6 +65,9 @@ return_codeCLP, #rowNameCLP, saveModelCLP, scaleModelCLP, +setNumberIterationsCLP, +setMaximumIterationsCLP, +setMaximumSecondsCLP, setLogLevelCLP, setObjDirCLP, solveInitialBarrierCLP, diff --git a/R/clpAPI.R b/R/clpAPI.R index 95644a57180eacdae8cb2422a990d3a0105b9d98..ce15e74923d4b2024f2656f994035e06e9b9f098 100644 --- a/R/clpAPI.R +++ b/R/clpAPI.R @@ -368,10 +368,38 @@ loadMatrixCLP <- function(lp, ncols, nrows, ia, ja, ra) { ) } +#------------------------------------------------------------------------------# + +getMaximumIterationsCLP <- function(lp) { + + nnz <- .Call("getMaximumIterations", PACKAGE = "clpAPI", + clpPointer(lp) + ) + return(nnz) +} + +#------------------------------------------------------------------------------# + +getMaximumSecondsCLP <- function(lp) { + + nnz <- .Call("getMaximumSeconds", PACKAGE = "clpAPI", + clpPointer(lp) + ) + return(nnz) +} #------------------------------------------------------------------------------# +getHitMaximumIterationsCLP <- function(lp) { + + nnz <- .Call("getHitMaximumIterations", PACKAGE = "clpAPI", + clpPointer(lp) + ) + return(nnz) + +} +#------------------------------------------------------------------------------# getNumNnzCLP <- function(lp) { nnz <- .Call("getNumNnz", PACKAGE = "clpAPI", @@ -442,10 +470,45 @@ printModelCLP <- function(lp, prefix = "CLPmodel") { ) } +#------------------------------------------------------------------------------# + +setNumberIterationsCLP <- function(lp, iterations) { + + invisible( + .Call("setNumberIterations", PACKAGE = "clpAPI", + clpPointer(lp), + as.integer(iterations) + ) + ) + +} + +#------------------------------------------------------------------------------# + +setMaximumIterationsCLP <- function(lp, iterations) { + + invisible( + .Call("setMaximumIterations", PACKAGE = "clpAPI", + clpPointer(lp), + as.integer(iterations) + ) + ) +} #------------------------------------------------------------------------------# +setMaximumSecondsCLP <- function(lp, seconds) { + + invisible( + .Call("setMaximumSeconds", PACKAGE = "clpAPI", + clpPointer(lp), + as.numeric(seconds) + ) + ) + +} +#------------------------------------------------------------------------------# setLogLevelCLP <- function(lp, amount) { invisible( diff --git a/inst/NEWS.Rd b/inst/NEWS.Rd index 206ab03431841ed728a6f655e378a70191c31c78..66a5e0a4ffba18e2e2277b9c19d88c8386ea7001 100644 --- a/inst/NEWS.Rd +++ b/inst/NEWS.Rd @@ -3,6 +3,14 @@ \name{NEWS} \title{clpAPI News} \encoding{UTF-8} +% ---------------------------------------------------------------------------- % +\section{Changes in version 1.2.8 2018-02-28}{ + \itemize{ + \item Added the functions \code{setNumberIterationsCLP}, \code{setMaximumIterationsCLP}, + \code{setMaximumSecondsCLP}, \code{getMaximumIterationsCLP}, + \code{getMaximumSecondsCLP}, and \code{getHitMaximumIterationsCLP}. + } +} % ---------------------------------------------------------------------------- % \section{Changes in version 1.2.7 2016-04-18}{ diff --git a/src/clpAPI.c b/src/clpAPI.c index 8b590e8feab2a9995a310c17fb3e03ab9add8dba..8974756f8e241573ac67815e920c6ae5d2eeb171 100644 --- a/src/clpAPI.c +++ b/src/clpAPI.c @@ -230,7 +230,53 @@ SEXP addCols(SEXP lp, SEXP ncols, return out; } +/* -------------------------------------------------------------------------- */ +/* get maximum number of iterations */ +SEXP getMaximumIterations(SEXP lp) { + + SEXP out = R_NilValue; + int iterations = 0; + + checkProb(lp); + + iterations = maximumIterations(R_ExternalPtrAddr(lp)); + + out = Rf_ScalarInteger(iterations); + + return out; +} + +/* -------------------------------------------------------------------------- */ +/* get maximum number of seconds */ +SEXP getMaximumSeconds(SEXP lp) { + + SEXP out = R_NilValue; + double seconds = 0; + + checkProb(lp); + + seconds = Clp_maximumSeconds(R_ExternalPtrAddr(lp)); + + out = Rf_ScalarReal(seconds); + + return out; +} + +/* -------------------------------------------------------------------------- */ +/* get if maxium iteration bound was hit*/ +SEXP getHitMaximumIterations(SEXP lp) { + + SEXP out = R_NilValue; + int iterations = 0; + + checkProb(lp); + + iterations = Clp_hitMaximumIterations(R_ExternalPtrAddr(lp)); + + out = Rf_ScalarInteger(iterations); + return out; +} /* -------------------------------------------------------------------------- */ /* get number of rows */ @@ -676,6 +722,42 @@ SEXP printModel(SEXP lp, SEXP prefix) { return out; } +/* -------------------------------------------------------------------------- */ +/* set number of iterations */ +SEXP setNumberIterations(SEXP lp, SEXP iterations) { + + SEXP out = R_NilValue; + + checkProb(lp); + + Clp_setNumberIterations(R_ExternalPtrAddr(lp), Rf_asInteger(iterations)); + + return out; +} +/* -------------------------------------------------------------------------- */ +/* set maximal number of iterations */ +SEXP setMaximumIterations(SEXP lp, SEXP iterations) { + + SEXP out = R_NilValue; + + checkProb(lp); + + Clp_setMaximumIterations(R_ExternalPtrAddr(lp), Rf_asInteger(iterations)); + + return out; +} +/* -------------------------------------------------------------------------- */ +/* set maximal duration in seconds */ +SEXP setMaximumSeconds(SEXP lp, SEXP seconds) { + + SEXP out = R_NilValue; + + checkProb(lp); + + Clp_setMaximumSeconds(R_ExternalPtrAddr(lp), Rf_asReal(seconds)); + + return out; +} /* -------------------------------------------------------------------------- */ /* amount of print out */ diff --git a/src/clpAPI.h b/src/clpAPI.h index 043c1cb39410a00e7eddf77269cc798b5e73bdd0..51e6116598fc598ae9c84e6ff0da65f911dc6ab8 100644 --- a/src/clpAPI.h +++ b/src/clpAPI.h @@ -67,6 +67,15 @@ SEXP addRows(SEXP lp, SEXP nrows, SEXP addCols(SEXP lp, SEXP ncols, SEXP lb, SEXP ub, SEXP obj, SEXP colst, SEXP rows, SEXP val); +/* get maximum number of iterations */ +SEXP getMaximumIterations(SEXP lp); + +/* get maximum number of seconds */ +SEXP getMaximumSeconds(SEXP lp); + +/* get if maxium iteration bound was hit*/ +SEXP getHitMaximumIterations(SEXP lp); + /* get number of rows */ SEXP getNumRows(SEXP lp); @@ -129,6 +138,15 @@ SEXP getNnz(SEXP lp); /* print model */ SEXP printModel(SEXP lp, SEXP prefix); +/* set number of iterations */ +SEXP setNumberIterations(SEXP lp, SEXP iterations); + +/* set maximal number of iterations */ +SEXP setMaximumIterations(SEXP lp, SEXP iterations); + +/* set maximal duration in seconds */ +SEXP setMaximumSeconds(SEXP lp, SEXP seconds); + /* amount of print out */ SEXP setLogLevel(SEXP lp, SEXP amount); diff --git a/src/init.c b/src/init.c index 83045757938546fa57b72076458e0c0d40b13d6c..ca231a2faed94de3a941c65f81c9dbefc9a64eb9 100644 --- a/src/init.c +++ b/src/init.c @@ -90,6 +90,12 @@ static const R_CallMethodDef callMethods[] = { {"rowName", (DL_FUNC) &rowName, 3}, {"colName", (DL_FUNC) &colName, 3}, {"probName", (DL_FUNC) &probName, 3}, + {"setNumberIterations", (DL_FUNC) &setNumberIterations, 2}, + {"setMaximumIterations", (DL_FUNC) &setMaximumIterations, 2}, + {"setMaximumSeconds", (DL_FUNC) &setMaximumSeconds, 2}, + {"getMaximumIterations", (DL_FUNC) &getMaximumIterations, 1}, + {"getMaximumSeconds", (DL_FUNC) &getMaximumSeconds, 1}, + {"getHitMaximumIterations", (DL_FUNC) &getHitMaximumIterations, 1}, {NULL, NULL, 0} };