implementation of NLPI oracle
Definition in file nlpioracle.c.
#include "scip/scip.h"#include "scip/nlpioracle.h"#include "scip/exprinterpret.h"#include "scip/expr_pow.h"#include "scip/expr_varidx.h"#include <string.h>Go to the source code of this file.
Data Structures | |
| struct | SCIP_NlpiOracleCons |
| struct | SCIP_NlpiOracle |
| typedef struct SCIP_NlpiOracleCons SCIP_NLPIORACLECONS |
Definition at line 61 of file nlpioracle.c.
|
static |
ensures that those arrays in oracle that store information on variables have at least a given length
Definition at line 123 of file nlpioracle.c.
References assert(), NULL, SCIP_CALL, SCIP_OKAY, SCIPcalcMemGrowSize(), SCIPreallocBlockMemoryArray, SCIP_NlpiOracle::varlbs, SCIP_NlpiOracle::varlincount, SCIP_NlpiOracle::varnames, SCIP_NlpiOracle::varnlcount, SCIP_NlpiOracle::varssize, and SCIP_NlpiOracle::varubs.
Referenced by SCIPnlpiOracleAddVars().
|
static |
ensures that constraints array in oracle has at least a given length
Definition at line 156 of file nlpioracle.c.
References assert(), SCIP_NlpiOracle::conss, SCIP_NlpiOracle::consssize, NULL, SCIP_CALL, SCIP_OKAY, and SCIPensureBlockMemoryArray.
Referenced by SCIPnlpiOracleAddConstraints().
|
static |
ensures that arrays for linear part in a oracle constraints have at least a given length
Definition at line 172 of file nlpioracle.c.
References assert(), SCIP_NlpiOracleCons::lincoefs, SCIP_NlpiOracleCons::linidxs, SCIP_NlpiOracleCons::linsize, NULL, SCIP_CALL, SCIP_OKAY, SCIPcalcMemGrowSize(), and SCIPreallocBlockMemoryArray.
Referenced by SCIPnlpiOracleChgLinearCoefs().
|
static |
ensures that a given array of integers has at least a given length
| scip | SCIP data structure |
| intarray | array of integers |
| len | length of array (modified if reallocated) |
| minsize | minimal required array length |
Definition at line 198 of file nlpioracle.c.
References assert(), NULL, SCIP_CALL, SCIP_OKAY, and SCIPensureBlockMemoryArray.
Referenced by computeRowJacobianSparsity(), and hessLagSparsitySetNzFlagForExpr().
|
static |
ensures that a given array of booleans has at least a given length, and clears the newly allocated memory
| scip | SCIP data structure |
| boolarray | array of bools |
| len | length of array (modified if reallocated) |
| minsize | minimal required array length |
Definition at line 216 of file nlpioracle.c.
References assert(), BMSclearMemoryArray, NULL, SCIP_Bool, SCIP_CALL, SCIP_OKAY, and SCIPensureBlockMemoryArray.
Referenced by computeRowJacobianSparsity().
|
static |
Invalidates the sparsity pattern of the Jacobian. Should be called when constraints are added or deleted.
Definition at line 240 of file nlpioracle.c.
References assert(), SCIP_NlpiOracle::jaccolnlflags, SCIP_NlpiOracle::jaccoloffsets, SCIP_NlpiOracle::jaccols, SCIP_NlpiOracle::jacrownlflags, SCIP_NlpiOracle::jacrowoffsets, SCIP_NlpiOracle::jacrows, SCIP_NlpiOracle::nconss, SCIP_NlpiOracle::njacnlnz, SCIP_NlpiOracle::nobjgradnlnz, SCIP_NlpiOracle::nobjgradnz, NULL, SCIP_NlpiOracle::nvars, SCIP_NlpiOracle::objgradnz, SCIP_NlpiOracle::objnlflags, SCIPdebugMessage, and SCIPfreeBlockMemoryArray.
Referenced by SCIPnlpiOracleAddConstraints(), SCIPnlpiOracleChgExpr(), SCIPnlpiOracleChgLinearCoefs(), SCIPnlpiOracleDelConsSet(), SCIPnlpiOracleDelVarSet(), and SCIPnlpiOracleFree().
|
static |
Invalidates the sparsity pattern of the Hessian of the Lagragian. Should be called when the objective is set or constraints are added or deleted.
Definition at line 296 of file nlpioracle.c.
References assert(), SCIP_NlpiOracle::heslagnzs, SCIP_NlpiOracle::heslagoffsets, NULL, SCIP_NlpiOracle::nvars, SCIPdebugMessage, and SCIPfreeBlockMemoryArray.
Referenced by SCIPnlpiOracleAddConstraints(), SCIPnlpiOracleAddVars(), SCIPnlpiOracleChgExpr(), SCIPnlpiOracleDelConsSet(), SCIPnlpiOracleDelVarSet(), SCIPnlpiOracleFree(), and SCIPnlpiOracleSetObjective().
|
static |
increases or decreases variable counts in oracle w.r.t. linear and nonlinear appearance
| scip | SCIP data structure |
| oracle | oracle data structure |
| factor | whether to add (factor=1) or remove (factor=-1) variable counts |
| nlinidxs | number of linear indices |
| linidxs | indices of variables in linear part |
| expr | expression |
Definition at line 319 of file nlpioracle.c.
References assert(), FALSE, NULL, SCIP_CALL, SCIP_EXPRITER_DFS, SCIP_OKAY, SCIPcreateExpriter(), SCIPexpriterGetNext(), SCIPexpriterInit(), SCIPexpriterIsEnd(), SCIPfreeExpriter(), SCIPgetIndexExprVaridx(), SCIPisExprVaridx(), SCIP_NlpiOracle::varlincount, and SCIP_NlpiOracle::varnlcount.
Referenced by createConstraint(), freeConstraint(), SCIPnlpiOracleChgExpr(), SCIPnlpiOracleChgLinearCoefs(), and SCIPnlpiOracleDelConsSet().
|
static |
sorts a linear term, merges duplicate entries and removes entries with coefficient 0.0
| nidxs | number of variables |
| idxs | indices of variables |
| coefs | coefficients of variables |
Definition at line 364 of file nlpioracle.c.
References assert(), NULL, SCIP_Real, and SCIPsortIntReal().
Referenced by createConstraint(), and SCIPnlpiOracleChgLinearCoefs().
|
static |
creates a NLPI constraint from given constraint data
| scip | SCIP data structure |
| oracle | pointer to NLPIORACLE data structure |
| cons | buffer where to store pointer to constraint |
| nlinidxs | length of linear part |
| linidxs | indices of linear part, or NULL if nlinidxs == 0 |
| lincoefs | coefficients of linear part, or NULL if nlinidxs == 0 |
| expr | expression, or NULL |
| lhs | left-hand-side of constraint |
| rhs | right-hand-side of constraint |
| name | name of constraint, or NULL |
Definition at line 413 of file nlpioracle.c.
References assert(), EPSEQ, EPSLE, SCIP_NlpiOracle::exprinterpreter, NULL, SCIP_CALL, SCIP_DEFAULT_EPSILON, SCIP_OKAY, SCIP_Real, SCIPallocClearBlockMemory, SCIPcaptureExpr(), SCIPduplicateBlockMemoryArray, SCIPexprintCompile(), sortLinearCoefficients(), and updateVariableCounts().
Referenced by SCIPnlpiOracleAddConstraints(), SCIPnlpiOracleCreate(), and SCIPnlpiOracleSetObjective().
|
static |
frees a constraint
| scip | SCIP data structure |
| oracle | pointer to NLPIORACLE data structure |
| cons | pointer to constraint that should be freed |
| updatevarcount | whether the update variable counts (typically TRUE) |
Definition at line 476 of file nlpioracle.c.
References assert(), SCIP_NlpiOracle::exprinterpreter, NULL, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIPdebugMessage, SCIPexprintFreeData(), SCIPfreeBlockMemory, SCIPfreeBlockMemoryArrayNull, SCIPreleaseExpr(), and updateVariableCounts().
Referenced by freeConstraints(), SCIPnlpiOracleDelConsSet(), SCIPnlpiOracleFree(), and SCIPnlpiOracleSetObjective().
|
static |
frees all constraints
Definition at line 520 of file nlpioracle.c.
References assert(), SCIP_NlpiOracle::conss, SCIP_NlpiOracle::consssize, FALSE, freeConstraint(), i, SCIP_NlpiOracle::nconss, NULL, SCIP_CALL, SCIP_OKAY, SCIPdebugMessage, and SCIPfreeBlockMemoryArrayNull.
Referenced by SCIPnlpiOracleDelConsSet(), and SCIPnlpiOracleFree().
|
static |
moves one variable The place where it moves to need to be empty (all NULL) but allocated. Note that this function does not update the variable indices in the constraints!
| scip | SCIP data structure |
| oracle | pointer to store NLPIORACLE data structure |
| fromidx | index of variable to move |
| toidx | index of place where to move variable to |
Definition at line 549 of file nlpioracle.c.
References assert(), NULL, nvars, SCIP_OKAY, SCIPdebugMessage, SCIPinfinity(), SCIP_NlpiOracle::varlbs, SCIP_NlpiOracle::varlincount, SCIP_NlpiOracle::varnames, SCIP_NlpiOracle::varnlcount, and SCIP_NlpiOracle::varubs.
Referenced by SCIPnlpiOracleDelVarSet().
|
static |
frees all variables
Definition at line 588 of file nlpioracle.c.
References assert(), i, NULL, SCIP_NlpiOracle::nvars, SCIPdebugMessage, SCIPfreeBlockMemoryArray, SCIPfreeBlockMemoryArrayNull, SCIP_NlpiOracle::varlbs, SCIP_NlpiOracle::varlincount, SCIP_NlpiOracle::varnames, SCIP_NlpiOracle::varnlcount, SCIP_NlpiOracle::varssize, and SCIP_NlpiOracle::varubs.
Referenced by SCIPnlpiOracleDelVarSet(), and SCIPnlpiOracleFree().
|
static |
applies a mapping of indices to one array of indices
| indexmap | mapping from old variable indices to new indices |
| nindices | number of indices in indices1 and indices2 |
| indices | array of indices to adjust |
Definition at line 622 of file nlpioracle.c.
References assert(), and NULL.
Referenced by SCIPnlpiOracleDelVarSet().
|
static |
removes entries with index -1 (marked as deleted) from array of linear elements assumes that array is sorted by index, i.e., all -1 are at the beginning
| linidxs | variable indices |
| coefs | variable coefficients |
| nidxs | number of indices |
Definition at line 642 of file nlpioracle.c.
References assert(), i, NULL, SCIP_Real, and SCIPdebugMessage.
Referenced by SCIPnlpiOracleDelVarSet().
|
static |
computes the value of a function
| scip | SCIP data structure |
| oracle | pointer to NLPIORACLE data structure |
| cons | oracle constraint |
| x | the point where to evaluate |
| val | pointer to store function value |
Definition at line 680 of file nlpioracle.c.
References ABS, assert(), SCIP_NlpiOracleCons::expr, SCIP_NlpiOracleCons::exprintdata, SCIP_NlpiOracle::exprinterpreter, SCIP_NlpiOracleCons::lincoefs, SCIP_NlpiOracleCons::linidxs, SCIP_NlpiOracleCons::nlinidxs, NULL, SCIP_NlpiOracle::nvars, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPdebugMessage, SCIPexprintEval(), SCIPisFinite, SCIPisInfinity(), and x.
Referenced by SCIPnlpiOracleEvalConstraintValue(), SCIPnlpiOracleEvalConstraintValues(), and SCIPnlpiOracleEvalObjectiveValue().
|
static |
computes the value and gradient of a function
| scip | SCIP data structure |
| oracle | pointer to NLPIORACLE data structure |
| cons | oracle constraint |
| x | the point where to evaluate |
| isnewx | has the point x changed since the last call to some evaluation function? |
| val | pointer to store function value |
| grad | pointer to store function gradient |
Definition at line 733 of file nlpioracle.c.
References ABS, assert(), BMSclearMemoryArray, SCIP_NlpiOracleCons::expr, SCIP_NlpiOracleCons::exprintdata, SCIP_NlpiOracle::exprinterpreter, i, SCIP_NlpiOracleCons::lincoefs, SCIP_NlpiOracleCons::linidxs, SCIP_NlpiOracleCons::nlinidxs, NULL, SCIP_NlpiOracle::nvars, RESTRICT, SCIP_Bool, SCIP_CALL, SCIP_INVALIDDATA, SCIP_OKAY, SCIP_Real, SCIPdebug, SCIPdebugMessage, SCIPdebugMsg, SCIPexprintGrad(), SCIPisFinite, SCIPisInfinity(), and x.
Referenced by SCIPnlpiOracleEvalConstraintGradient(), and SCIPnlpiOracleEvalObjectiveGradient().
|
static |
compute rowwise sparsity of the Jacobian
| scip | SCIP data structure |
| oracle | NLPI oracle |
| nnz | counter for the number of nonzeroes |
| nvarnnz | for each variable, number of constraints it has a nonzero in; can be NULL if not needed |
Definition at line 805 of file nlpioracle.c.
References assert(), BMSclearMemoryArray, BMScopyMemoryArray, SCIP_NlpiOracle::conss, ensureClearBoolArraySize(), ensureIntArraySize(), SCIP_NlpiOracleCons::expr, FALSE, i, SCIP_NlpiOracle::jaccolnlflags, SCIP_NlpiOracle::jaccols, SCIP_NlpiOracle::jacrowoffsets, SCIP_NlpiOracleCons::linidxs, MIN, SCIP_NlpiOracle::nconss, SCIP_NlpiOracle::njacnlnz, SCIP_NlpiOracleCons::nlinidxs, NULL, SCIP_NlpiOracle::nvars, SCIP_Bool, SCIP_CALL, SCIP_EXPRITER_DFS, SCIP_OKAY, SCIPallocBlockMemoryArray, SCIPallocClearBlockMemoryArray, SCIPcreateExpriter(), SCIPexpriterGetNext(), SCIPexpriterInit(), SCIPexpriterIsEnd(), SCIPexpriterRestartDFS(), SCIPfreeBlockMemoryArray, SCIPfreeExpriter(), SCIPgetIndexExprVaridx(), SCIPisExprVaridx(), SCIPreallocBlockMemoryArray, and TRUE.
Referenced by SCIPnlpiOracleGetJacobianColSparsity(), and SCIPnlpiOracleGetJacobianRowSparsity().
|
static |
collects indices of nonzero entries in the lower-left part of the hessian matrix of an expression adds the indices to a given set of indices, avoiding duplicates
| scip | SCIP data structure |
| oracle | NLPI oracle |
| nz | indices of nonzero entries for each column (if col) or row |
| len | space allocated to store indices of nonzeros for each column (if col) or row |
| nnz | number of nonzero entries for each column (if col) or row |
| nzcount | counter for total number of nonzeros; should be increased when nzflag is set to 1 the first time |
| expr | expression |
| exprintdata | expression interpreter data for expression |
| dim | dimension of matrix |
| colwise | tells the function whether a column-wise (TRUE) or row-wise representation is needed |
Definition at line 919 of file nlpioracle.c.
References assert(), ensureIntArraySize(), SCIP_NlpiOracle::exprinterpreter, i, NULL, nvars, SCIP_NlpiOracle::nvars, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPallocBufferArray, SCIPdebugMessage, SCIPexprintHessianSparsity(), SCIPfreeBufferArray, SCIPsortedvecFindInt(), SCIPsortedvecInsertInt(), and x.
Referenced by SCIPnlpiOracleGetHessianLagSparsity().
|
static |
adds hessian of an expression into hessian structure
| scip | SCIP data structure |
| oracle | oracle |
| weight | weight of quadratic part |
| x | point for which hessian should be returned |
| new_x | whether point has been evaluated before |
| expr | expression |
| exprintdata | expression interpreter data for expression |
| hesoffset | column (if colwise = TRUE) or row offsets in sparse matrix that is to be filled |
| hesnzidcs | row (if colwise = TRUE) or column indices in sparse matrix that is to be filled |
| values | buffer for values of sparse matrix that is to be filled |
| colwise | whether the entries should be first sorted column-wise (TRUE) or row-wise |
Definition at line 992 of file nlpioracle.c.
References assert(), SCIP_NlpiOracle::exprinterpreter, FALSE, h, i, NULL, SCIP_Bool, SCIP_CALL, SCIP_ERROR, SCIP_INVALIDDATA, SCIP_OKAY, SCIP_Real, SCIPdebugMessage, SCIPerrorMessage, SCIPexprintHessian(), SCIPisFinite, SCIPsortedvecFindInt(), and x.
Referenced by SCIPnlpiOracleEvalHessianLag().
|
static |
prints a name, if available, makes sure it has not more than 64 characters, and adds a unique prefix if the longnames flag is set
| buffer | buffer to print to, has to be not NULL and should be at least 65 bytes |
| name | name, or NULL |
| idx | index of var or cons which the name corresponds to |
| prefix | a letter (typically 'x' or 'e') to distinguish variable and equation names, if names[idx] is not available |
| suffix | a suffer to add to the name, or NULL |
| longnames | whether prefixes for long names should be added |
Definition at line 1075 of file nlpioracle.c.
References assert(), NULL, SCIP_Bool, and SCIPsnprintf().
Referenced by printFunction(), and SCIPnlpiOraclePrintProblemGams().
|
static |
prints a function
| scip | SCIP data structure |
| oracle | pointer to NLPIORACLE data structure |
| file | file to print to, has to be not NULL |
| cons | constraint which function to print |
| longvarnames | whether variable names need to be shorten to 64 characters |
Definition at line 1110 of file nlpioracle.c.
References assert(), SCIP_NlpiOracleCons::expr, i, SCIP_NlpiOracleCons::lincoefs, SCIP_NlpiOracleCons::linidxs, SCIP_NlpiOracleCons::nlinidxs, NULL, printName(), SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIPdebugMessage, SCIPinfoMessage(), SCIPprintExpr(), and SCIP_NlpiOracle::varnames.
Referenced by SCIPnlpiOraclePrintProblem(), and SCIPnlpiOraclePrintProblemGams().
|
static |
returns whether an expression contains nonsmooth operands (min, max, abs, ...)
| scip | SCIP data structure |
| expr | expression |
| nonsmooth | buffer to store whether expression seems nonsmooth |
Definition at line 1147 of file nlpioracle.c.
References assert(), FALSE, NULL, SCIP_Bool, SCIP_CALL, SCIP_EXPRITER_DFS, SCIP_OKAY, SCIPcreateExpriter(), SCIPexprGetHdlr(), SCIPexprhdlrGetName(), SCIPexpriterGetNext(), SCIPexpriterInit(), SCIPexpriterIsEnd(), SCIPfreeExpriter(), SCIPisExprSignpower(), and TRUE.
Referenced by SCIPnlpiOraclePrintProblemGams().