1 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2 /*                                                                           */
3 /*                  This file is part of the program and library             */
4 /*         SCIP --- Solving Constraint Integer Programs                      */
5 /*                                                                           */
6 /*    Copyright (C) 2002-2021 Konrad-Zuse-Zentrum                            */
7 /*                            fuer Informationstechnik Berlin                */
8 /*                                                                           */
9 /*  SCIP is distributed under the terms of the ZIB Academic License.         */
10 /*                                                                           */
11 /*  You should have received a copy of the ZIB Academic License              */
12 /*  along with SCIP; see the file COPYING. If not visit scipopt.org.         */
13 /*                                                                           */
14 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
15 
16 /**@file   type_nlpi.h
17  * @ingroup TYPEDEFINITIONS
18  * @brief  type definitions for specific NLP solver interfaces
19  * @author Stefan Vigerske
20  * @author Thorsten Gellermann
21  */
22 
23 /*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
24 
25 #ifndef __SCIP_TYPE_NLPI_H__
26 #define __SCIP_TYPE_NLPI_H__
27 
28 #include "scip/def.h"
29 #include "scip/type_message.h"
30 #include "blockmemshell/memory.h"
31 #include "nlpi/type_expr.h"
32 
33 #ifdef __cplusplus
34 extern "C" {
35 #endif
36 
37 typedef struct SCIP_Nlpi          SCIP_NLPI;          /**< NLP solver interface */
38 typedef struct SCIP_NlpiData      SCIP_NLPIDATA;      /**< locally defined NLP solver interface data */
39 typedef struct SCIP_NlpiProblem   SCIP_NLPIPROBLEM;   /**< locally defined NLP solver interface data for a specific problem instance */
40 typedef struct SCIP_NlpStatistics SCIP_NLPSTATISTICS; /**< NLP solve statistics */
41 
42 /** NLP solver parameter */
43 enum SCIP_NlpParam
44 {
45    SCIP_NLPPAR_FROMSCRATCH    =  0,      /**< solver should start from scratch at next call?: 0 no, 1 yes (int) */
46    SCIP_NLPPAR_VERBLEVEL      =  1,      /**< verbosity level of output of NLP solver to the screen: 0 off, 1 normal, 2 debug, > 2 more debug (int) */
47    SCIP_NLPPAR_FEASTOL        =  2,      /**< feasibility tolerance for primal variables and slacks (real) */
48    SCIP_NLPPAR_RELOBJTOL      =  3,      /**< relative objective tolerance (real) */
49    SCIP_NLPPAR_LOBJLIM        =  4,      /**< lower objective limit (cutoff) (real) */
50    SCIP_NLPPAR_INFINITY       =  5,      /**< value for infinity used to decide unbounded sides, unbounded variable and constraint bounds, and upper objective limit (real) */
51    SCIP_NLPPAR_ITLIM          =  6,      /**< NLP iteration limit (int) */
52    SCIP_NLPPAR_TILIM          =  7,      /**< NLP time limit (real) */
53    SCIP_NLPPAR_OPTFILE        =  8,      /**< name of a solver specific option file (string) */
54    SCIP_NLPPAR_FASTFAIL       =  9       /**< should the NLP solver stop early if convergence is slow?: 0 no, 1 yes (int) */
55 };
56 typedef enum SCIP_NlpParam SCIP_NLPPARAM;  /**< NLP solver parameter */
57 
58 /** NLP solution status */
59 enum SCIP_NlpSolStat
60 {
61    SCIP_NLPSOLSTAT_GLOBOPT        = 0,    /**< solved to global optimality */
62    SCIP_NLPSOLSTAT_LOCOPT         = 1,    /**< solved to local optimality */
63    SCIP_NLPSOLSTAT_FEASIBLE       = 2,    /**< feasible solution found */
64    SCIP_NLPSOLSTAT_LOCINFEASIBLE  = 3,    /**< solution found is local infeasible */
65    SCIP_NLPSOLSTAT_GLOBINFEASIBLE = 4,    /**< problem is proven infeasible */
66    SCIP_NLPSOLSTAT_UNBOUNDED      = 5,    /**< problem is unbounded */
67    SCIP_NLPSOLSTAT_UNKNOWN        = 6     /**< unknown solution status (e.g., problem not solved yet) */
68 };
69 typedef enum SCIP_NlpSolStat SCIP_NLPSOLSTAT;      /** NLP solution status */
70 
71 /** NLP solver termination status */
72 enum SCIP_NlpTermStat
73 {
74    SCIP_NLPTERMSTAT_OKAY          = 0,    /**< terminated successfully */
75    SCIP_NLPTERMSTAT_TILIM         = 1,    /**< time limit exceeded */
76    SCIP_NLPTERMSTAT_ITLIM         = 2,    /**< iteration limit exceeded */
77    SCIP_NLPTERMSTAT_LOBJLIM       = 3,    /**< lower objective limit reached */
78    SCIP_NLPTERMSTAT_NUMERR        = 5,    /**< stopped on numerical error */
79    SCIP_NLPTERMSTAT_EVALERR       = 6,    /**< stopped on function evaluation error */
80    SCIP_NLPTERMSTAT_MEMERR        = 7,    /**< memory exceeded */
81    SCIP_NLPTERMSTAT_LICERR        = 8,    /**< licence error */
82    SCIP_NLPTERMSTAT_OTHER         = 9     /**< other error (= this should never happen) */
83 };
84 typedef enum SCIP_NlpTermStat SCIP_NLPTERMSTAT;  /** NLP solver termination status */
85 
86 /** copy method of NLP interface (called when SCIP copies plugins)
87  *
88  * input:
89  *  - blkmem block memory of target SCIP
90  *  - sourcenlpi the NLP interface to copy
91  *  - targetnlpi buffer to store pointer to copy of NLP interface
92  */
93 #define SCIP_DECL_NLPICOPY(x) SCIP_RETCODE x (BMS_BLKMEM* blkmem, SCIP_NLPI* sourcenlpi, SCIP_NLPI** targetnlpi)
94 
95 /** destructor of NLP interface to free nlpi data
96  *
97  * input:
98  *  - nlpi datastructure for solver interface
99  */
100 #define SCIP_DECL_NLPIFREE(x) SCIP_RETCODE x (SCIP_NLPI* nlpi)
101 
102 /** gets pointer to solver-internal NLP solver
103  *
104  *  to do dirty stuff
105  *
106  * input:
107  *  - nlpi datastructure for solver interface
108  *
109  * return: void pointer to solver
110  */
111 #define SCIP_DECL_NLPIGETSOLVERPOINTER(x) void* x (SCIP_NLPI* nlpi)
112 
113 /** creates a problem instance
114  *
115  * input:
116  *  - nlpi datastructure for solver interface
117  *  - problem pointer to store the problem data
118  *  - name name of problem, can be NULL
119  */
120 #define SCIP_DECL_NLPICREATEPROBLEM(x) SCIP_RETCODE x (SCIP_NLPI* nlpi, SCIP_NLPIPROBLEM** problem, const char* name)
121 
122 /** free a problem instance
123  *
124  * input:
125  *  - nlpi datastructure for solver interface
126  *  - problem pointer where problem data is stored
127  */
128 #define SCIP_DECL_NLPIFREEPROBLEM(x) SCIP_RETCODE x (SCIP_NLPI* nlpi, SCIP_NLPIPROBLEM** problem)
129 
130 /** gets pointer to solver-internal problem instance
131  *
132  *  to do dirty stuff
133  *
134  * input:
135  *  - nlpi datastructure for solver interface
136  *  - problem datastructure for problem instance
137  *
138  * return: void pointer to problem instance
139  */
140 #define SCIP_DECL_NLPIGETPROBLEMPOINTER(x) void* x (SCIP_NLPI* nlpi, SCIP_NLPIPROBLEM* problem)
141 
142 /** add variables
143  *
144  * input:
145  *  - nlpi datastructure for solver interface
146  *  - problem datastructure for problem instance
147  *  - nvars number of variables
148  *  - lbs lower bounds of variables, can be NULL if -infinity
149  *  - ubs upper bounds of variables, can be NULL if +infinity
150  *  - varnames names of variables, can be NULL
151  */
152 #define SCIP_DECL_NLPIADDVARS(x) SCIP_RETCODE x (SCIP_NLPI* nlpi, SCIP_NLPIPROBLEM* problem, int nvars, const SCIP_Real* lbs, \
153       const SCIP_Real* ubs, const char** varnames)
154 
155 /** add constraints
156  * quadratic coefficiens: row oriented matrix for each constraint
157  *
158  * input:
159  *  - nlpi datastructure for solver interface
160  *  - problem datastructure for problem instance
161  *  - ncons number of added constraints
162  *  - lhss left hand sides of constraints, can be NULL if -infinity
163  *  - rhss right hand sides of constraints, can be NULL if +infinity
164  *  - nlininds number of linear coefficients for each constraint
165  *    may be NULL in case of no linear part
166  *  - lininds indices of variables for linear coefficients for each constraint
167  *    may be NULL in case of no linear part
168  *  - linvals values of linear coefficient for each constraint
169  *    may be NULL in case of no linear part
170  *  - nquadelems number of quadratic elements for each constraint
171  *    may be NULL in case of no quadratic part
172  *  - quadelems quadratic elements for each constraint
173  *    may be NULL in case of no quadratic part
174  *  - exprvaridxs indices of variables in expression tree, maps variable indices in expression tree to indices in nlp
175  *    entry of array may be NULL in case of no expression tree
176  *    may be NULL in case of no expression tree in any constraint
177  *  - exprtrees expression tree for nonquadratic part of constraints
178  *    entry of array may be NULL in case of no nonquadratic part
179  *    may be NULL in case of no nonquadratic part in any constraint
180  *  - names of constraints, may be NULL or entries may be NULL
181  */
182 #define SCIP_DECL_NLPIADDCONSTRAINTS(x) SCIP_RETCODE x (SCIP_NLPI* nlpi, SCIP_NLPIPROBLEM* problem, int ncons, const SCIP_Real* lhss, \
183       const SCIP_Real* rhss, const int* nlininds, int* const* lininds, SCIP_Real* const* linvals, const int* nquadelems, \
184       SCIP_QUADELEM* const* quadelems, int* const* exprvaridxs, SCIP_EXPRTREE* const* exprtrees, const char** names)
185 
186 /** sets or overwrites objective, a minimization problem is expected
187  *  May change sparsity pattern.
188  *
189  * input:
190  *  - nlpi datastructure for solver interface
191  *  - problem datastructure for problem instance
192  *  - nlins number of linear variables
193  *  - lininds variable indices
194  *    may be NULL in case of no linear part
195  *  - linvals coefficient values
196  *    may be NULL in case of no linear part
197  *  - nquadelems number of elements in matrix of quadratic part
198  *  - quadelems elements of quadratic part
199  *    may be NULL in case of no quadratic part
200  *  - exprvaridxs indices of variables in expression tree, maps variable indices in expression tree to indices in nlp
201  *    may be NULL in case of no expression tree
202  *  - exprtree expression tree for nonquadratic part of objective function
203  *    may be NULL in case of no nonquadratic part
204  *  - constant objective value offset
205  */
206 #define SCIP_DECL_NLPISETOBJECTIVE(x) SCIP_RETCODE x (SCIP_NLPI* nlpi, SCIP_NLPIPROBLEM* problem, int nlins, const int* lininds, \
207       const SCIP_Real* linvals, int nquadelems, const SCIP_QUADELEM* quadelems, const int* exprvaridxs, const SCIP_EXPRTREE* exprtree, \
208       const SCIP_Real constant)
209 
210 /** change variable bounds
211  *
212  * input:
213  *  - nlpi datastructure for solver interface
214  *  - problem datastructure for problem instance
215  *  - nvars number of variables to change bounds
216  *  - indices indices of variables to change bounds
217  *  - lbs new lower bounds
218  *  - ubs new upper bounds
219  */
220 #define SCIP_DECL_NLPICHGVARBOUNDS(x) SCIP_RETCODE x (SCIP_NLPI* nlpi, SCIP_NLPIPROBLEM* problem, const int nvars, const int* indices, \
221       const SCIP_Real* lbs, const SCIP_Real* ubs)
222 
223 /** change constraint sides
224  *
225  * input:
226  *  - nlpi datastructure for solver interface
227  *  - problem datastructure for problem instance
228  *  - nconss number of constraints to change sides
229  *  - indices indices of constraints to change sides
230  *  - lhss new left hand sides
231  *  - rhss new right hand sides
232  */
233 #define SCIP_DECL_NLPICHGCONSSIDES(x) SCIP_RETCODE x (SCIP_NLPI* nlpi, SCIP_NLPIPROBLEM* problem, int nconss, const int* indices, \
234       const SCIP_Real* lhss, const SCIP_Real* rhss)
235 
236 /** delete a set of variables
237  *
238  * input:
239  *  - nlpi datastructure for solver interface
240  *  - problem datastructure for problem instance
241  *  - dstats deletion status of vars; 1 if var should be deleted, 0 if not
242  *  - size of the dstats array
243  *
244  * output:
245  *  - dstats new position of var, -1 if var was deleted
246  */
247 #define SCIP_DECL_NLPIDELVARSET(x) SCIP_RETCODE x (SCIP_NLPI* nlpi, SCIP_NLPIPROBLEM* problem, int* dstats, int dstatssize)
248 
249 /** delete a set of constraints
250  *
251  * input:
252  *  - nlpi datastructure for solver interface
253  *  - problem datastructure for problem instance
254  *  - dstats deletion status of rows; 1 if row should be deleted, 0 if not
255  *  - size of the dstats array
256  *
257  * output:
258  *  - dstats new position of row, -1 if row was deleted
259  */
260 #define SCIP_DECL_NLPIDELCONSSET(x) SCIP_RETCODE x (SCIP_NLPI* nlpi, SCIP_NLPIPROBLEM* problem, int* dstats, int dstatssize)
261 
262 /** changes (or adds) linear coefficients in a constraint or objective
263  *
264  * input:
265  *  - nlpi datastructure for solver interface
266  *  - problem datastructure for problem instance
267  *  - idx index of constraint or -1 for objective
268  *  - nvals number of values in linear constraint to change
269  *  - varidxs indices of variables which coefficient to change
270  *  - vals new values for coefficients
271  */
272 #define SCIP_DECL_NLPICHGLINEARCOEFS(x) SCIP_RETCODE x (SCIP_NLPI* nlpi, SCIP_NLPIPROBLEM* problem, int idx, int nvals, \
273       const int* varidxs, const SCIP_Real* vals)
274 
275 /** changes (or adds) coefficients in the quadratic part of a constraint or objective
276  *
277  * input:
278  *  - nlpi datastructure for solver interface
279  *  - problem datastructure for problem instance
280  *  - idx index of constraint or -1 for objective
281  *  - nquadelems number of entries in quadratic matrix to change
282  *  - quadelems new elements in quadratic matrix (replacing already existing ones or adding new ones)
283  */
284 #define SCIP_DECL_NLPICHGQUADCOEFS(x) SCIP_RETCODE x (SCIP_NLPI* nlpi, SCIP_NLPIPROBLEM* problem, int idx, int nquadelems, \
285       const SCIP_QUADELEM* quadelems)
286 
287 /** replaces the expression tree of a constraint or objective
288  *
289  * input:
290  *  - nlpi datastructure for solver interface
291  *  - problem datastructure for problem instance
292  *  - idxcons index of constraint or -1 for objective
293  *  - exprvaridxs indices of variables in expression tree, maps variable indices in expression tree to indices in nlp, or NULL
294  *  - exprtree new expression tree for constraint or objective, or NULL to only remove previous tree
295  */
296 #define SCIP_DECL_NLPICHGEXPRTREE(x) SCIP_RETCODE x (SCIP_NLPI* nlpi, SCIP_NLPIPROBLEM* problem, int idxcons, \
297       const int* exprvaridxs, const SCIP_EXPRTREE* exprtree)
298 
299 /** change the value of one parameter in the nonlinear part
300  *
301  * input:
302  *  - nlpi datastructure for solver interface
303  *  - problem datastructure for problem instance
304  *  - idxcons index of constraint or -1 for objective
305  *  - idxparam index of parameter
306  *  - value new value for nonlinear parameter
307  *
308  * return: Error if parameter does not exist
309  */
310 #define SCIP_DECL_NLPICHGNONLINCOEF(x) SCIP_RETCODE x (SCIP_NLPI* nlpi, SCIP_NLPIPROBLEM* problem, int idxcons, int idxparam, \
311       SCIP_Real value)
312 
313 /** change the constant offset in the objective
314  *
315  * input:
316  *  - nlpi datastructure for solver interface
317  *  - problem datastructure for problem instance
318  *  - objconstant new value for objective constant
319  */
320 #define SCIP_DECL_NLPICHGOBJCONSTANT(x) SCIP_RETCODE x (SCIP_NLPI* nlpi, SCIP_NLPIPROBLEM* problem, SCIP_Real objconstant)
321 
322 /** sets initial guess for primal variables
323  *
324  * input:
325  *  - nlpi datastructure for solver interface
326  *  - problem datastructure for problem instance
327  *  - primalvalues initial primal values for variables, or NULL to clear previous values
328  *  - consdualvalues initial dual values for constraints, or NULL to clear previous values
329  *  - varlbdualvalues  initial dual values for variable lower bounds, or NULL to clear previous values
330  *  - varubdualvalues  initial dual values for variable upper bounds, or NULL to clear previous values
331  */
332 #define SCIP_DECL_NLPISETINITIALGUESS(x) SCIP_RETCODE x (SCIP_NLPI* nlpi, SCIP_NLPIPROBLEM* problem, SCIP_Real* primalvalues, \
333       SCIP_Real* consdualvalues, SCIP_Real* varlbdualvalues, SCIP_Real* varubdualvalues)
334 
335 /** tries to solve NLP
336  *
337  * input:
338  *  - nlpi datastructure for solver interface
339  *  - problem datastructure for problem instance
340  */
341 #define SCIP_DECL_NLPISOLVE(x) SCIP_RETCODE x (SCIP_NLPI* nlpi, SCIP_NLPIPROBLEM* problem)
342 
343 /** gives solution status
344  *
345  * input:
346  *  - nlpi datastructure for solver interface
347  *  - problem datastructure for problem instance
348  *
349  * return: Solution Status
350  */
351 #define SCIP_DECL_NLPIGETSOLSTAT(x) SCIP_NLPSOLSTAT x (SCIP_NLPI* nlpi, SCIP_NLPIPROBLEM* problem)
352 
353 /** gives termination reason
354  *
355  * input:
356  *  - nlpi datastructure for solver interface
357  *  - problem datastructure for problem instance
358  *
359  * return: Termination Status
360  */
361 #define SCIP_DECL_NLPIGETTERMSTAT(x) SCIP_NLPTERMSTAT x (SCIP_NLPI* nlpi, SCIP_NLPIPROBLEM* problem)
362 
363 /** gives primal and dual solution values
364  *
365  * solver can return NULL in dual values if not available
366  * but if solver provides dual values for one side of variable bounds, then it must also provide those for the other side
367  *
368  * for a ranged constraint, the dual variable is positive if the right hand side is active and negative if the left hand side is active
369  *
370  * input:
371  *  - nlpi datastructure for solver interface
372  *  - problem datastructure for problem instance
373  *  - primalvalues buffer to store pointer to array to primal values, or NULL if not needed
374  *  - consdualvalues buffer to store pointer to array to dual values of constraints, or NULL if not needed
375  *  - varlbdualvalues buffer to store pointer to array to dual values of variable lower bounds, or NULL if not needed
376  *  - varubdualvalues buffer to store pointer to array to dual values of variable lower bounds, or NULL if not needed
377  *  - objval pointer to store the objective value, or NULL if not needed
378  */
379 #define SCIP_DECL_NLPIGETSOLUTION(x) SCIP_RETCODE x (SCIP_NLPI* nlpi, SCIP_NLPIPROBLEM* problem, SCIP_Real** primalvalues, \
380       SCIP_Real** consdualvalues, SCIP_Real** varlbdualvalues, SCIP_Real** varubdualvalues, SCIP_Real* objval)
381 
382 /** gives solve statistics
383  *
384  * input:
385  *  - nlpi datastructure for solver interface
386  *  - problem datastructure for problem instance
387  *  - statistics pointer to store statistics
388  *
389  * output:
390  *  - statistics solve statistics
391  */
392 #define SCIP_DECL_NLPIGETSTATISTICS(x) SCIP_RETCODE x (SCIP_NLPI* nlpi, SCIP_NLPIPROBLEM* problem, SCIP_NLPSTATISTICS* statistics)
393 
394 /** gives required size of a buffer to store a warmstart object
395  *
396  *  input:
397  *  - nlpi datastructure for solver interface
398  *  - problem datastructure for problem instance
399  *  - size pointer to store required size for warmstart buffer
400  *
401  * output:
402  *  - size required size for warmstart buffer
403  */
404 #define SCIP_DECL_NLPIGETWARMSTARTSIZE(x) SCIP_RETCODE x (SCIP_NLPI* nlpi, SCIP_NLPIPROBLEM* problem, size_t* size)
405 
406 /** stores warmstart information in buffer
407  *
408  * required size of buffer should have been obtained by SCIPnlpiGetWarmstartSize before
409  *
410  * input:
411  *  - nlpi datastructure for solver interface
412  *  - problem datastructure for problem instance
413  *  - buffer memory to store warmstart information
414  *
415  * output:
416  *  - buffer warmstart information in solver specific data structure
417  */
418 #define SCIP_DECL_NLPIGETWARMSTARTMEMO(x) SCIP_RETCODE x (SCIP_NLPI* nlpi, SCIP_NLPIPROBLEM* problem, void* buffer)
419 
420 /** sets warmstart information in solver
421  *
422  * write warmstart to buffer
423  *
424  * input:
425  *  - nlpi datastructure for solver interface
426  *  - problem datastructure for problem instance
427  *  - buffer warmstart information
428  */
429 #define SCIP_DECL_NLPISETWARMSTARTMEMO(x) SCIP_RETCODE x (SCIP_NLPI* nlpi, SCIP_NLPIPROBLEM* problem, void* buffer)
430 
431 /**@name Parameter Methods */
432 /**@{ */
433 
434 /** gets integer parameter of NLP
435  *
436  * input:
437  *  - nlpi NLP interface structure
438  *  - problem datastructure for problem instance
439  *  - type parameter number
440  *  - ival pointer to store the parameter value
441  *
442  * output:
443  *  - ival parameter value
444  */
445 #define SCIP_DECL_NLPIGETINTPAR(x) SCIP_RETCODE x (SCIP_NLPI* nlpi, SCIP_NLPIPROBLEM* problem, SCIP_NLPPARAM type, int* ival)
446 
447 /** sets integer parameter of NLP
448  *
449  * input:
450  *  - nlpi NLP interface structure
451  *  - problem datastructure for problem instance
452  *  - type parameter number
453  *  - ival parameter value
454  */
455 #define SCIP_DECL_NLPISETINTPAR(x) SCIP_RETCODE x (SCIP_NLPI* nlpi, SCIP_NLPIPROBLEM* problem, SCIP_NLPPARAM type, int ival)
456 
457 /** gets floating point parameter of NLP
458  *
459  * input:
460  *  - nlpi NLP interface structure
461  *  - problem datastructure for problem instance, can be NULL only if type == SCIP_NLPPAR_INFINITY
462  *  - type parameter number
463  *  - dval pointer to store the parameter value
464  *
465  * output:
466  *  - dval parameter value
467  */
468 #define SCIP_DECL_NLPIGETREALPAR(x) SCIP_RETCODE x (SCIP_NLPI* nlpi, SCIP_NLPIPROBLEM* problem, SCIP_NLPPARAM type, SCIP_Real* dval)
469 
470 /** sets floating point parameter of NLP
471  *
472  * input:
473  *  - nlpi NLP interface structure
474  *  - problem datastructure for problem instance, can be NULL only if type == SCIP_NLPPAR_INFINITY
475  *  - type parameter number
476  *  - dval parameter value
477  */
478 #define SCIP_DECL_NLPISETREALPAR(x) SCIP_RETCODE x (SCIP_NLPI* nlpi, SCIP_NLPIPROBLEM* problem, SCIP_NLPPARAM type, SCIP_Real dval)
479 
480 /** gets string parameter of NLP
481  *
482  * input:
483  *  - nlpi NLP interface structure
484  *  - problem datastructure for problem instance
485  *  - type parameter number
486  *  - sval pointer to store the string value, the user must not modify the string
487  *
488  * output:
489  *  - sval parameter value
490  */
491 #define SCIP_DECL_NLPIGETSTRINGPAR(x) SCIP_RETCODE x (SCIP_NLPI* nlpi, SCIP_NLPIPROBLEM* problem, SCIP_NLPPARAM type, const char** sval)
492 
493 /** sets string parameter of NLP
494  *
495  * input:
496  *  - nlpi NLP interface structure
497  *  - problem datastructure for problem instance
498  *  - type parameter number
499  *  - sval parameter value
500  */
501 #define SCIP_DECL_NLPISETSTRINGPAR(x) SCIP_RETCODE x (SCIP_NLPI* nlpi, SCIP_NLPIPROBLEM* problem, SCIP_NLPPARAM type, const char* sval)
502 
503 /** sets message handler for message output
504  *
505  * input:
506  *  - nlpi NLP interface structure
507  *  - messagehdlr SCIP message handler, or NULL to suppress all output
508  */
509 #define SCIP_DECL_NLPISETMESSAGEHDLR(x) SCIP_RETCODE x (SCIP_NLPI* nlpi, SCIP_MESSAGEHDLR* messagehdlr)
510 
511 /**@} */
512 #ifdef __cplusplus
513 }
514 #endif
515 
516 #endif /*__SCIP_TYPE_NLPI_H__ */
517