55#if defined(_MSC_VER) && defined(SCIP_THREADSAFE)
63#define NLPI_NAME "filtersqp"
64#define NLPI_DESC "Sequential Quadratic Programming trust region solver by R. Fletcher and S. Leyffer"
65#define NLPI_PRIORITY -1000
67#define RANDSEED 26051979
68#define MAXPERTURB 0.01
70#define WORKSPACEGROWTHFACTOR 2
72#define OPTTOLFACTOR 0.5
146#ifdef FNAME_LCASE_DECOR
147# define F77_FUNC(name,NAME) name ## _
149#ifdef FNAME_UCASE_DECOR
150# define F77_FUNC(name,NAME) NAME ## _
152#ifdef FNAME_LCASE_NODECOR
153# define F77_FUNC(name,NAME) name
155#ifdef FNAME_UCASE_NODECOR
156# define F77_FUNC(name,NAME) NAME
215void F77_FUNC(objgrad,OBJGRAD)(void);
270#ifdef SCIP_THREADSAFE
271static pthread_mutex_t filtersqpmutex = PTHREAD_MUTEX_INITIALIZER;
287 (void) gettimeofday(&tp,
NULL);
308 assert(now.
sec >= nlpidata->starttime.sec);
309 assert(now.
sec > nlpidata->starttime.sec || now.
usec >= nlpidata->starttime.usec);
344 SCIPdebugMsg(problem->
scip,
"interrupted or timelimit reached, issuing arithmetic exception in objfun\n");
382 for( j = 0; j < *m; ++j )
387 SCIPdebugMsg(problem->
scip,
"arithmetic exception in confun for constraint %d\n", j);
431 SCIPdebugMsg(problem->
scip,
"arithmetic exception in gradient for constraints\n");
436 SCIPdebugMsg(problem->
scip,
"arithmetic exception in gradient for objective\n");
500 for(
i = 0;
i < *m; ++
i )
501 lambda[
i] = -lam[*n+
i];
513 for(
i = 0;
i < nnz + *n + 2; ++
i )
515 *li_hess = nnz + *n + 2;
569 *lasize = 1 + (
nvars+nnz) + 1+ncons + 1;
572 (*la)[0] =
nvars+nnz+1;
580 for(
i = 0;
i < nnz; ++
i )
584 for(
c = 0;
c <= ncons; ++
c )
585 (*la)[(*la)[0]+1+
c] = offset[
c] +
nvars + 1;
589#ifdef SCIP_MORE_DEBUG
590 for(
i = 0;
i < 1 + (
nvars+nnz) + 1+ncons + 1; ++
i )
591 printf(
"la[%2d] = %2d\n",
i, (*la)[
i]);
636 *lasize = 1 + nnz +
nvars + 1;
642 for(
i = 0;
i < nnz; ++
i )
643 (*la)[1+
i] = col[
i] + 1;
646 for( v = 0; v <=
nvars; ++v )
647 (*la)[(*la)[0]+v] = offset[v] + 1;
651#ifdef SCIP_MORE_DEBUG
652 for(
i = 0;
i < 1 + nnz +
nvars + 1; ++
i )
653 printf(
"lw[%2d] = %2d\n",
i, (*la)[
i]);
682 for(
i = 0;
i < n; ++
i )
690 SCIPdebugMsg(problem->
scip,
"FilterSQP started without initial primal values; make up something by projecting 0 onto variable bounds and perturb\n");
692 if( data->randnumgen ==
NULL )
697 for(
i = 0;
i < n; ++
i )
722 SCIPdebugMsg(problem->
scip,
"could not evaluate or constraint %d in %s starting point or Jacobian not available\n",
i-1, problem->
initguess !=
NULL ?
"provided" :
"made up");
760 SCIPdebugMsg(
scip,
"fast fail parameter not supported by FilterSQP interface yet. Ignored.\n");
795 if( ifail <= 8 &&
x !=
NULL )
830 for(
i = 0;
i < ncons; ++
i )
869 if( problem->
rstat[4] <= feastol )
877 if( problem->
rstat[4] <= feastol )
897 if( problem->
rstat[4] <= feastol )
942 if( (*nlpidata)->randnumgen !=
NULL )
961 (*problem)->scip =
scip;
982 if( (*problem)->oracle !=
NULL )
1028 problem->warmstart =
FALSE;
1035 if( problem->primalvalues !=
NULL )
1040 if( problem->varlbdualvalues !=
NULL )
1045 if( problem->varubdualvalues !=
NULL )
1050 if( problem->x !=
NULL )
1055 if( problem->lam !=
NULL )
1060 if( problem->bl !=
NULL )
1067 if( problem->s !=
NULL )
1072 problem->varssize = newsize;
1076 if( problem->bl !=
NULL )
1086 for(
i = nconss-1;
i >= 0; --
i )
1088 problem->bl[oldnvars+
nvars+
i] = problem->bl[oldnvars+
i];
1089 problem->bu[oldnvars+
nvars+
i] = problem->bu[oldnvars+
i];
1095 problem->bl[oldnvars+
i] = lbs[
i];
1096 problem->bu[oldnvars+
i] = ubs[
i];
1126 problem->warmstart =
FALSE;
1133 if( problem->consdualvalues !=
NULL )
1138 if( problem->c !=
NULL )
1143 if( problem->lam !=
NULL )
1148 if( problem->bl !=
NULL )
1157 if( problem->s !=
NULL )
1162 problem->conssize = newsize;
1166 if( problem->bl !=
NULL )
1173 for(
i = 0;
i < nconss; ++
i )
1175 problem->bl[
nvars+oldnconss+
i] = lhss[
i];
1176 problem->bu[
nvars+oldnconss+
i] = rhss[
i];
1200 constant, nlins, lininds, linvals, expr) );
1225 if( problem->bl !=
NULL )
1231 problem->bl[indices[
i]] = lbs[
i];
1232 problem->bu[indices[
i]] = ubs[
i];
1252 if( problem->bl !=
NULL )
1259 for(
i = 0;
i < nconss; ++
i )
1261 problem->bl[
nvars+indices[
i]] = lhss[
i];
1262 problem->bu[
nvars+indices[
i]] = rhss[
i];
1283 problem->warmstart =
FALSE;
1310 problem->warmstart =
FALSE;
1363 if( problem->cstype !=
NULL && idxcons >= 0 )
1364 problem->cstype[idxcons] = expr !=
NULL ?
'N' :
'L';
1399 if( primalvalues !=
NULL )
1401 if( problem->initguess ==
NULL )
1450 if( param.timelimit == 0.0 )
1453 problem->niterations = 0;
1454 problem->solvetime = 0.0;
1466 iprint = param.verblevel;
1469 if( !param.warmstart )
1470 problem->warmstart =
FALSE;
1482 ifail = problem->warmstart ? -1 : 0;
1486 iuser = (
fint*)problem;
1487 if( problem->warmstart )
1488 memset(problem->istat+1, 0,
sizeof(problem->istat)-
sizeof(*problem->istat));
1490 memset(problem->istat, 0,
sizeof(problem->istat));
1491 memset(problem->rstat, 0,
sizeof(problem->rstat));
1492 problem->niterations = 0;
1494 if( problem->x ==
NULL )
1498 if( problem->c ==
NULL )
1502 if( problem->lam ==
NULL )
1510 if( problem->s ==
NULL )
1515 if( problem->la ==
NULL )
1521 maxa = problem->la[0]-1;
1523 if( problem->hessiannz ==
NULL )
1530 if( problem->bl ==
NULL )
1541 for(
i = 0;
i < m; ++
i )
1566 lh1 = problem->hessiannz[0]-1 + 8 + 2*n + m;
1567 minmxwk = 21*n + 8*m + mlp + 8*maxf + lh1 + kmax*(kmax+9)/2 +
MAX(20*n,2000);
1573 minmxiwk = 13*n + 4*m + mlp + lh1 + 100 + kmax + 113 +
MAX(5*n,5000);
1574 if( !problem->warmstart )
1585#ifdef SCIP_THREADSAFE
1586 (void) pthread_mutex_lock(&filtersqpmutex);
1595 F77_FUNC(scalec,SCALEC).scale_mode = 0;
1597 for( nruns = 1; ; ++nruns )
1599 maxiter = param.iterlimit - problem->niterations;
1602 &n, &m, &kmax, &maxa,
1603 &maxf, &mlp, &problem->mxwk, &problem->mxiwk,
1604 &iprint, &nout, &ifail, &rho,
1605 problem->x, problem->c, &f, &problem->fmin, problem->bl,
1606 problem->bu, problem->s, problem->a, problem->la, problem->ws,
1607 problem->lws, problem->lam, problem->cstype, user,
1608 iuser, &maxiter, problem->istat,
1609 problem->rstat, cstype_len);
1611 problem->niterations += problem->istat[1];
1617 if( ifail < 8 && (ifail != 0 || problem->rstat[0] <= param.opttol) )
1620 if( param.verblevel > 0 )
1622 SCIPinfoMessage(
scip,
NULL,
"FilterSQP terminated with status %d in run %d, absolute KKT violation is %g\n", ifail, nruns, problem->rstat[0]);
1628 if( param.verblevel > 0 )
1638 if( param.verblevel > 0 )
1651 if( param.verblevel > 0 )
1658 epsfactor = param.opttol / problem->rstat[0];
1663 if( param.verblevel > 0 )
1673 if( ifail == 8 || ifail == 9 )
1682 problem->mxwk = newsize;
1686 if( ifail == 8 || ifail == 10 )
1695 problem->mxiwk = newsize;
1705 (void)
setupStart(data, problem, problem->x, &success);
1709#ifdef SCIP_THREADSAFE
1710 (void) pthread_mutex_unlock(&filtersqpmutex);
1724 return problem->solstat;
1733 return problem->termstat;
1742 if( primalvalues !=
NULL )
1746 *primalvalues = problem->primalvalues;
1749 if( consdualvalues !=
NULL )
1753 *consdualvalues = problem->consdualvalues;
1756 if( varlbdualvalues !=
NULL )
1760 *varlbdualvalues = problem->varlbdualvalues;
1763 if( varubdualvalues !=
NULL )
1767 *varubdualvalues = problem->varubdualvalues;
1772 if( problem->primalvalues !=
NULL )
1791 statistics->niterations = problem->niterations;
1792 statistics->totaltime = problem->solvetime;
1794 statistics->consviol = problem->rstat[4];
1795 statistics->boundviol = 0.0;
1817 nlpiCopyFilterSQP, nlpiFreeFilterSQP,
NULL,
1818 nlpiCreateProblemFilterSQP, nlpiFreeProblemFilterSQP,
NULL,
1819 nlpiAddVarsFilterSQP, nlpiAddConstraintsFilterSQP, nlpiSetObjectiveFilterSQP,
1820 nlpiChgVarBoundsFilterSQP, nlpiChgConsSidesFilterSQP, nlpiDelVarSetFilterSQP, nlpiDelConstraintSetFilterSQP,
1821 nlpiChgLinearCoefsFilterSQP, nlpiChgExprFilterSQP,
1822 nlpiChgObjConstantFilterSQP, nlpiSetInitialGuessFilterSQP, nlpiSolveFilterSQP, nlpiGetSolstatFilterSQP, nlpiGetTermstatFilterSQP,
1823 nlpiGetSolutionFilterSQP, nlpiGetStatisticsFilterSQP,
void SCIPinfoMessage(SCIP *scip, FILE *file, const char *formatstr,...)
SCIP_RETCODE SCIPincludeNlpSolverFilterSQP(SCIP *scip)
SCIP_RETCODE SCIPnlpiOracleEvalObjectiveValue(SCIP *scip, SCIP_NLPIORACLE *oracle, const SCIP_Real *x, SCIP_Real *objval)
SCIP_RETCODE SCIPnlpiOracleChgLinearCoefs(SCIP *scip, SCIP_NLPIORACLE *oracle, int considx, int nentries, const int *varidxs, const SCIP_Real *newcoefs)
SCIP_RETCODE SCIPnlpiOracleGetJacobianRowSparsity(SCIP *scip, SCIP_NLPIORACLE *oracle, const int **rowoffsets, const int **cols, const SCIP_Bool **colnlflags, int *nnlnz)
SCIP_RETCODE SCIPnlpiOracleGetHessianLagSparsity(SCIP *scip, SCIP_NLPIORACLE *oracle, const int **offset, const int **allnz, SCIP_Bool colwise)
SCIP_RETCODE SCIPnlpiOracleChgVarBounds(SCIP *scip, SCIP_NLPIORACLE *oracle, int nvars, const int *indices, const SCIP_Real *lbs, const SCIP_Real *ubs)
SCIP_RETCODE SCIPnlpiOracleAddConstraints(SCIP *scip, SCIP_NLPIORACLE *oracle, int nconss, const SCIP_Real *lhss, const SCIP_Real *rhss, const int *nlininds, int *const *lininds, SCIP_Real *const *linvals, SCIP_EXPR **exprs, const char **consnames)
SCIP_Bool SCIPnlpiOracleIsConstraintNonlinear(SCIP_NLPIORACLE *oracle, int considx)
SCIP_RETCODE SCIPnlpiOracleDelVarSet(SCIP *scip, SCIP_NLPIORACLE *oracle, int *delstats)
SCIP_RETCODE SCIPnlpiOracleCreate(SCIP *scip, SCIP_NLPIORACLE **oracle)
SCIP_RETCODE SCIPnlpiOracleEvalObjectiveGradient(SCIP *scip, SCIP_NLPIORACLE *oracle, const SCIP_Real *x, SCIP_Bool isnewx, SCIP_Real *objval, SCIP_Real *objgrad)
SCIP_RETCODE SCIPnlpiOracleResetEvalTime(SCIP *scip, SCIP_NLPIORACLE *oracle)
SCIP_RETCODE SCIPnlpiOracleSetObjective(SCIP *scip, SCIP_NLPIORACLE *oracle, const SCIP_Real constant, int nlin, const int *lininds, const SCIP_Real *linvals, SCIP_EXPR *expr)
SCIP_Real SCIPnlpiOracleGetConstraintRhs(SCIP_NLPIORACLE *oracle, int considx)
SCIP_Real SCIPnlpiOracleGetEvalTime(SCIP *scip, SCIP_NLPIORACLE *oracle)
SCIP_RETCODE SCIPnlpiOracleChgConsSides(SCIP *scip, SCIP_NLPIORACLE *oracle, int nconss, const int *indices, const SCIP_Real *lhss, const SCIP_Real *rhss)
SCIP_Real SCIPnlpiOracleGetConstraintLhs(SCIP_NLPIORACLE *oracle, int considx)
SCIP_RETCODE SCIPnlpiOracleAddVars(SCIP *scip, SCIP_NLPIORACLE *oracle, int nvars, const SCIP_Real *lbs, const SCIP_Real *ubs, const char **varnames)
SCIP_RETCODE SCIPnlpiOracleEvalHessianLag(SCIP *scip, SCIP_NLPIORACLE *oracle, const SCIP_Real *x, SCIP_Bool isnewx_obj, SCIP_Bool isnewx_cons, SCIP_Real objfactor, const SCIP_Real *lambda, SCIP_Real *hessian, SCIP_Bool colwise)
int SCIPnlpiOracleGetNVars(SCIP_NLPIORACLE *oracle)
int SCIPnlpiOracleGetNConstraints(SCIP_NLPIORACLE *oracle)
SCIP_RETCODE SCIPnlpiOracleEvalJacobian(SCIP *scip, SCIP_NLPIORACLE *oracle, const SCIP_Real *x, SCIP_Bool isnewx, SCIP_Real *convals, SCIP_Real *jacobi)
SCIP_RETCODE SCIPnlpiOracleDelConsSet(SCIP *scip, SCIP_NLPIORACLE *oracle, int *delstats)
SCIP_RETCODE SCIPnlpiOracleSetProblemName(SCIP *scip, SCIP_NLPIORACLE *oracle, const char *name)
SCIP_RETCODE SCIPnlpiOracleChgObjConstant(SCIP *scip, SCIP_NLPIORACLE *oracle, SCIP_Real objconstant)
SCIP_RETCODE SCIPnlpiOracleEvalConstraintValue(SCIP *scip, SCIP_NLPIORACLE *oracle, int considx, const SCIP_Real *x, SCIP_Real *conval)
const SCIP_Real * SCIPnlpiOracleGetVarLbs(SCIP_NLPIORACLE *oracle)
const SCIP_Real * SCIPnlpiOracleGetVarUbs(SCIP_NLPIORACLE *oracle)
SCIP_RETCODE SCIPnlpiOracleFree(SCIP *scip, SCIP_NLPIORACLE **oracle)
struct SCIP_NlpiOracle SCIP_NLPIORACLE
SCIP_RETCODE SCIPnlpiOracleChgExpr(SCIP *scip, SCIP_NLPIORACLE *oracle, int considx, SCIP_EXPR *expr)
const char * SCIPgetSolverDescFilterSQP(void)
const char * SCIPgetSolverNameFilterSQP(void)
SCIP_Bool SCIPisFilterSQPAvailableFilterSQP(void)
SCIP_RETCODE SCIPincludeExternalCodeInformation(SCIP *scip, const char *name, const char *description)
#define SCIPfreeBlockMemoryArray(scip, ptr, num)
#define SCIPallocClearBlockMemory(scip, ptr)
BMS_BLKMEM * SCIPblkmem(SCIP *scip)
#define SCIPensureBlockMemoryArray(scip, ptr, arraysizeptr, minsize)
#define SCIPallocClearBlockMemoryArray(scip, ptr, num)
int SCIPcalcMemGrowSize(SCIP *scip, int num)
#define SCIPallocBlockMemoryArray(scip, ptr, num)
#define SCIPreallocBlockMemoryArray(scip, ptr, oldnum, newnum)
#define SCIPfreeBlockMemory(scip, ptr)
#define SCIPfreeBlockMemoryArrayNull(scip, ptr, num)
SCIP_RETCODE SCIPincludeNlpi(SCIP *scip, const char *name, const char *description, int priority, SCIP_DECL_NLPICOPY((*nlpicopy)), SCIP_DECL_NLPIFREE((*nlpifree)), SCIP_DECL_NLPIGETSOLVERPOINTER((*nlpigetsolverpointer)), SCIP_DECL_NLPICREATEPROBLEM((*nlpicreateproblem)), SCIP_DECL_NLPIFREEPROBLEM((*nlpifreeproblem)), SCIP_DECL_NLPIGETPROBLEMPOINTER((*nlpigetproblempointer)), SCIP_DECL_NLPIADDVARS((*nlpiaddvars)), SCIP_DECL_NLPIADDCONSTRAINTS((*nlpiaddconstraints)), SCIP_DECL_NLPISETOBJECTIVE((*nlpisetobjective)), SCIP_DECL_NLPICHGVARBOUNDS((*nlpichgvarbounds)), SCIP_DECL_NLPICHGCONSSIDES((*nlpichgconssides)), SCIP_DECL_NLPIDELVARSET((*nlpidelvarset)), SCIP_DECL_NLPIDELCONSSET((*nlpidelconsset)), SCIP_DECL_NLPICHGLINEARCOEFS((*nlpichglinearcoefs)), SCIP_DECL_NLPICHGEXPR((*nlpichgexpr)), SCIP_DECL_NLPICHGOBJCONSTANT((*nlpichgobjconstant)), SCIP_DECL_NLPISETINITIALGUESS((*nlpisetinitialguess)), SCIP_DECL_NLPISOLVE((*nlpisolve)), SCIP_DECL_NLPIGETSOLSTAT((*nlpigetsolstat)), SCIP_DECL_NLPIGETTERMSTAT((*nlpigettermstat)), SCIP_DECL_NLPIGETSOLUTION((*nlpigetsolution)), SCIP_DECL_NLPIGETSTATISTICS((*nlpigetstatistics)), SCIP_NLPIDATA *nlpidata)
SCIP_NLPIDATA * SCIPnlpiGetData(SCIP_NLPI *nlpi)
SCIP_Bool SCIPisSolveInterrupted(SCIP *scip)
SCIP_Real SCIPinfinity(SCIP *scip)
SCIP_Real SCIPrandomGetReal(SCIP_RANDNUMGEN *randnumgen, SCIP_Real minrandval, SCIP_Real maxrandval)
SCIPfreeRandom(scip, &heurdata->randnumgen)
SCIPcreateRandom(scip, &heurdata->randnumgen, DEFAULT_RANDSEED, TRUE))
assert(minobj< SCIPgetCutoffbound(scip))
#define BMSallocMemoryArray(ptr, num)
#define BMSfreeMemoryArray(ptr)
#define BMScopyMemoryArray(ptr, source, num)
#define BMSreallocBlockMemoryArray(mem, ptr, oldnum, newnum)
#define BMSclearMemoryArray(ptr, num)
static SCIP_RETCODE handleNlpParam(SCIP *scip, SCIP_NLPIPROBLEM *nlpiproblem, const SCIP_NLPPARAM param)
static SCIP_TIME gettime(void)
#define WORKSPACEGROWTHFACTOR
static SCIP_RETCODE setupGradients(SCIP *scip, SCIP_NLPIORACLE *oracle, fint **la, int *lasize, real **a)
static SCIP_Real timeelapsed(SCIP_NLPIDATA *nlpidata)
static SCIP_RETCODE processSolveOutcome(SCIP_NLPIDATA *nlpidata, SCIP_NLPIPROBLEM *problem, fint ifail, SCIP_Real feastol, SCIP_Real opttol, real *x, real *lam)
struct SCIP_Time SCIP_TIME
void F77_FUNC(filtersqp, FILTERSQP)
static SCIP_RETCODE setupHessian(SCIP *scip, SCIP_NLPIORACLE *oracle, fint **la, int *lasize)
static SCIP_RETCODE setupStart(SCIP_NLPIDATA *data, SCIP_NLPIPROBLEM *problem, real *x, SCIP_Bool *success)
static SCIP_Bool timelimitreached(SCIP_NLPIDATA *nlpidata, SCIP_NLPIPROBLEM *nlpiproblem)
static void invalidateSolution(SCIP_NLPIPROBLEM *problem)
methods to store an NLP and request function, gradient, and Hessian values
public methods for message output
public data structures and miscellaneous methods
public methods for memory management
public methods for message handling
public methods for NLPI solver interfaces
public methods for numerical tolerances
public methods for random numbers
SCIP_NLPPARAM_FASTFAIL fastfail
SCIP_Real * varubdualvalues
SCIP_NLPTERMSTAT termstat
SCIP_Real * consdualvalues
SCIP_Real * varlbdualvalues
struct SCIP_RandNumGen SCIP_RANDNUMGEN
#define SCIP_DECL_NLPISOLVE(x)
struct SCIP_NlpiProblem SCIP_NLPIPROBLEM
#define SCIP_DECL_NLPICHGLINEARCOEFS(x)
#define SCIP_DECL_NLPICHGOBJCONSTANT(x)
#define SCIP_NLPPARAM_PRINT(param)
#define SCIP_DECL_NLPIGETSOLUTION(x)
#define SCIP_DECL_NLPISETOBJECTIVE(x)
#define SCIP_DECL_NLPICREATEPROBLEM(x)
#define SCIP_DECL_NLPIGETSTATISTICS(x)
#define SCIP_DECL_NLPIDELCONSSET(x)
#define SCIP_DECL_NLPICHGCONSSIDES(x)
#define SCIP_DECL_NLPIDELVARSET(x)
#define SCIP_DECL_NLPICHGEXPR(x)
#define SCIP_DECL_NLPIADDVARS(x)
enum SCIP_NlpSolStat SCIP_NLPSOLSTAT
#define SCIP_DECL_NLPISETINITIALGUESS(x)
#define SCIP_DECL_NLPIFREEPROBLEM(x)
@ SCIP_NLPTERMSTAT_TIMELIMIT
@ SCIP_NLPTERMSTAT_NUMERICERROR
@ SCIP_NLPTERMSTAT_EVALERROR
@ SCIP_NLPTERMSTAT_LOBJLIMIT
@ SCIP_NLPTERMSTAT_ITERLIMIT
@ SCIP_NLPTERMSTAT_OUTOFMEMORY
@ SCIP_NLPTERMSTAT_INTERRUPT
#define SCIP_DECL_NLPICOPY(x)
#define SCIP_DECL_NLPIGETSOLSTAT(x)
#define SCIP_DECL_NLPICHGVARBOUNDS(x)
#define SCIP_DECL_NLPIFREE(x)
#define SCIP_DECL_NLPIADDCONSTRAINTS(x)
@ SCIP_NLPSOLSTAT_UNBOUNDED
@ SCIP_NLPSOLSTAT_GLOBINFEASIBLE
@ SCIP_NLPSOLSTAT_LOCINFEASIBLE
@ SCIP_NLPSOLSTAT_FEASIBLE
@ SCIP_NLPSOLSTAT_UNKNOWN
#define SCIP_DECL_NLPIGETTERMSTAT(x)
struct SCIP_NlpParam SCIP_NLPPARAM
enum SCIP_NlpTermStat SCIP_NLPTERMSTAT
struct SCIP_NlpiData SCIP_NLPIDATA
enum SCIP_Retcode SCIP_RETCODE