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
| scip | SCIP data structure |
| oracle | NLPIORACLE data structure |
| minsize | minimal required size |
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
| scip | SCIP data structure |
| oracle | NLPIORACLE data structure |
| minsize | minimal required size |
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
| scip | SCIP data structure |
| cons | oracle constraint |
| minsize | minimal required size |
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.
| scip | SCIP data structure |
| oracle | pointer to store NLPIORACLE data structure |
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.
| scip | SCIP data structure |
| oracle | pointer to store NLPIORACLE data structure |
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
| scip | SCIP data structure |
| oracle | pointer to NLPIORACLE data structure |
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
| scip | SCIP data structure |
| oracle | pointer to store NLPIORACLE data structure |
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().