SCIP Doxygen Documentation
 
Loading...
Searching...
No Matches
nlpi_all.c
Go to the documentation of this file.
1/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2/* */
3/* This file is part of the program and library */
4/* SCIP --- Solving Constraint Integer Programs */
5/* */
6/* Copyright (c) 2002-2024 Zuse Institute Berlin (ZIB) */
7/* */
8/* Licensed under the Apache License, Version 2.0 (the "License"); */
9/* you may not use this file except in compliance with the License. */
10/* You may obtain a copy of the License at */
11/* */
12/* http://www.apache.org/licenses/LICENSE-2.0 */
13/* */
14/* Unless required by applicable law or agreed to in writing, software */
15/* distributed under the License is distributed on an "AS IS" BASIS, */
16/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
17/* See the License for the specific language governing permissions and */
18/* limitations under the License. */
19/* */
20/* You should have received a copy of the Apache-2.0 license */
21/* along with SCIP; see the file LICENSE. If not visit scipopt.org. */
22/* */
23/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
24
25/**@file nlpi_all.c
26 * @ingroup DEFPLUGINS_NLPI
27 * @brief NLP interface that uses all available NLP interfaces
28 * @author Benjamin Mueller
29 */
30
31/*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
32
33#include "scip/nlpi_all.h"
34#include "scip/scip_mem.h"
35#include "scip/scip_numerics.h"
36#include "scip/scip_nlpi.h"
37#include "scip/pub_message.h"
38
39#include <string.h>
40
41#define NLPI_NAME "all" /**< short concise name of solver */
42#define NLPI_DESC "NLP interface that uses all available NLP interfaces" /**< description of solver */
43#define NLPI_PRIORITY -3000 /**< priority of NLP solver */
44
45/*
46 * Data structures
47 */
48
49struct SCIP_NlpiData
50{
51 SCIP_NLPI** nlpis; /**< array containing all nlpis */
52 int nnlpis; /**< total number of nlpis */
53};
54
56{
57 SCIP_NLPIPROBLEM** nlpiproblems; /**< array containing all nlpi problems */
58 int nnlpiproblems; /**< total number of nlpi problems */
59 int bestidx; /**< index of NLP solver with the best solution */
60};
61
62#ifdef SCIP_STATISTIC
63static int _nnlps = 0; /**< number of NLPs that have been solved */
64#endif
65
66/*
67 * Local methods
68 */
69
70/*
71 * Callback methods of NLP solver interface
72 */
73
74/** copy method of NLP interface (called when SCIP copies plugins) */
75static
77{
78 /* include NLPI */
80
81 return SCIP_OKAY; /*lint !e527*/
82} /*lint !e715*/
83
84/** destructor of NLP interface to free nlpi data */
85static
87{
88 assert(nlpi != NULL);
89 assert(nlpidata != NULL);
90 assert(*nlpidata != NULL);
91
92 SCIPfreeBlockMemoryArrayNull(scip, &(*nlpidata)->nlpis, (*nlpidata)->nnlpis);
93 SCIPfreeBlockMemory(scip, nlpidata);
94 assert(*nlpidata == NULL);
95
96 return SCIP_OKAY; /*lint !e527*/
97} /*lint !e715*/
98
99/** creates a problem instance */
100static
102{
103 SCIP_NLPIDATA* data;
104 int i;
105
106 assert(nlpi != NULL);
107 assert(problem != NULL);
108
109 data = SCIPnlpiGetData(nlpi);
110 assert(data != NULL);
111
113
114 /* initialize problem */
115 SCIP_CALL( SCIPallocBlockMemoryArray(scip, &(*problem)->nlpiproblems, data->nnlpis) );
116 (*problem)->nnlpiproblems = data->nnlpis;
117
118 for( i = 0; i < data->nnlpis; ++i )
119 {
120 assert(data->nlpis[i] != NULL);
121 SCIP_CALL( SCIPcreateNlpiProblem(scip, data->nlpis[i], &((*problem)->nlpiproblems[i]), name) );
122 }
123
124 return SCIP_OKAY;
125} /*lint !e715*/
126
127/** free a problem instance */
128static
130{
131 SCIP_NLPIDATA* data;
132 int i;
133
134 assert(nlpi != NULL);
135 assert(problem != NULL);
136 assert(*problem != NULL);
137
138 data = SCIPnlpiGetData(nlpi);
139 assert(data != NULL);
140
141 for( i = 0; i < data->nnlpis; ++i )
142 {
143 assert(data->nlpis[i] != NULL);
144 SCIP_CALL( SCIPfreeNlpiProblem(scip, data->nlpis[i], &(*problem)->nlpiproblems[i]) );
145 }
146
147 SCIPfreeBlockMemoryArrayNull(scip, &(*problem)->nlpiproblems, data->nnlpis);
148 SCIPfreeBlockMemory(scip, problem);
149
150 return SCIP_OKAY;
151} /*lint !e715*/
152
153/** add variables */
154static
156{
157 SCIP_NLPIDATA* nlpidata;
158 int i;
159
160 nlpidata = SCIPnlpiGetData(nlpi);
161 assert(nlpidata != NULL);
162
163 for( i = 0; i < nlpidata->nnlpis; ++i )
164 {
165 assert(nlpidata->nlpis[i] != NULL);
166 assert(problem->nlpiproblems[i] != NULL);
167
168 SCIP_CALL( SCIPaddNlpiVars(scip, nlpidata->nlpis[i], problem->nlpiproblems[i], nvars, lbs, ubs, varnames) );
169 }
170
171 return SCIP_OKAY;
172} /*lint !e715*/
173
174
175/** add constraints */
176static
178{
179 SCIP_NLPIDATA* nlpidata;
180 int i;
181
182 nlpidata = SCIPnlpiGetData(nlpi);
183 assert(nlpidata != NULL);
184
185 for( i = 0; i < nlpidata->nnlpis; ++i )
186 {
187 assert(nlpidata->nlpis[i] != NULL);
188 assert(problem->nlpiproblems[i] != NULL);
189
190 SCIP_CALL( SCIPaddNlpiConstraints(scip, nlpidata->nlpis[i], problem->nlpiproblems[i], nconss, lhss, rhss,
191 nlininds, lininds, linvals, exprs, names) );
192 }
193
194 return SCIP_OKAY;
195} /*lint !e715*/
196
197/** sets or overwrites objective, a minimization problem is expected */
198static
200{
201 SCIP_NLPIDATA* nlpidata;
202 int i;
203
204 nlpidata = SCIPnlpiGetData(nlpi);
205 assert(nlpidata != NULL);
206
207 for( i = 0; i < nlpidata->nnlpis; ++i )
208 {
209 assert(nlpidata->nlpis[i] != NULL);
210 assert(problem->nlpiproblems[i] != NULL);
211
212 SCIP_CALL( SCIPsetNlpiObjective(scip, nlpidata->nlpis[i], problem->nlpiproblems[i], nlins, lininds, linvals, expr, constant) );
213 }
214
215 return SCIP_OKAY;
216} /*lint !e715*/
217
218/** change variable bounds */
219static
221{
222 SCIP_NLPIDATA* nlpidata;
223 int i;
224
225 nlpidata = SCIPnlpiGetData(nlpi);
226 assert(nlpidata != NULL);
227
228 for( i = 0; i < nlpidata->nnlpis; ++i )
229 {
230 assert(nlpidata->nlpis[i] != NULL);
231 assert(problem->nlpiproblems[i] != NULL);
232
233 SCIP_CALL( SCIPchgNlpiVarBounds(scip, nlpidata->nlpis[i], problem->nlpiproblems[i], nvars, indices, lbs, ubs) );
234 }
235
236 return SCIP_OKAY;
237} /*lint !e715*/
238
239/** change constraint bounds */
240static
242{
243 SCIP_NLPIDATA* nlpidata;
244 int i;
245
246 nlpidata = SCIPnlpiGetData(nlpi);
247 assert(nlpidata != NULL);
248
249 for( i = 0; i < nlpidata->nnlpis; ++i )
250 {
251 assert(nlpidata->nlpis[i] != NULL);
252 assert(problem->nlpiproblems[i] != NULL);
253
254 SCIP_CALL( SCIPchgNlpiConsSides(scip, nlpidata->nlpis[i], problem->nlpiproblems[i], nconss, indices, lhss, rhss) );
255 }
256
257 return SCIP_OKAY;
258} /*lint !e715*/
259
260/** delete a set of variables */
261static
263{
264 SCIP_NLPIDATA* nlpidata;
265 int* tmpdstats;
266 int i;
267
268 nlpidata = SCIPnlpiGetData(nlpi);
269 assert(nlpidata != NULL);
270
272
273 for( i = 0; i < nlpidata->nnlpis; ++i )
274 {
275 assert(nlpidata->nlpis[i] != NULL);
276 assert(problem->nlpiproblems[i] != NULL);
277
278 if( i < nlpidata->nnlpis -1 )
279 {
280 /* restore dstats entries */
282
283 SCIP_CALL( SCIPdelNlpiVarSet(scip, nlpidata->nlpis[i], problem->nlpiproblems[i], tmpdstats, dstatssize) );
284 }
285 else
286 {
287 /* NOTE this works only when all dstats array are the same after calling the nlpidelvarset callback
288 * As long as all solvers use the SCIP NLPI oracle to store the NLP problem data, this is the case.
289 * @TODO Assert that the returned dstats are all the same?
290 */
291 SCIP_CALL( SCIPdelNlpiVarSet(scip, nlpidata->nlpis[i], problem->nlpiproblems[i], dstats, dstatssize) );
292 }
293 }
294
296
297 return SCIP_OKAY;
298} /*lint !e715*/
299
300/** delete a set of constraints */
301static
303{
304 SCIP_NLPIDATA* nlpidata;
305 int* tmpdstats;
306 int i;
307
308 nlpidata = SCIPnlpiGetData(nlpi);
309 assert(nlpidata != NULL);
310
312
313 for( i = 0; i < nlpidata->nnlpis; ++i )
314 {
315 assert(nlpidata->nlpis[i] != NULL);
316 assert(problem->nlpiproblems[i] != NULL);
317
318 if( i < nlpidata->nnlpis - 1 )
319 {
320 /* restore dstats entries */
322
323 SCIP_CALL( SCIPdelNlpiConsSet(scip, nlpidata->nlpis[i], problem->nlpiproblems[i], tmpdstats, dstatssize) );
324 }
325 else
326 {
327 /* NOTE this works only when all dstats array are the same after calling the nlpidelconsset callback
328 * As long as all solvers use the SCIP NLPI oracle to store the NLP problem data, this is the case.
329 * @TODO Assert that the returned dstats are all the same?
330 */
331 SCIP_CALL( SCIPdelNlpiConsSet(scip, nlpidata->nlpis[i], problem->nlpiproblems[i], dstats, dstatssize) );
332 }
333 }
334
336
337 return SCIP_OKAY;
338} /*lint !e715*/
339
340/** changes (or adds) linear coefficients in a constraint or objective */
341static
343{
344 SCIP_NLPIDATA* nlpidata;
345 int i;
346
347 nlpidata = SCIPnlpiGetData(nlpi);
348 assert(nlpidata != NULL);
349
350 for( i = 0; i < nlpidata->nnlpis; ++i )
351 {
352 assert(nlpidata->nlpis[i] != NULL);
353 assert(problem->nlpiproblems[i] != NULL);
354
355 SCIP_CALL( SCIPchgNlpiLinearCoefs(scip, nlpidata->nlpis[i], problem->nlpiproblems[i], idx, nvals, varidxs, vals) );
356 }
357
358 return SCIP_OKAY;
359} /*lint !e715*/
360
361/** replaces the expression of a constraint or objective */
362static
364{
365 SCIP_NLPIDATA* nlpidata;
366 int i;
367
368 nlpidata = SCIPnlpiGetData(nlpi);
369 assert(nlpidata != NULL);
370
371 for( i = 0; i < nlpidata->nnlpis; ++i )
372 {
373 assert(nlpidata->nlpis[i] != NULL);
374 assert(problem->nlpiproblems[i] != NULL);
375
376 SCIP_CALL( SCIPchgNlpiExpr(scip, nlpidata->nlpis[i], problem->nlpiproblems[i], idxcons, expr) );
377 }
378
379 return SCIP_OKAY;
380} /*lint !e715*/
381
382/** change the constant offset in the objective */
383static
385{
386 SCIP_NLPIDATA* nlpidata;
387 int i;
388
389 nlpidata = SCIPnlpiGetData(nlpi);
390 assert(nlpidata != NULL);
391
392 for( i = 0; i < nlpidata->nnlpis; ++i )
393 {
394 assert(nlpidata->nlpis[i] != NULL);
395 assert(problem->nlpiproblems[i] != NULL);
396
397 SCIP_CALL( SCIPchgNlpiObjConstant(scip, nlpidata->nlpis[i], problem->nlpiproblems[i], objconstant) );
398 }
399
400 return SCIP_OKAY;
401} /*lint !e715*/
402
403/** sets initial guess for primal variables */
404static
406{
407 SCIP_NLPIDATA* nlpidata;
408 int i;
409
410 nlpidata = SCIPnlpiGetData(nlpi);
411 assert(nlpidata != NULL);
412
413 for( i = 0; i < nlpidata->nnlpis; ++i )
414 {
415 assert(nlpidata->nlpis[i] != NULL);
416 assert(problem->nlpiproblems[i] != NULL);
417
418 SCIP_CALL( SCIPsetNlpiInitialGuess(scip, nlpidata->nlpis[i], problem->nlpiproblems[i], primalvalues, consdualvalues,
419 varlbdualvalues, varubdualvalues) );
420 }
421
422 return SCIP_OKAY;
423} /*lint !e715*/
424
425/** tries to solve NLP */
426static
428{
429 SCIP_NLPIDATA* nlpidata;
432 SCIP_Real bestsolval;
433 int i;
434
435 nlpidata = SCIPnlpiGetData(nlpi);
436 assert(nlpidata != NULL);
437
438 /* use first solver per default */
439 problem->bestidx = 0;
440
441 /* initialize best solution values */
445
446 for( i = 0; i < nlpidata->nnlpis; ++i )
447 {
448 SCIP_NLPTERMSTAT termstat;
449 SCIP_NLPSOLSTAT solstat;
450 SCIP_Real solval;
451 SCIP_Bool update;
452
453 assert(nlpidata->nlpis[i] != NULL);
454 assert(problem->nlpiproblems[i] != NULL);
455
456 /* solve NLP */
457 SCIP_CALL( SCIPsolveNlpiParam(scip, nlpidata->nlpis[i], problem->nlpiproblems[i], param) );
458
459 termstat = SCIPgetNlpiTermstat(scip, nlpidata->nlpis[i], problem->nlpiproblems[i]);
460 solstat = SCIPgetNlpiSolstat(scip, nlpidata->nlpis[i], problem->nlpiproblems[i]);
461 solval = SCIPinfinity(scip);
462 update = FALSE;
463
464 /* collect solution value */
465 if( solstat <= SCIP_NLPSOLSTAT_FEASIBLE )
466 {
467 SCIP_CALL( SCIPgetNlpiSolution(scip, nlpidata->nlpis[i], problem->nlpiproblems[i],
468 NULL, NULL, NULL, NULL, &solval) );
469 assert(!SCIPisInfinity(scip, solval));
470 }
471
472 /* better termination status -> update best solver */
473 if( termstat < besttermstat )
474 update = TRUE;
475
476 /* no feasible solutions have been found so far -> update best solver */
478 update = TRUE;
479
480 /* use solver with the better solution value */
481 else if( solval < bestsolval )
482 update = TRUE;
483
484 /* update best solver */
485 if( update )
486 {
487 besttermstat = termstat;
488 bestsolstat = solstat;
489 bestsolval = solval;
490 problem->bestidx = i;
491 }
492
493#ifdef SCIP_STATISTIC
494 {
495 SCIP_NLPSTATISTICS stats;
496
497 SCIP_CALL( SCIPgetNlpiStatistics(scip, nlpidata->nlpis[i], problem->nlpiproblems[i], &stats) );
498
499 SCIPstatisticMessage("%d solver %s termstat %d solstat %d solval %e iters %d time %g\n",
500 _nnlps, SCIPnlpiGetName(nlpidata->nlpis[i]), termstat, solstat, solval,
501 stats.niterations, stats.totaltime);
502 }
503#endif
504
505 /* don't try more NLP solvers if allowed time is exceeded or SCIP is asked to interrupt */
506 if( termstat == SCIP_NLPTERMSTAT_TIMELIMIT || termstat == SCIP_NLPTERMSTAT_INTERRUPT )
507 break;
508 }
509
510#ifdef SCIP_STATISTIC
511 ++_nnlps;
512#endif
513
514 return SCIP_OKAY;
515} /*lint !e715*/
516
517/** gives solution status */
518static
520{
521 SCIP_NLPIDATA* nlpidata;
522
523 nlpidata = SCIPnlpiGetData(nlpi);
524 assert(nlpidata != NULL);
525 assert(nlpidata->nlpis != NULL);
526 assert(nlpidata->nlpis[problem->bestidx] != NULL);
527 assert(problem->nlpiproblems != NULL);
528 assert(problem->nlpiproblems[problem->bestidx] != NULL);
529
530 /* return the solution status of the first nlpi */
531 return SCIPgetNlpiSolstat(scip, nlpidata->nlpis[problem->bestidx], problem->nlpiproblems[problem->bestidx]);
532}
533
534/** gives termination reason */
535static
537{
538 SCIP_NLPIDATA* nlpidata;
539
540 nlpidata = SCIPnlpiGetData(nlpi);
541 assert(nlpidata != NULL);
542 assert(nlpidata->nlpis != NULL);
543 assert(nlpidata->nlpis[problem->bestidx] != NULL);
544 assert(problem->nlpiproblems != NULL);
545 assert(problem->nlpiproblems[problem->bestidx] != NULL);
546
547 /* return the solution status of the first nlpi */
548 return SCIPgetNlpiTermstat(scip, nlpidata->nlpis[problem->bestidx], problem->nlpiproblems[problem->bestidx]);
549}
550
551/** gives primal and dual solution values */
552static
554{
555 SCIP_NLPIDATA* nlpidata;
556
557 nlpidata = SCIPnlpiGetData(nlpi);
558 assert(nlpidata != NULL);
559 assert(nlpidata->nlpis != NULL);
560 assert(nlpidata->nlpis[problem->bestidx] != NULL);
561 assert(problem->nlpiproblems != NULL);
562 assert(problem->nlpiproblems[problem->bestidx] != NULL);
563
564 /* return the solution status of the first nlpi */
565 SCIP_CALL( SCIPgetNlpiSolution(scip, nlpidata->nlpis[problem->bestidx], problem->nlpiproblems[problem->bestidx],
566 primalvalues, consdualvalues, varlbdualvalues, varubdualvalues, objval) );
567
568 return SCIP_OKAY;
569}
570
571/** gives solve statistics */
572static
574{
575 SCIP_NLPIDATA* nlpidata;
576
577 nlpidata = SCIPnlpiGetData(nlpi);
578 assert(nlpidata != NULL);
579 assert(nlpidata->nlpis != NULL);
580 assert(nlpidata->nlpis[problem->bestidx] != NULL);
581 assert(problem->nlpiproblems != NULL);
582 assert(problem->nlpiproblems[problem->bestidx] != NULL);
583
584 /* collect statistics of the first solver */
585 SCIP_CALL( SCIPgetNlpiStatistics(scip, nlpidata->nlpis[problem->bestidx], problem->nlpiproblems[problem->bestidx],
586 statistics) );
587
588 return SCIP_OKAY;
589} /*lint !e715*/
590
591/*
592 * NLP solver interface specific interface methods
593 */
594
595/** create solver interface for the solver "All" and includes it into SCIP, if at least 2 NLPIs have already been included
596 *
597 * This method should be called after all other NLP solver interfaces have been included.
598 */
600 SCIP* scip /**< SCIP data structure */
601 )
602{
603 SCIP_NLPIDATA* nlpidata;
604 int i;
605
606 assert(scip != NULL);
607
608 /* the number of NLPIs so far must be >= 2 */
609 if( SCIPgetNNlpis(scip) < 2 )
610 return SCIP_OKAY;
611
612 /* create all solver interface data */
614
615 nlpidata->nnlpis = SCIPgetNNlpis(scip);
616 SCIP_CALL( SCIPallocBlockMemoryArray(scip, &nlpidata->nlpis, nlpidata->nnlpis) );
617
618 /* copy nlpi pointers TODO should not need that */
619 for( i = 0; i < nlpidata->nnlpis; ++i )
620 nlpidata->nlpis[i] = SCIPgetNlpis(scip)[i];
621
622 /* create solver interface */
632 nlpidata) );
633
634 return SCIP_OKAY;
635}
#define NULL
Definition def.h:267
#define TRUE
Definition def.h:93
#define FALSE
Definition def.h:94
#define SCIP_CALL(x)
Definition def.h:374
SCIP_RETCODE SCIPincludeNlpSolverAll(SCIP *scip)
Definition nlpi_all.c:599
#define SCIPfreeBlockMemoryArray(scip, ptr, num)
Definition scip_mem.h:110
#define SCIPallocClearBlockMemory(scip, ptr)
Definition scip_mem.h:91
#define SCIPallocBlockMemoryArray(scip, ptr, num)
Definition scip_mem.h:93
#define SCIPfreeBlockMemory(scip, ptr)
Definition scip_mem.h:108
#define SCIPfreeBlockMemoryArrayNull(scip, ptr, num)
Definition scip_mem.h:111
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)
Definition scip_nlpi.c:108
SCIP_NLPIDATA * SCIPnlpiGetData(SCIP_NLPI *nlpi)
Definition nlpi.c:712
const char * SCIPnlpiGetName(SCIP_NLPI *nlpi)
Definition nlpi.c:722
int SCIPgetNNlpis(SCIP *scip)
Definition scip_nlpi.c:200
SCIP_NLPI ** SCIPgetNlpis(SCIP *scip)
Definition scip_nlpi.c:187
SCIP_Real SCIPinfinity(SCIP *scip)
SCIP_Bool SCIPisInfinity(SCIP *scip, SCIP_Real val)
return SCIP_OKAY
SCIP_Real objval
assert(minobj< SCIPgetCutoffbound(scip))
int nvars
#define BMScopyMemoryArray(ptr, source, num)
Definition memory.h:134
#define NLPI_PRIORITY
Definition nlpi_all.c:43
#define NLPI_NAME
Definition nlpi_all.c:41
#define NLPI_DESC
Definition nlpi_all.c:42
NLP interface that uses all available NLP interfaces.
public methods for message output
#define SCIPstatisticMessage
public methods for memory management
public methods for NLPI solver interfaces
public methods for numerical tolerances
SCIP_Real totaltime
Definition type_nlpi.h:200
SCIP_NLPIPROBLEM ** nlpiproblems
Definition nlpi_all.c:57
#define SCIP_DECL_NLPISOLVE(x)
Definition type_nlpi.h:497
#define SCIP_DECL_NLPICHGLINEARCOEFS(x)
Definition type_nlpi.h:432
#define SCIP_DECL_NLPICHGOBJCONSTANT(x)
Definition type_nlpi.h:463
#define SCIP_DECL_NLPIGETSOLUTION(x)
Definition type_nlpi.h:545
#define SCIP_DECL_NLPISETOBJECTIVE(x)
Definition type_nlpi.h:344
#define SCIP_DECL_NLPICREATEPROBLEM(x)
Definition type_nlpi.h:255
#define SCIP_DECL_NLPIGETSTATISTICS(x)
Definition type_nlpi.h:562
#define SCIP_DECL_NLPIDELCONSSET(x)
Definition type_nlpi.h:415
#define SCIP_DECL_NLPICHGCONSSIDES(x)
Definition type_nlpi.h:383
#define SCIP_DECL_NLPIDELVARSET(x)
Definition type_nlpi.h:400
#define SCIP_DECL_NLPICHGEXPR(x)
Definition type_nlpi.h:449
#define SCIP_DECL_NLPIADDVARS(x)
Definition type_nlpi.h:297
enum SCIP_NlpSolStat SCIP_NLPSOLSTAT
Definition type_nlpi.h:168
#define SCIP_DECL_NLPISETINITIALGUESS(x)
Definition type_nlpi.h:481
#define SCIP_DECL_NLPIFREEPROBLEM(x)
Definition type_nlpi.h:267
@ SCIP_NLPTERMSTAT_TIMELIMIT
Definition type_nlpi.h:174
@ SCIP_NLPTERMSTAT_OTHER
Definition type_nlpi.h:182
@ SCIP_NLPTERMSTAT_INTERRUPT
Definition type_nlpi.h:177
#define SCIP_DECL_NLPICOPY(x)
Definition type_nlpi.h:215
#define SCIP_DECL_NLPIGETSOLSTAT(x)
Definition type_nlpi.h:511
#define SCIP_DECL_NLPICHGVARBOUNDS(x)
Definition type_nlpi.h:364
#define SCIP_DECL_NLPIFREE(x)
Definition type_nlpi.h:225
#define SCIP_DECL_NLPIADDCONSTRAINTS(x)
Definition type_nlpi.h:320
@ SCIP_NLPSOLSTAT_LOCINFEASIBLE
Definition type_nlpi.h:163
@ SCIP_NLPSOLSTAT_FEASIBLE
Definition type_nlpi.h:162
@ SCIP_NLPSOLSTAT_UNKNOWN
Definition type_nlpi.h:166
#define SCIP_DECL_NLPIGETTERMSTAT(x)
Definition type_nlpi.h:524
enum SCIP_NlpTermStat SCIP_NLPTERMSTAT
Definition type_nlpi.h:194
struct SCIP_NlpiData SCIP_NLPIDATA
Definition type_nlpi.h:52
enum SCIP_Retcode SCIP_RETCODE