Scippy

SCIP

Solving Constraint Integer Programs

lpi_none.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 2002-2022 Zuse Institute Berlin */
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 lpi_none.c
26  * @ingroup LPIS
27  * @brief dummy interface for the case no LP solver is needed
28  * @author Stefan Heinz
29  */
30 
31 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
32 
33 #include <assert.h>
34 
35 #include "lpi/lpi.h"
36 #include "scip/pub_message.h"
37 
38 #define LPINAME "NONE" /**< name of the LPI interface */
39 #define LPIINFINITY 1e20 /**< infinity value */
40 
41 
42 /* globally turn off lint warnings: */
43 /*lint --e{715}*/
44 
45 /** LP interface
46  *
47  * Store several statistic values about the LP. These values are only needed in order to provide a rudimentary
48  * communication, e.g., there are asserts that check the number of rows and columns.
49  */
50 struct SCIP_LPi
51 {
52  int nrows; /**< number of rows */
53  int ncols; /**< number of columns */
54 };
55 
56 
57 /*
58  * Local Methods
59  */
60 
61 /** error handling method */
62 static
64  void
65  )
66 { /*lint --e{2707}*/
67  SCIPerrorMessage("No LP solver available (LPS=none).\n");
68  SCIPerrorMessage("Ensure <lp/solvefreq = -1>; note that continuous variables might require an LP-solver.\n");
69  SCIPABORT();
70 }
71 
72 /** error handling method */
73 static
75  void
76  )
77 {
78  SCIPerrorMessage("No LP solver available (LPS=none).\n");
79  SCIPerrorMessage("Ensure <lp/solvefreq = -1>; note that continuous variables might require an LP-solver.\n");
80 }
81 
82 /*
83  * LP Interface Methods
84  */
85 
86 
87 /*
88  * Miscellaneous Methods
89  */
90 
91 /**@name Miscellaneous Methods */
92 /**@{ */
93 
94 /** gets name and version of LP solver */
96  void
97  )
98 {
99  return LPINAME;
100 }
101 
102 /** gets description of LP solver (developer, webpage, ...) */
104  void
105  )
106 {
107  return "dummy LP solver interface which solely purpose is to resolve references at linking";
108 }
109 
110 /** gets pointer for LP solver - use only with great care */
112  SCIP_LPI* lpi /**< pointer to an LP interface structure */
113  )
114 { /*lint --e{715}*/
115  return (void*) NULL;
116 }
117 
118 /** pass integrality information to LP solver */
120  SCIP_LPI* lpi, /**< pointer to an LP interface structure */
121  int ncols, /**< length of integrality array */
122  int* intInfo /**< integrality array (0: continuous, 1: integer). May be NULL iff ncols is 0. */
123  )
124 { /*lint --e{715}*/
125  SCIPerrorMessage("SCIPlpiSetIntegralityInformation() has not been implemented yet.\n");
126  return SCIP_LPERROR;
127 }
128 
129 /** informs about availability of a primal simplex solving method */
131  void
132  )
133 {
134  return FALSE;
135 }
136 
137 /** informs about availability of a dual simplex solving method */
139  void
140  )
141 {
142  return FALSE;
143 }
144 
145 /** informs about availability of a barrier solving method */
147  void
148  )
149 {
150  return FALSE;
151 }
152 
153 /**@} */
154 
155 
156 
157 
158 /*
159  * LPI Creation and Destruction Methods
160  */
161 
162 /**@name LPI Creation and Destruction Methods */
163 /**@{ */
164 
165 /** creates an LP problem object */
167  SCIP_LPI** lpi, /**< pointer to an LP interface structure */
168  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler to use for printing messages, or NULL */
169  const char* name, /**< problem name */
170  SCIP_OBJSEN objsen /**< objective sense */
171  )
172 { /*lint --e{715}*/
173  assert(lpi != NULL);
174  assert(name != NULL);
175  SCIPdebugMessage("SCIPlpiCreate()\n");
176  SCIPdebugMessage("Note that there is no LP solver linked to the binary\n");
177 
178  /* create empty LPI */
179  SCIP_ALLOC( BMSallocMemory(lpi) );
180  (*lpi)->nrows = 0;
181  (*lpi)->ncols = 0;
182 
183  return SCIP_OKAY;
184 }
185 
186 /** deletes an LP problem object */
188  SCIP_LPI** lpi /**< pointer to an LP interface structure */
189  )
190 { /*lint --e{715}*/
191  assert( lpi != NULL );
192  SCIPdebugMessage("SCIPlpiFree()\n");
193 
194  BMSfreeMemory(lpi);
195 
196  return SCIP_OKAY;
197 }
198 
199 /**@} */
200 
201 
202 
203 
204 /*
205  * Modification Methods
206  */
207 
208 /**@name Modification Methods */
209 /**@{ */
210 
211 /** copies LP data with column matrix into LP solver */
213  SCIP_LPI* lpi, /**< LP interface structure */
214  SCIP_OBJSEN objsen, /**< objective sense */
215  int ncols, /**< number of columns */
216  const SCIP_Real* obj, /**< objective function values of columns */
217  const SCIP_Real* lb, /**< lower bounds of columns */
218  const SCIP_Real* ub, /**< upper bounds of columns */
219  char** colnames, /**< column names, or NULL */
220  int nrows, /**< number of rows */
221  const SCIP_Real* lhs, /**< left hand sides of rows */
222  const SCIP_Real* rhs, /**< right hand sides of rows */
223  char** rownames, /**< row names, or NULL */
224  int nnonz, /**< number of nonzero elements in the constraint matrix */
225  const int* beg, /**< start index of each column in ind- and val-array */
226  const int* ind, /**< row indices of constraint matrix entries */
227  const SCIP_Real* val /**< values of constraint matrix entries */
228  )
229 { /*lint --e{715}*/
230 
231 #ifndef NDEBUG
232  {
233  int j;
234  for( j = 0; j < nnonz; j++ )
235  assert( val[j] != 0 );
236  }
237 #endif
238 
239  assert( lpi != NULL );
240  assert(lhs != NULL);
241  assert(rhs != NULL);
242  assert(obj != NULL);
243  assert(lb != NULL);
244  assert(ub != NULL);
245  assert(beg != NULL);
246  assert(ind != NULL);
247  assert(val != NULL);
248 
249  lpi->nrows = nrows;
250  lpi->ncols = ncols;
251  assert( lpi->nrows >= 0 );
252  assert( lpi->ncols >= 0 );
253 
254  return SCIP_OKAY;
255 }
256 
257 /** adds columns to the LP */
259  SCIP_LPI* lpi, /**< LP interface structure */
260  int ncols, /**< number of columns to be added */
261  const SCIP_Real* obj, /**< objective function values of new columns */
262  const SCIP_Real* lb, /**< lower bounds of new columns */
263  const SCIP_Real* ub, /**< upper bounds of new columns */
264  char** colnames, /**< column names, or NULL */
265  int nnonz, /**< number of nonzero elements to be added to the constraint matrix */
266  const int* beg, /**< start index of each column in ind- and val-array, or NULL if nnonz == 0 */
267  const int* ind, /**< row indices of constraint matrix entries, or NULL if nnonz == 0 */
268  const SCIP_Real* val /**< values of constraint matrix entries, or NULL if nnonz == 0 */
269  )
270 { /*lint --e{715}*/
271  assert( lpi != NULL );
272  assert( lpi->ncols >= 0 );
273  assert(obj != NULL);
274  assert(lb != NULL);
275  assert(ub != NULL);
276  assert(nnonz == 0 || beg != NULL);
277  assert(nnonz == 0 || ind != NULL);
278  assert(nnonz == 0 || val != NULL);
279  assert(nnonz >= 0);
280  assert(ncols >= 0);
281 
282 #ifndef NDEBUG
283  {
284  int j;
285  for( j = 0; j < nnonz; j++ )
286  {
287  assert( val[j] != 0.0 );
288  /* perform check that no new rows are added - this is forbidden */
289  assert( 0 <= ind[j] && ind[j] < lpi->nrows );
290  }
291  }
292 #endif
293 
294  lpi->ncols += ncols;
295 
296  return SCIP_OKAY;
297 }
298 
299 /** deletes all columns in the given range from LP */
301  SCIP_LPI* lpi, /**< LP interface structure */
302  int firstcol, /**< first column to be deleted */
303  int lastcol /**< last column to be deleted */
304  )
305 { /*lint --e{715}*/
306  assert( lpi != NULL );
307  assert( lpi->ncols >= 0 );
308 
309  lpi->ncols -= lastcol - firstcol + 1;
310  assert( lpi->ncols >= 0 );
311 
312  return SCIP_OKAY;
313 }
314 
315 /** deletes columns from SCIP_LP; the new position of a column must not be greater that its old position */
317  SCIP_LPI* lpi, /**< LP interface structure */
318  int* dstat /**< deletion status of columns
319  * input: 1 if column should be deleted, 0 if not
320  * output: new position of column, -1 if column was deleted */
321  )
322 { /*lint --e{715}*/
323  int cnt = 0;
324  int j;
325 
326  assert( lpi != NULL );
327  assert( dstat != NULL );
328  assert( lpi->ncols >= 0 );
329 
330  for (j = 0; j < lpi->ncols; ++j)
331  {
332  if ( dstat[j] )
333  {
334  ++cnt;
335  dstat[j] = -1;
336  }
337  else
338  dstat[j] = cnt;
339  }
340  lpi->ncols -= cnt;
341  assert( lpi->ncols >= 0 );
342 
343  return SCIP_OKAY;
344 }
345 
346 /** adds rows to the LP */
348  SCIP_LPI* lpi, /**< LP interface structure */
349  int nrows, /**< number of rows to be added */
350  const SCIP_Real* lhs, /**< left hand sides of new rows */
351  const SCIP_Real* rhs, /**< right hand sides of new rows */
352  char** rownames, /**< row names, or NULL */
353  int nnonz, /**< number of nonzero elements to be added to the constraint matrix */
354  const int* beg, /**< start index of each row in ind- and val-array, or NULL if nnonz == 0 */
355  const int* ind, /**< column indices of constraint matrix entries, or NULL if nnonz == 0 */
356  const SCIP_Real* val /**< values of constraint matrix entries, or NULL if nnonz == 0 */
357  )
358 { /*lint --e{715}*/
359 
360  assert( lpi != NULL );
361  assert( lpi->nrows >= 0 );
362  assert(lhs != NULL);
363  assert(rhs != NULL);
364  assert(nnonz == 0 || beg != NULL);
365  assert(nnonz == 0 || ind != NULL);
366  assert(nnonz == 0 || val != NULL);
367 
368 #ifndef NDEBUG
369  /* perform check that no new columns are added - this is forbidden */
370  {
371  int j;
372  for (j = 0; j < nnonz; ++j)
373  {
374  assert( val[j] != 0.0 );
375  assert( 0 <= ind[j] && ind[j] < lpi->ncols );
376  }
377  }
378 #endif
379 
380  lpi->nrows += nrows;
381 
382  return SCIP_OKAY;
383 }
384 
385 /** deletes all rows in the given range from LP */
387  SCIP_LPI* lpi, /**< LP interface structure */
388  int firstrow, /**< first row to be deleted */
389  int lastrow /**< last row to be deleted */
390  )
391 { /*lint --e{715}*/
392  assert( lpi != NULL );
393  assert( lpi->nrows >= 0 );
394 
395  lpi->nrows -= lastrow - firstrow + 1;
396  assert( lpi->nrows >= 0 );
397 
398  return SCIP_OKAY;
399 }
400 
401 /** deletes rows from SCIP_LP; the new position of a row must not be greater that its old position */
403  SCIP_LPI* lpi, /**< LP interface structure */
404  int* dstat /**< deletion status of rows
405  * input: 1 if row should be deleted, 0 if not
406  * output: new position of row, -1 if row was deleted */
407  )
408 { /*lint --e{715}*/
409  int cnt = 0;
410  int i;
411 
412  assert( lpi != NULL );
413  assert( dstat != NULL );
414  assert( lpi->nrows >= 0 );
415 
416  for (i = 0; i < lpi->nrows; ++i)
417  {
418  if ( dstat[i] )
419  {
420  ++cnt;
421  dstat[i] = -1;
422  }
423  else
424  dstat[i] = cnt;
425  }
426  lpi->nrows -= cnt;
427  assert( lpi->nrows >= 0 );
428 
429  return SCIP_OKAY;
430 }
431 
432 /** clears the whole LP */
434  SCIP_LPI* lpi /**< LP interface structure */
435  )
436 { /*lint --e{715}*/
437  assert( lpi != NULL );
438  assert( lpi->nrows >= 0 );
439  assert( lpi->ncols >= 0 );
440 
441  lpi->nrows = 0;
442  lpi->ncols = 0;
443 
444  return SCIP_OKAY;
445 }
446 
447 /** changes lower and upper bounds of columns */
449  SCIP_LPI* lpi, /**< LP interface structure */
450  int ncols, /**< number of columns to change bounds for */
451  const int* ind, /**< column indices or NULL if ncols is zero */
452  const SCIP_Real* lb, /**< values for the new lower bounds or NULL if ncols is zero */
453  const SCIP_Real* ub /**< values for the new upper bounds or NULL if ncols is zero */
454  )
455 { /*lint --e{715}*/
456  int j;
457 
458  assert(ncols == 0 || (ind != NULL && lb != NULL && ub != NULL));
459 
460  if( ncols <= 0 )
461  return SCIP_OKAY;
462 
463  for (j = 0; j < ncols; ++j)
464  {
465  if ( SCIPlpiIsInfinity(lpi, lb[j]) )
466  {
467  SCIPerrorMessage("LP Error: fixing lower bound for variable %d to infinity.\n", ind[j]);
468  return SCIP_LPERROR;
469  }
470  if ( SCIPlpiIsInfinity(lpi, -ub[j]) )
471  {
472  SCIPerrorMessage("LP Error: fixing upper bound for variable %d to -infinity.\n", ind[j]);
473  return SCIP_LPERROR;
474  }
475  }
476 
477  return SCIP_OKAY;
478 }
479 
480 /** changes left and right hand sides of rows */
482  SCIP_LPI* lpi, /**< LP interface structure */
483  int nrows, /**< number of rows to change sides for */
484  const int* ind, /**< row indices */
485  const SCIP_Real* lhs, /**< new values for left hand sides */
486  const SCIP_Real* rhs /**< new values for right hand sides */
487  )
488 { /*lint --e{715}*/
489  assert(lpi != NULL);
490  assert(ind != NULL);
491  assert(lhs != NULL);
492  assert(rhs != NULL);
493  return SCIP_OKAY;
494 }
495 
496 /** changes a single coefficient */
498  SCIP_LPI* lpi, /**< LP interface structure */
499  int row, /**< row number of coefficient to change */
500  int col, /**< column number of coefficient to change */
501  SCIP_Real newval /**< new value of coefficient */
502  )
503 { /*lint --e{715}*/
504  assert(lpi != NULL);
505  return SCIP_OKAY;
506 }
507 
508 /** changes the objective sense */
510  SCIP_LPI* lpi, /**< LP interface structure */
511  SCIP_OBJSEN objsen /**< new objective sense */
512  )
513 { /*lint --e{715}*/
514  assert(lpi != NULL);
515  return SCIP_OKAY;
516 }
517 
518 /** changes objective values of columns in the LP */
520  SCIP_LPI* lpi, /**< LP interface structure */
521  int ncols, /**< number of columns to change objective value for */
522  const int* ind, /**< column indices to change objective value for */
523  const SCIP_Real* obj /**< new objective values for columns */
524  )
525 { /*lint --e{715}*/
526  assert(lpi != NULL);
527  assert(ind != NULL);
528  assert(obj != NULL);
529  return SCIP_OKAY;
530 }
531 
532 /** multiplies a row with a non-zero scalar; for negative scalars, the row's sense is switched accordingly */
534  SCIP_LPI* lpi, /**< LP interface structure */
535  int row, /**< row number to scale */
536  SCIP_Real scaleval /**< scaling multiplier */
537  )
538 { /*lint --e{715}*/
539  assert(lpi != NULL);
540  return SCIP_OKAY;
541 }
542 
543 /** multiplies a column with a non-zero scalar; the objective value is multiplied with the scalar, and the bounds
544  * are divided by the scalar; for negative scalars, the column's bounds are switched
545  */
547  SCIP_LPI* lpi, /**< LP interface structure */
548  int col, /**< column number to scale */
549  SCIP_Real scaleval /**< scaling multiplier */
550  )
551 { /*lint --e{715}*/
552  assert(lpi != NULL);
553  return SCIP_OKAY;
554 }
555 
556 /**@} */
557 
558 
559 
560 
561 /*
562  * Data Accessing Methods
563  */
564 
565 /**@name Data Accessing Methods */
566 /**@{ */
567 
568 /** gets the number of rows in the LP */
570  SCIP_LPI* lpi, /**< LP interface structure */
571  int* nrows /**< pointer to store the number of rows */
572  )
573 { /*lint --e{715}*/
574  assert( lpi != NULL );
575  assert( nrows != NULL );
576  assert( lpi->nrows >= 0 );
577 
578  *nrows = lpi->nrows;
579 
580  return SCIP_OKAY;
581 }
582 
583 /** gets the number of columns in the LP */
585  SCIP_LPI* lpi, /**< LP interface structure */
586  int* ncols /**< pointer to store the number of cols */
587  )
588 { /*lint --e{715}*/
589  assert( lpi != NULL );
590  assert( ncols != NULL );
591  assert( lpi->ncols >= 0 );
592 
593  *ncols = lpi->ncols;
594 
595  return SCIP_OKAY;
596 }
597 
598 /** gets the number of nonzero elements in the LP constraint matrix */
600  SCIP_LPI* lpi, /**< LP interface structure */
601  int* nnonz /**< pointer to store the number of nonzeros */
602  )
603 { /*lint --e{715}*/
604  assert(nnonz != NULL);
605  assert(lpi != NULL);
606  errorMessage();
607  return SCIP_PLUGINNOTFOUND;
608 }
609 
610 /** gets columns from LP problem object; the arrays have to be large enough to store all values
611  * Either both, lb and ub, have to be NULL, or both have to be non-NULL,
612  * either nnonz, beg, ind, and val have to be NULL, or all of them have to be non-NULL.
613  */
615  SCIP_LPI* lpi, /**< LP interface structure */
616  int firstcol, /**< first column to get from LP */
617  int lastcol, /**< last column to get from LP */
618  SCIP_Real* lb, /**< buffer to store the lower bound vector, or NULL */
619  SCIP_Real* ub, /**< buffer to store the upper bound vector, or NULL */
620  int* nnonz, /**< pointer to store the number of nonzero elements returned, or NULL */
621  int* beg, /**< buffer to store start index of each column in ind- and val-array, or NULL */
622  int* ind, /**< buffer to store row indices of constraint matrix entries, or NULL */
623  SCIP_Real* val /**< buffer to store values of constraint matrix entries, or NULL */
624  )
625 { /*lint --e{715}*/
626  errorMessage();
627  return SCIP_PLUGINNOTFOUND;
628 }
629 
630 /** gets rows from LP problem object; the arrays have to be large enough to store all values.
631  * Either both, lhs and rhs, have to be NULL, or both have to be non-NULL,
632  * either nnonz, beg, ind, and val have to be NULL, or all of them have to be non-NULL.
633  */
635  SCIP_LPI* lpi, /**< LP interface structure */
636  int firstrow, /**< first row to get from LP */
637  int lastrow, /**< last row to get from LP */
638  SCIP_Real* lhs, /**< buffer to store left hand side vector, or NULL */
639  SCIP_Real* rhs, /**< buffer to store right hand side vector, or NULL */
640  int* nnonz, /**< pointer to store the number of nonzero elements returned, or NULL */
641  int* beg, /**< buffer to store start index of each row in ind- and val-array, or NULL */
642  int* ind, /**< buffer to store column indices of constraint matrix entries, or NULL */
643  SCIP_Real* val /**< buffer to store values of constraint matrix entries, or NULL */
644  )
645 { /*lint --e{715}*/
646  errorMessage();
647  return SCIP_PLUGINNOTFOUND;
648 }
649 
650 /** gets column names */
652  SCIP_LPI* lpi, /**< LP interface structure */
653  int firstcol, /**< first column to get name from LP */
654  int lastcol, /**< last column to get name from LP */
655  char** colnames, /**< pointers to column names (of size at least lastcol-firstcol+1) or NULL if namestoragesize is zero */
656  char* namestorage, /**< storage for col names or NULL if namestoragesize is zero */
657  int namestoragesize, /**< size of namestorage (if 0, storageleft returns the storage needed) */
658  int* storageleft /**< amount of storage left (if < 0 the namestorage was not big enough) or NULL if namestoragesize is zero */
659  )
660 { /*lint --e{715}*/
661  assert(lpi != NULL);
662  assert(colnames != NULL || namestoragesize == 0);
663  assert(namestorage != NULL || namestoragesize == 0);
664  assert(namestoragesize >= 0);
665  assert(storageleft != NULL);
666  errorMessage();
667  return SCIP_PLUGINNOTFOUND;
668 }
669 
670 /** gets row names */
672  SCIP_LPI* lpi, /**< LP interface structure */
673  int firstrow, /**< first row to get name from LP */
674  int lastrow, /**< last row to get name from LP */
675  char** rownames, /**< pointers to row names (of size at least lastrow-firstrow+1) or NULL if namestoragesize is zero */
676  char* namestorage, /**< storage for row names or NULL if namestoragesize is zero */
677  int namestoragesize, /**< size of namestorage (if 0, -storageleft returns the storage needed) */
678  int* storageleft /**< amount of storage left (if < 0 the namestorage was not big enough) or NULL if namestoragesize is zero */
679  )
680 { /*lint --e{715}*/
681  assert(lpi != NULL);
682  assert(rownames != NULL || namestoragesize == 0);
683  assert(namestorage != NULL || namestoragesize == 0);
684  assert(namestoragesize >= 0);
685  assert(storageleft != NULL);
686  errorMessage();
687  return SCIP_PLUGINNOTFOUND;
688 }
689 
690 /** gets the objective sense of the LP */
692  SCIP_LPI* lpi, /**< LP interface structure */
693  SCIP_OBJSEN* objsen /**< pointer to store objective sense */
694  )
695 { /*lint --e{715}*/
696  errorMessage();
697  return SCIP_PLUGINNOTFOUND;
698 }
699 
700 /** gets objective coefficients from LP problem object */
702  SCIP_LPI* lpi, /**< LP interface structure */
703  int firstcol, /**< first column to get objective coefficient for */
704  int lastcol, /**< last column to get objective coefficient for */
705  SCIP_Real* vals /**< array to store objective coefficients */
706  )
707 { /*lint --e{715}*/
708  assert(lpi != NULL);
709  assert(firstcol <= lastcol);
710  assert(vals != NULL);
711  errorMessage();
712  return SCIP_PLUGINNOTFOUND;
713 }
714 
715 /** gets current bounds from LP problem object */
717  SCIP_LPI* lpi, /**< LP interface structure */
718  int firstcol, /**< first column to get bounds for */
719  int lastcol, /**< last column to get bounds for */
720  SCIP_Real* lbs, /**< array to store lower bound values, or NULL */
721  SCIP_Real* ubs /**< array to store upper bound values, or NULL */
722  )
723 { /*lint --e{715}*/
724  assert(lpi != NULL);
725  assert(firstcol <= lastcol);
726  errorMessage();
727  return SCIP_PLUGINNOTFOUND;
728 }
729 
730 /** gets current row sides from LP problem object */
732  SCIP_LPI* lpi, /**< LP interface structure */
733  int firstrow, /**< first row to get sides for */
734  int lastrow, /**< last row to get sides for */
735  SCIP_Real* lhss, /**< array to store left hand side values, or NULL */
736  SCIP_Real* rhss /**< array to store right hand side values, or NULL */
737  )
738 { /*lint --e{715}*/
739  assert(lpi != NULL);
740  assert(firstrow <= lastrow);
741  errorMessage();
742  return SCIP_PLUGINNOTFOUND;
743 }
744 
745 /** gets a single coefficient */
747  SCIP_LPI* lpi, /**< LP interface structure */
748  int row, /**< row number of coefficient */
749  int col, /**< column number of coefficient */
750  SCIP_Real* val /**< pointer to store the value of the coefficient */
751  )
752 { /*lint --e{715}*/
753  assert(lpi != NULL);
754  assert(val != NULL);
755  errorMessage();
756  return SCIP_PLUGINNOTFOUND;
757 }
758 
759 /**@} */
760 
761 
762 
763 
764 /*
765  * Solving Methods
766  */
767 
768 /**@name Solving Methods */
769 /**@{ */
770 
771 /** calls primal simplex to solve the LP */
773  SCIP_LPI* lpi /**< LP interface structure */
774  )
775 { /*lint --e{715}*/
776  assert(lpi != NULL);
777  errorMessage();
778  return SCIP_PLUGINNOTFOUND;
779 }
780 
781 /** calls dual simplex to solve the LP */
783  SCIP_LPI* lpi /**< LP interface structure */
784  )
785 { /*lint --e{715}*/
786  assert(lpi != NULL);
787  errorMessage();
788  return SCIP_PLUGINNOTFOUND;
789 }
790 
791 /** calls barrier or interior point algorithm to solve the LP with crossover to simplex basis */
793  SCIP_LPI* lpi, /**< LP interface structure */
794  SCIP_Bool crossover /**< perform crossover */
795  )
796 { /*lint --e{715}*/
797  assert(lpi != NULL);
798  errorMessage();
799  return SCIP_PLUGINNOTFOUND;
800 }
801 
802 /** start strong branching - call before any strong branching */
804  SCIP_LPI* lpi /**< LP interface structure */
805  )
806 { /*lint --e{715}*/
807  assert(lpi != NULL);
808  return SCIP_OKAY;
809 }
810 
811 /** end strong branching - call after any strong branching */
813  SCIP_LPI* lpi /**< LP interface structure */
814  )
815 { /*lint --e{715}*/
816  assert(lpi != NULL);
817  return SCIP_OKAY;
818 }
819 
820 /** performs strong branching iterations on one @b fractional candidate */
822  SCIP_LPI* lpi, /**< LP interface structure */
823  int col, /**< column to apply strong branching on */
824  SCIP_Real psol, /**< fractional current primal solution value of column */
825  int itlim, /**< iteration limit for strong branchings */
826  SCIP_Real* down, /**< stores dual bound after branching column down */
827  SCIP_Real* up, /**< stores dual bound after branching column up */
828  SCIP_Bool* downvalid, /**< stores whether the returned down value is a valid dual bound;
829  * otherwise, it can only be used as an estimate value */
830  SCIP_Bool* upvalid, /**< stores whether the returned up value is a valid dual bound;
831  * otherwise, it can only be used as an estimate value */
832  int* iter /**< stores total number of strong branching iterations, or -1; may be NULL */
833  )
834 { /*lint --e{715}*/
835  assert(lpi != NULL);
836  assert( down != NULL );
837  assert( up != NULL );
838  assert( downvalid != NULL );
839  assert( upvalid != NULL );
840  errorMessage();
841  return SCIP_PLUGINNOTFOUND;
842 }
843 
844 /** performs strong branching iterations on given @b fractional candidates */
846  SCIP_LPI* lpi, /**< LP interface structure */
847  int* cols, /**< columns to apply strong branching on */
848  int ncols, /**< number of columns */
849  SCIP_Real* psols, /**< fractional current primal solution values of columns */
850  int itlim, /**< iteration limit for strong branchings */
851  SCIP_Real* down, /**< stores dual bounds after branching columns down */
852  SCIP_Real* up, /**< stores dual bounds after branching columns up */
853  SCIP_Bool* downvalid, /**< stores whether the returned down values are valid dual bounds;
854  * otherwise, they can only be used as an estimate values */
855  SCIP_Bool* upvalid, /**< stores whether the returned up values are a valid dual bounds;
856  * otherwise, they can only be used as an estimate values */
857  int* iter /**< stores total number of strong branching iterations, or -1; may be NULL */
858  )
859 { /*lint --e{715}*/
860  assert(lpi != NULL);
861  assert( cols != NULL );
862  assert( psols != NULL );
863  assert( down != NULL );
864  assert( up != NULL );
865  assert( downvalid != NULL );
866  assert( upvalid != NULL );
867  errorMessage();
868  return SCIP_PLUGINNOTFOUND;
869 }
870 
871 /** performs strong branching iterations on one candidate with @b integral value */
873  SCIP_LPI* lpi, /**< LP interface structure */
874  int col, /**< column to apply strong branching on */
875  SCIP_Real psol, /**< current integral primal solution value of column */
876  int itlim, /**< iteration limit for strong branchings */
877  SCIP_Real* down, /**< stores dual bound after branching column down */
878  SCIP_Real* up, /**< stores dual bound after branching column up */
879  SCIP_Bool* downvalid, /**< stores whether the returned down value is a valid dual bound;
880  * otherwise, it can only be used as an estimate value */
881  SCIP_Bool* upvalid, /**< stores whether the returned up value is a valid dual bound;
882  * otherwise, it can only be used as an estimate value */
883  int* iter /**< stores total number of strong branching iterations, or -1; may be NULL */
884  )
885 { /*lint --e{715}*/
886  assert(lpi != NULL);
887  assert( down != NULL );
888  assert( up != NULL );
889  assert( downvalid != NULL );
890  assert( upvalid != NULL );
891  errorMessage();
892  return SCIP_PLUGINNOTFOUND;
893 }
894 
895 /** performs strong branching iterations on given candidates with @b integral values */
897  SCIP_LPI* lpi, /**< LP interface structure */
898  int* cols, /**< columns to apply strong branching on */
899  int ncols, /**< number of columns */
900  SCIP_Real* psols, /**< current integral primal solution values of columns */
901  int itlim, /**< iteration limit for strong branchings */
902  SCIP_Real* down, /**< stores dual bounds after branching columns down */
903  SCIP_Real* up, /**< stores dual bounds after branching columns up */
904  SCIP_Bool* downvalid, /**< stores whether the returned down values are valid dual bounds;
905  * otherwise, they can only be used as an estimate values */
906  SCIP_Bool* upvalid, /**< stores whether the returned up values are a valid dual bounds;
907  * otherwise, they can only be used as an estimate values */
908  int* iter /**< stores total number of strong branching iterations, or -1; may be NULL */
909  )
910 { /*lint --e{715}*/
911  assert(lpi != NULL);
912  assert( cols != NULL );
913  assert( psols != NULL );
914  assert( down != NULL );
915  assert( up != NULL );
916  assert( downvalid != NULL );
917  assert( upvalid != NULL );
918  errorMessage();
919  return SCIP_PLUGINNOTFOUND;
920 }
921 /**@} */
922 
923 
924 
925 
926 /*
927  * Solution Information Methods
928  */
929 
930 /**@name Solution Information Methods */
931 /**@{ */
932 
933 /** returns whether a solve method was called after the last modification of the LP */
935  SCIP_LPI* lpi /**< LP interface structure */
936  )
937 { /*lint --e{715}*/
938  assert(lpi != NULL);
940  return FALSE;
941 }
942 
943 /** gets information about primal and dual feasibility of the current LP solution
944  *
945  * The feasibility information is with respect to the last solving call and it is only relevant if SCIPlpiWasSolved()
946  * returns true. If the LP is changed, this information might be invalidated.
947  *
948  * Note that @a primalfeasible and @a dualfeasible should only return true if the solver has proved the respective LP to
949  * be feasible. Thus, the return values should be equal to the values of SCIPlpiIsPrimalFeasible() and
950  * SCIPlpiIsDualFeasible(), respectively. Note that if feasibility cannot be proved, they should return false (even if
951  * the problem might actually be feasible).
952  */
954  SCIP_LPI* lpi, /**< LP interface structure */
955  SCIP_Bool* primalfeasible, /**< pointer to store primal feasibility status */
956  SCIP_Bool* dualfeasible /**< pointer to store dual feasibility status */
957  )
958 { /*lint --e{715}*/
959  assert(lpi != NULL);
960  assert(primalfeasible != NULL);
961  assert(dualfeasible != NULL);
962  errorMessage();
963  return SCIP_PLUGINNOTFOUND;
964 }
965 
966 /** returns TRUE iff LP is proven to have a primal unbounded ray (but not necessary a primal feasible point);
967  * this does not necessarily mean, that the solver knows and can return the primal ray
968  */
970  SCIP_LPI* lpi /**< LP interface structure */
971  )
972 { /*lint --e{715}*/
973  assert(lpi != NULL);
975  return FALSE;
976 }
977 
978 /** returns TRUE iff LP is proven to have a primal unbounded ray (but not necessary a primal feasible point),
979  * and the solver knows and can return the primal ray
980  */
982  SCIP_LPI* lpi /**< LP interface structure */
983  )
984 { /*lint --e{715}*/
985  assert(lpi != NULL);
987  return FALSE;
988 }
989 
990 /** returns TRUE iff LP is proven to be primal unbounded */
992  SCIP_LPI* lpi /**< LP interface structure */
993  )
994 { /*lint --e{715}*/
995  assert(lpi != NULL);
997  return FALSE;
998 }
999 
1000 /** returns TRUE iff LP is proven to be primal infeasible */
1002  SCIP_LPI* lpi /**< LP interface structure */
1003  )
1004 { /*lint --e{715}*/
1005  assert(lpi != NULL);
1007  return FALSE;
1008 }
1009 
1010 /** returns TRUE iff LP is proven to be primal feasible */
1012  SCIP_LPI* lpi /**< LP interface structure */
1013  )
1014 { /*lint --e{715}*/
1015  assert(lpi != NULL);
1017  return FALSE;
1018 }
1019 
1020 /** returns TRUE iff LP is proven to have a dual unbounded ray (but not necessary a dual feasible point);
1021  * this does not necessarily mean, that the solver knows and can return the dual ray
1022  */
1024  SCIP_LPI* lpi /**< LP interface structure */
1025  )
1026 { /*lint --e{715}*/
1027  assert(lpi != NULL);
1029  return FALSE;
1030 }
1031 
1032 /** returns TRUE iff LP is proven to have a dual unbounded ray (but not necessary a dual feasible point),
1033  * and the solver knows and can return the dual ray
1034  */
1036  SCIP_LPI* lpi /**< LP interface structure */
1037  )
1038 { /*lint --e{715}*/
1039  assert(lpi != NULL);
1041  return FALSE;
1042 }
1043 
1044 /** returns TRUE iff LP is proven to be dual unbounded */
1046  SCIP_LPI* lpi /**< LP interface structure */
1047  )
1048 { /*lint --e{715}*/
1049  assert(lpi != NULL);
1051  return FALSE;
1052 }
1053 
1054 /** returns TRUE iff LP is proven to be dual infeasible */
1056  SCIP_LPI* lpi /**< LP interface structure */
1057  )
1058 { /*lint --e{715}*/
1059  assert(lpi != NULL);
1061  return FALSE;
1062 }
1063 
1064 /** returns TRUE iff LP is proven to be dual feasible */
1066  SCIP_LPI* lpi /**< LP interface structure */
1067  )
1068 { /*lint --e{715}*/
1069  assert(lpi != NULL);
1071  return FALSE;
1072 }
1073 
1074 /** returns TRUE iff LP was solved to optimality */
1076  SCIP_LPI* lpi /**< LP interface structure */
1077  )
1078 { /*lint --e{715}*/
1079  assert(lpi != NULL);
1081  return FALSE;
1082 }
1083 
1084 /** returns TRUE iff current LP solution is stable
1085  *
1086  * This function should return true if the solution is reliable, i.e., feasible and optimal (or proven
1087  * infeasible/unbounded) with respect to the original problem. The optimality status might be with respect to a scaled
1088  * version of the problem, but the solution might not be feasible to the unscaled original problem; in this case,
1089  * SCIPlpiIsStable() should return false.
1090  */
1092  SCIP_LPI* lpi /**< LP interface structure */
1093  )
1094 { /*lint --e{715}*/
1095  assert(lpi != NULL);
1097  return FALSE;
1098 }
1099 
1100 /** returns TRUE iff the objective limit was reached */
1102  SCIP_LPI* lpi /**< LP interface structure */
1103  )
1104 { /*lint --e{715}*/
1105  assert(lpi != NULL);
1107  return FALSE;
1108 }
1109 
1110 /** returns TRUE iff the iteration limit was reached */
1112  SCIP_LPI* lpi /**< LP interface structure */
1113  )
1114 { /*lint --e{715}*/
1115  assert(lpi != NULL);
1117  return FALSE;
1118 }
1119 
1120 /** returns TRUE iff the time limit was reached */
1122  SCIP_LPI* lpi /**< LP interface structure */
1123  )
1124 { /*lint --e{715}*/
1125  assert(lpi != NULL);
1127  return FALSE;
1128 }
1129 
1130 /** returns the internal solution status of the solver */
1132  SCIP_LPI* lpi /**< LP interface structure */
1133  )
1134 { /*lint --e{715}*/
1135  assert(lpi != NULL);
1137  return FALSE;
1138 }
1139 
1140 /** tries to reset the internal status of the LP solver in order to ignore an instability of the last solving call */
1142  SCIP_LPI* lpi, /**< LP interface structure */
1143  SCIP_Bool* success /**< pointer to store, whether the instability could be ignored */
1144  )
1145 { /*lint --e{715}*/
1146  assert(lpi != NULL);
1147  assert(success != NULL);
1148  errorMessage();
1149  return SCIP_PLUGINNOTFOUND;
1150 }
1151 
1152 /** gets objective value of solution */
1154  SCIP_LPI* lpi, /**< LP interface structure */
1155  SCIP_Real* objval /**< stores the objective value */
1156  )
1157 { /*lint --e{715}*/
1158  assert(lpi != NULL);
1159  assert(objval != NULL);
1160  errorMessage();
1161  return SCIP_PLUGINNOTFOUND;
1162 }
1163 
1164 /** gets primal and dual solution vectors for feasible LPs
1165  *
1166  * Before calling this function, the caller must ensure that the LP has been solved to optimality, i.e., that
1167  * SCIPlpiIsOptimal() returns true.
1168  */
1170  SCIP_LPI* lpi, /**< LP interface structure */
1171  SCIP_Real* objval, /**< stores the objective value, may be NULL if not needed */
1172  SCIP_Real* primsol, /**< primal solution vector, may be NULL if not needed */
1173  SCIP_Real* dualsol, /**< dual solution vector, may be NULL if not needed */
1174  SCIP_Real* activity, /**< row activity vector, may be NULL if not needed */
1175  SCIP_Real* redcost /**< reduced cost vector, may be NULL if not needed */
1176  )
1177 { /*lint --e{715}*/
1178  assert(lpi != NULL);
1179  errorMessage();
1180  return SCIP_PLUGINNOTFOUND;
1181 }
1182 
1183 /** gets primal ray for unbounded LPs */
1185  SCIP_LPI* lpi, /**< LP interface structure */
1186  SCIP_Real* ray /**< primal ray */
1187  )
1188 { /*lint --e{715}*/
1189  assert(lpi != NULL);
1190  assert(ray != NULL);
1191  errorMessage();
1192  return SCIP_PLUGINNOTFOUND;
1193 }
1194 
1195 /** gets dual Farkas proof for infeasibility */
1197  SCIP_LPI* lpi, /**< LP interface structure */
1198  SCIP_Real* dualfarkas /**< dual Farkas row multipliers */
1199  )
1200 { /*lint --e{715}*/
1201  assert(lpi != NULL);
1202  assert(dualfarkas != NULL);
1203  errorMessage();
1204  return SCIP_PLUGINNOTFOUND;
1205 }
1206 
1207 /** gets the number of LP iterations of the last solve call */
1209  SCIP_LPI* lpi, /**< LP interface structure */
1210  int* iterations /**< pointer to store the number of iterations of the last solve call */
1211  )
1212 { /*lint --e{715}*/
1213  assert(lpi != NULL);
1214  assert(iterations != NULL);
1215  errorMessage();
1216  return SCIP_PLUGINNOTFOUND;
1217 }
1218 
1219 /** gets information about the quality of an LP solution
1220  *
1221  * Such information is usually only available, if also a (maybe not optimal) solution is available.
1222  * The LPI should return SCIP_INVALID for @p quality, if the requested quantity is not available.
1223  */
1225  SCIP_LPI* lpi, /**< LP interface structure */
1226  SCIP_LPSOLQUALITY qualityindicator, /**< indicates which quality should be returned */
1227  SCIP_Real* quality /**< pointer to store quality number */
1228  )
1229 { /*lint --e{715}*/
1230  assert(lpi != NULL);
1231  assert(quality != NULL);
1232 
1233  *quality = SCIP_INVALID;
1234 
1235  return SCIP_OKAY;
1236 }
1237 
1238 /**@} */
1239 
1240 
1241 
1242 
1243 /*
1244  * LP Basis Methods
1245  */
1246 
1247 /**@name LP Basis Methods */
1248 /**@{ */
1249 
1250 /** gets current basis status for columns and rows; arrays must be large enough to store the basis status */
1252  SCIP_LPI* lpi, /**< LP interface structure */
1253  int* cstat, /**< array to store column basis status, or NULL */
1254  int* rstat /**< array to store row basis status, or NULL */
1255  )
1256 { /*lint --e{715}*/
1257  assert(lpi != NULL);
1258  errorMessage();
1259  return SCIP_PLUGINNOTFOUND;
1260 }
1261 
1262 /** sets current basis status for columns and rows */
1264  SCIP_LPI* lpi, /**< LP interface structure */
1265  const int* cstat, /**< array with column basis status */
1266  const int* rstat /**< array with row basis status */
1267  )
1268 { /*lint --e{715}*/
1269  assert(lpi != NULL);
1270  assert(cstat != NULL);
1271  assert(rstat != NULL);
1272  errorMessage();
1273  return SCIP_PLUGINNOTFOUND;
1274 }
1275 
1276 /** returns the indices of the basic columns and rows; basic column n gives value n, basic row m gives value -1-m */
1278  SCIP_LPI* lpi, /**< LP interface structure */
1279  int* bind /**< pointer to store basis indices ready to keep number of rows entries */
1280  )
1281 { /*lint --e{715}*/
1282  assert(lpi != NULL);
1283  assert(bind != NULL);
1284  errorMessage();
1285  return SCIP_PLUGINNOTFOUND;
1286 }
1287 
1288 /** get row of inverse basis matrix B^-1
1289  *
1290  * @note The LP interface defines slack variables to have coefficient +1. This means that if, internally, the LP solver
1291  * uses a -1 coefficient, then rows associated with slacks variables whose coefficient is -1, should be negated;
1292  * see also the explanation in lpi.h.
1293  */
1295  SCIP_LPI* lpi, /**< LP interface structure */
1296  int r, /**< row number */
1297  SCIP_Real* coef, /**< pointer to store the coefficients of the row */
1298  int* inds, /**< array to store the non-zero indices, or NULL */
1299  int* ninds /**< pointer to store the number of non-zero indices, or NULL
1300  * (-1: if we do not store sparsity information) */
1301  )
1302 { /*lint --e{715}*/
1303  assert(lpi != NULL);
1304  assert(coef != NULL);
1305  errorMessage();
1306  return SCIP_PLUGINNOTFOUND;
1307 }
1308 
1309 /** get column of inverse basis matrix B^-1
1310  *
1311  * @note The LP interface defines slack variables to have coefficient +1. This means that if, internally, the LP solver
1312  * uses a -1 coefficient, then rows associated with slacks variables whose coefficient is -1, should be negated;
1313  * see also the explanation in lpi.h.
1314  */
1316  SCIP_LPI* lpi, /**< LP interface structure */
1317  int c, /**< column number of B^-1; this is NOT the number of the column in the LP;
1318  * you have to call SCIPlpiGetBasisInd() to get the array which links the
1319  * B^-1 column numbers to the row and column numbers of the LP!
1320  * c must be between 0 and nrows-1, since the basis has the size
1321  * nrows * nrows */
1322  SCIP_Real* coef, /**< pointer to store the coefficients of the column */
1323  int* inds, /**< array to store the non-zero indices, or NULL */
1324  int* ninds /**< pointer to store the number of non-zero indices, or NULL
1325  * (-1: if we do not store sparsity information) */
1326  )
1327 { /*lint --e{715}*/
1328  assert(lpi != NULL);
1329  assert(coef != NULL);
1330  errorMessage();
1331  return SCIP_PLUGINNOTFOUND;
1332 }
1333 
1334 /** get row of inverse basis matrix times constraint matrix B^-1 * A
1335  *
1336  * @note The LP interface defines slack variables to have coefficient +1. This means that if, internally, the LP solver
1337  * uses a -1 coefficient, then rows associated with slacks variables whose coefficient is -1, should be negated;
1338  * see also the explanation in lpi.h.
1339  */
1341  SCIP_LPI* lpi, /**< LP interface structure */
1342  int r, /**< row number */
1343  const SCIP_Real* binvrow, /**< row in (A_B)^-1 from prior call to SCIPlpiGetBInvRow(), or NULL */
1344  SCIP_Real* coef, /**< vector to return coefficients of the row */
1345  int* inds, /**< array to store the non-zero indices, or NULL */
1346  int* ninds /**< pointer to store the number of non-zero indices, or NULL
1347  * (-1: if we do not store sparsity information) */
1348  )
1349 { /*lint --e{715}*/
1350  assert(lpi != NULL);
1351  assert(coef != NULL);
1352  errorMessage();
1353  return SCIP_PLUGINNOTFOUND;
1354 }
1355 
1356 /** get column of inverse basis matrix times constraint matrix B^-1 * A
1357  *
1358  * @note The LP interface defines slack variables to have coefficient +1. This means that if, internally, the LP solver
1359  * uses a -1 coefficient, then rows associated with slacks variables whose coefficient is -1, should be negated;
1360  * see also the explanation in lpi.h.
1361  */
1363  SCIP_LPI* lpi, /**< LP interface structure */
1364  int c, /**< column number */
1365  SCIP_Real* coef, /**< vector to return coefficients of the column */
1366  int* inds, /**< array to store the non-zero indices, or NULL */
1367  int* ninds /**< pointer to store the number of non-zero indices, or NULL
1368  * (-1: if we do not store sparsity information) */
1369  )
1370 { /*lint --e{715}*/
1371  assert(lpi != NULL);
1372  assert(coef != NULL);
1373  errorMessage();
1374  return SCIP_PLUGINNOTFOUND;
1375 }
1376 
1377 /**@} */
1378 
1379 
1380 
1381 
1382 /*
1383  * LP State Methods
1384  */
1385 
1386 /**@name LP State Methods */
1387 /**@{ */
1388 
1389 /** stores LPi state (like basis information) into lpistate object */
1391  SCIP_LPI* lpi, /**< LP interface structure */
1392  BMS_BLKMEM* blkmem, /**< block memory */
1393  SCIP_LPISTATE** lpistate /**< pointer to LPi state information (like basis information) */
1394  )
1395 { /*lint --e{715}*/
1396  assert(lpi != NULL);
1397  assert(blkmem != NULL);
1398  assert(lpistate != NULL);
1399  assert(blkmem != NULL);
1400  errorMessage();
1401  return SCIP_PLUGINNOTFOUND;
1402 }
1403 
1404 /** loads LPi state (like basis information) into solver; note that the LP might have been extended with additional
1405  * columns and rows since the state was stored with SCIPlpiGetState()
1406  */
1408  SCIP_LPI* lpi, /**< LP interface structure */
1409  BMS_BLKMEM* blkmem, /**< block memory */
1410  const SCIP_LPISTATE* lpistate /**< LPi state information (like basis information), or NULL */
1411  )
1412 { /*lint --e{715}*/
1413  assert(lpi != NULL);
1414  assert(blkmem != NULL);
1415  assert(lpistate != NULL);
1416  errorMessage();
1417  return SCIP_PLUGINNOTFOUND;
1418 }
1419 
1420 /** clears current LPi state (like basis information) of the solver */
1422  SCIP_LPI* lpi /**< LP interface structure */
1423  )
1424 { /*lint --e{715}*/
1425  assert(lpi != NULL);
1426  return SCIP_OKAY;
1427 }
1428 
1429 /** frees LPi state information */
1431  SCIP_LPI* lpi, /**< LP interface structure */
1432  BMS_BLKMEM* blkmem, /**< block memory */
1433  SCIP_LPISTATE** lpistate /**< pointer to LPi state information (like basis information) */
1434  )
1435 { /*lint --e{715}*/
1436  assert(lpi != NULL);
1437  assert(lpistate != NULL);
1438  assert(blkmem != NULL);
1439  return SCIP_OKAY;
1440 }
1441 
1442 /** checks, whether the given LP state contains simplex basis information */
1444  SCIP_LPI* lpi, /**< LP interface structure */
1445  SCIP_LPISTATE* lpistate /**< LP state information (like basis information), or NULL */
1446  )
1447 { /*lint --e{715}*/
1448  assert(lpi != NULL);
1450  return FALSE;
1451 }
1452 
1453 /** reads LP state (like basis information from a file */
1455  SCIP_LPI* lpi, /**< LP interface structure */
1456  const char* fname /**< file name */
1457  )
1458 { /*lint --e{715}*/
1459  assert(lpi != NULL);
1460  assert(fname != NULL);
1461  errorMessage();
1462  return SCIP_PLUGINNOTFOUND;
1463 }
1464 
1465 /** writes LPi state (i.e. basis information) to a file */
1467  SCIP_LPI* lpi, /**< LP interface structure */
1468  const char* fname /**< file name */
1469  )
1470 { /*lint --e{715}*/
1471  assert(lpi != NULL);
1472  assert(fname != NULL);
1473  errorMessage();
1474  return SCIP_PLUGINNOTFOUND;
1475 }
1476 
1477 /**@} */
1478 
1479 
1480 
1481 
1482 /*
1483  * LP Pricing Norms Methods
1484  */
1485 
1486 /**@name LP Pricing Norms Methods */
1487 /**@{ */
1488 
1489 /** stores LPi pricing norms information
1490  * @todo should we store norm information?
1491  */
1493  SCIP_LPI* lpi, /**< LP interface structure */
1494  BMS_BLKMEM* blkmem, /**< block memory */
1495  SCIP_LPINORMS** lpinorms /**< pointer to LPi pricing norms information */
1496  )
1497 { /*lint --e{715}*/
1498  assert(lpi != NULL);
1499  assert(blkmem != NULL);
1500  assert(lpinorms != NULL);
1501  errorMessage();
1502  return SCIP_PLUGINNOTFOUND;
1503 }
1504 
1505 /** loads LPi pricing norms into solver; note that the LP might have been extended with additional
1506  * columns and rows since the state was stored with SCIPlpiGetNorms()
1507  */
1509  SCIP_LPI* lpi, /**< LP interface structure */
1510  BMS_BLKMEM* blkmem, /**< block memory */
1511  const SCIP_LPINORMS* lpinorms /**< LPi pricing norms information, or NULL */
1512  )
1513 { /*lint --e{715}*/
1514  assert(lpi != NULL);
1515  errorMessage();
1516  return SCIP_PLUGINNOTFOUND;
1517 }
1518 
1519 /** frees pricing norms information */
1521  SCIP_LPI* lpi, /**< LP interface structure */
1522  BMS_BLKMEM* blkmem, /**< block memory */
1523  SCIP_LPINORMS** lpinorms /**< pointer to LPi pricing norms information, or NULL */
1524  )
1525 { /*lint --e{715}*/
1526  assert(lpi != NULL);
1527  errorMessage();
1528  return SCIP_PLUGINNOTFOUND;
1529 }
1530 
1531 /**@} */
1532 
1533 
1534 
1535 
1536 /*
1537  * Parameter Methods
1538  */
1539 
1540 /**@name Parameter Methods */
1541 /**@{ */
1542 
1543 /** gets integer parameter of LP */
1545  SCIP_LPI* lpi, /**< LP interface structure */
1546  SCIP_LPPARAM type, /**< parameter number */
1547  int* ival /**< buffer to store the parameter value */
1548  )
1549 { /*lint --e{715}*/
1550  assert(lpi != NULL);
1551  assert(ival != NULL);
1552  return SCIP_PARAMETERUNKNOWN;
1553 }
1554 
1555 /** sets integer parameter of LP */
1557  SCIP_LPI* lpi, /**< LP interface structure */
1558  SCIP_LPPARAM type, /**< parameter number */
1559  int ival /**< parameter value */
1560  )
1561 { /*lint --e{715}*/
1562  assert(lpi != NULL);
1563  return SCIP_PARAMETERUNKNOWN;
1564 }
1565 
1566 /** gets floating point parameter of LP */
1568  SCIP_LPI* lpi, /**< LP interface structure */
1569  SCIP_LPPARAM type, /**< parameter number */
1570  SCIP_Real* dval /**< buffer to store the parameter value */
1571  )
1572 { /*lint --e{715}*/
1573  assert(lpi != NULL);
1574  assert(dval != NULL);
1575  return SCIP_PARAMETERUNKNOWN;
1576 }
1577 
1578 /** sets floating point parameter of LP */
1580  SCIP_LPI* lpi, /**< LP interface structure */
1581  SCIP_LPPARAM type, /**< parameter number */
1582  SCIP_Real dval /**< parameter value */
1583  )
1584 { /*lint --e{715}*/
1585  assert(lpi != NULL);
1586  return SCIP_PARAMETERUNKNOWN;
1587 }
1588 
1589 /** interrupts the currently ongoing lp solve or disables the interrupt */
1591  SCIP_LPI* lpi, /**< LP interface structure */
1592  SCIP_Bool interrupt /**< TRUE if interrupt should be set, FALSE if it should be disabled */
1593  )
1594 {
1595  /*lint --e{715}*/
1596  assert(lpi != NULL);
1597 
1598  return SCIP_OKAY;
1599 }
1600 
1601 /**@} */
1602 
1603 /*
1604  * Numerical Methods
1605  */
1606 
1607 /**@name Numerical Methods */
1608 /**@{ */
1609 
1610 /** returns value treated as infinity in the LP solver */
1612  SCIP_LPI* lpi /**< LP interface structure */
1613  )
1614 { /*lint --e{715}*/
1615  assert(lpi != NULL);
1616  return LPIINFINITY;
1617 }
1618 
1619 /** checks if given value is treated as infinity in the LP solver */
1621  SCIP_LPI* lpi, /**< LP interface structure */
1622  SCIP_Real val /**< value to be checked for infinity */
1623  )
1624 { /*lint --e{715}*/
1625  assert(lpi != NULL);
1626  if( val >= LPIINFINITY )
1627  return TRUE;
1628  return FALSE;
1629 }
1630 
1631 /**@} */
1632 
1633 
1634 
1635 
1636 /*
1637  * File Interface Methods
1638  */
1639 
1640 /**@name File Interface Methods */
1641 /**@{ */
1642 
1643 /** reads LP from a file */
1645  SCIP_LPI* lpi, /**< LP interface structure */
1646  const char* fname /**< file name */
1647  )
1648 { /*lint --e{715}*/
1649  assert(lpi != NULL);
1650  assert(fname != NULL);
1651  errorMessage();
1652  return SCIP_PLUGINNOTFOUND;
1653 }
1654 
1655 /** writes LP to a file */
1657  SCIP_LPI* lpi, /**< LP interface structure */
1658  const char* fname /**< file name */
1659  )
1660 { /*lint --e{715}*/
1661  assert(lpi != NULL);
1662  errorMessage();
1663  return SCIP_PLUGINNOTFOUND;
1664 }
1665 
1666 /**@} */
SCIP_RETCODE SCIPlpiGetBInvCol(SCIP_LPI *lpi, int c, SCIP_Real *coef, int *inds, int *ninds)
Definition: lpi_none.c:1315
SCIP_RETCODE SCIPlpiGetNRows(SCIP_LPI *lpi, int *nrows)
Definition: lpi_none.c:569
enum SCIP_LPSolQuality SCIP_LPSOLQUALITY
Definition: type_lpi.h:104
SCIP_RETCODE SCIPlpiFree(SCIP_LPI **lpi)
Definition: lpi_none.c:187
SCIP_RETCODE SCIPlpiSetState(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, const SCIP_LPISTATE *lpistate)
Definition: lpi_none.c:1407
SCIP_Bool SCIPlpiIsInfinity(SCIP_LPI *lpi, SCIP_Real val)
Definition: lpi_none.c:1620
SCIP_Bool SCIPlpiIsDualUnbounded(SCIP_LPI *lpi)
Definition: lpi_none.c:1045
SCIP_RETCODE SCIPlpiSetNorms(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, const SCIP_LPINORMS *lpinorms)
Definition: lpi_none.c:1508
int nrows
Definition: lpi_none.c:52
SCIP_RETCODE SCIPlpiGetDualfarkas(SCIP_LPI *lpi, SCIP_Real *dualfarkas)
Definition: lpi_none.c:1196
SCIP_RETCODE SCIPlpiStartStrongbranch(SCIP_LPI *lpi)
Definition: lpi_none.c:803
SCIP_RETCODE SCIPlpiGetSol(SCIP_LPI *lpi, SCIP_Real *objval, SCIP_Real *primsol, SCIP_Real *dualsol, SCIP_Real *activity, SCIP_Real *redcost)
Definition: lpi_none.c:1169
SCIP_RETCODE SCIPlpiSetIntpar(SCIP_LPI *lpi, SCIP_LPPARAM type, int ival)
Definition: lpi_none.c:1556
enum SCIP_ObjSen SCIP_OBJSEN
Definition: type_lpi.h:45
SCIP_RETCODE SCIPlpiSolvePrimal(SCIP_LPI *lpi)
Definition: lpi_none.c:772
void * SCIPlpiGetSolverPointer(SCIP_LPI *lpi)
Definition: lpi_none.c:111
SCIP_RETCODE SCIPlpiGetBase(SCIP_LPI *lpi, int *cstat, int *rstat)
Definition: lpi_none.c:1251
SCIP_RETCODE SCIPlpiChgSides(SCIP_LPI *lpi, int nrows, const int *ind, const SCIP_Real *lhs, const SCIP_Real *rhs)
Definition: lpi_none.c:481
SCIP_RETCODE SCIPlpiGetIntpar(SCIP_LPI *lpi, SCIP_LPPARAM type, int *ival)
Definition: lpi_none.c:1544
interface methods for specific LP solvers
SCIP_RETCODE SCIPlpiGetIterations(SCIP_LPI *lpi, int *iterations)
Definition: lpi_none.c:1208
static void errorMessageAbort(void)
Definition: lpi_none.c:63
SCIP_RETCODE SCIPlpiGetNNonz(SCIP_LPI *lpi, int *nnonz)
Definition: lpi_none.c:599
#define FALSE
Definition: def.h:96
#define TRUE
Definition: def.h:95
enum SCIP_Retcode SCIP_RETCODE
Definition: type_retcode.h:63
SCIP_RETCODE SCIPlpiSetRealpar(SCIP_LPI *lpi, SCIP_LPPARAM type, SCIP_Real dval)
Definition: lpi_none.c:1579
SCIP_Bool SCIPlpiHasPrimalRay(SCIP_LPI *lpi)
Definition: lpi_none.c:981
SCIP_RETCODE SCIPlpiGetNorms(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, SCIP_LPINORMS **lpinorms)
Definition: lpi_none.c:1492
enum SCIP_LPParam SCIP_LPPARAM
Definition: type_lpi.h:73
SCIP_RETCODE SCIPlpiGetNCols(SCIP_LPI *lpi, int *ncols)
Definition: lpi_none.c:584
SCIP_RETCODE SCIPlpiReadState(SCIP_LPI *lpi, const char *fname)
Definition: lpi_none.c:1454
#define SCIPdebugMessage
Definition: pub_message.h:96
SCIP_Bool SCIPlpiHasDualSolve(void)
Definition: lpi_none.c:138
SCIP_RETCODE SCIPlpiGetBounds(SCIP_LPI *lpi, int firstcol, int lastcol, SCIP_Real *lbs, SCIP_Real *ubs)
Definition: lpi_none.c:716
SCIP_RETCODE SCIPlpiClear(SCIP_LPI *lpi)
Definition: lpi_none.c:433
SCIP_RETCODE SCIPlpiGetRealSolQuality(SCIP_LPI *lpi, SCIP_LPSOLQUALITY qualityindicator, SCIP_Real *quality)
Definition: lpi_none.c:1224
SCIP_RETCODE SCIPlpiScaleCol(SCIP_LPI *lpi, int col, SCIP_Real scaleval)
Definition: lpi_none.c:546
SCIP_RETCODE SCIPlpiGetObjsen(SCIP_LPI *lpi, SCIP_OBJSEN *objsen)
Definition: lpi_none.c:691
#define BMSfreeMemory(ptr)
Definition: memory.h:147
SCIP_RETCODE SCIPlpiSetIntegralityInformation(SCIP_LPI *lpi, int ncols, int *intInfo)
Definition: lpi_none.c:119
SCIP_RETCODE SCIPlpiClearState(SCIP_LPI *lpi)
Definition: lpi_none.c:1421
SCIP_RETCODE SCIPlpiGetCols(SCIP_LPI *lpi, int firstcol, int lastcol, SCIP_Real *lb, SCIP_Real *ub, int *nnonz, int *beg, int *ind, SCIP_Real *val)
Definition: lpi_none.c:614
SCIP_RETCODE SCIPlpiCreate(SCIP_LPI **lpi, SCIP_MESSAGEHDLR *messagehdlr, const char *name, SCIP_OBJSEN objsen)
Definition: lpi_none.c:166
SCIP_RETCODE SCIPlpiGetBInvARow(SCIP_LPI *lpi, int r, const SCIP_Real *binvrow, SCIP_Real *coef, int *inds, int *ninds)
Definition: lpi_none.c:1340
SCIP_RETCODE SCIPlpiAddCols(SCIP_LPI *lpi, int ncols, const SCIP_Real *obj, const SCIP_Real *lb, const SCIP_Real *ub, char **colnames, int nnonz, const int *beg, const int *ind, const SCIP_Real *val)
Definition: lpi_none.c:258
SCIP_Bool SCIPlpiIsPrimalUnbounded(SCIP_LPI *lpi)
Definition: lpi_none.c:991
int SCIPlpiGetInternalStatus(SCIP_LPI *lpi)
Definition: lpi_none.c:1131
SCIP_RETCODE SCIPlpiSolveDual(SCIP_LPI *lpi)
Definition: lpi_none.c:782
SCIP_Bool SCIPlpiIsStable(SCIP_LPI *lpi)
Definition: lpi_none.c:1091
SCIP_RETCODE SCIPlpiAddRows(SCIP_LPI *lpi, int nrows, const SCIP_Real *lhs, const SCIP_Real *rhs, char **rownames, int nnonz, const int *beg, const int *ind, const SCIP_Real *val)
Definition: lpi_none.c:347
SCIP_RETCODE SCIPlpiWriteLP(SCIP_LPI *lpi, const char *fname)
Definition: lpi_none.c:1656
#define SCIPerrorMessage
Definition: pub_message.h:64
int ncols
Definition: lpi_none.c:53
SCIP_RETCODE SCIPlpiGetBasisInd(SCIP_LPI *lpi, int *bind)
Definition: lpi_none.c:1277
SCIP_RETCODE SCIPlpiStrongbranchesFrac(SCIP_LPI *lpi, int *cols, int ncols, SCIP_Real *psols, int itlim, SCIP_Real *down, SCIP_Real *up, SCIP_Bool *downvalid, SCIP_Bool *upvalid, int *iter)
Definition: lpi_none.c:845
static void errorMessage(void)
Definition: lpi_none.c:74
SCIP_RETCODE SCIPlpiFreeState(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, SCIP_LPISTATE **lpistate)
Definition: lpi_none.c:1430
SCIP_Bool SCIPlpiIsPrimalInfeasible(SCIP_LPI *lpi)
Definition: lpi_none.c:1001
SCIP_RETCODE SCIPlpiGetColNames(SCIP_LPI *lpi, int firstcol, int lastcol, char **colnames, char *namestorage, int namestoragesize, int *storageleft)
Definition: lpi_none.c:651
SCIP_RETCODE SCIPlpiStrongbranchFrac(SCIP_LPI *lpi, int col, SCIP_Real psol, int itlim, SCIP_Real *down, SCIP_Real *up, SCIP_Bool *downvalid, SCIP_Bool *upvalid, int *iter)
Definition: lpi_none.c:821
#define NULL
Definition: lpi_spx1.cpp:164
SCIP_RETCODE SCIPlpiStrongbranchesInt(SCIP_LPI *lpi, int *cols, int ncols, SCIP_Real *psols, int itlim, SCIP_Real *down, SCIP_Real *up, SCIP_Bool *downvalid, SCIP_Bool *upvalid, int *iter)
Definition: lpi_none.c:896
int * rstat
Definition: lpi_clp.cpp:108
const char * SCIPlpiGetSolverDesc(void)
Definition: lpi_none.c:103
SCIP_Bool SCIPlpiHasBarrierSolve(void)
Definition: lpi_none.c:146
SCIP_RETCODE SCIPlpiGetSolFeasibility(SCIP_LPI *lpi, SCIP_Bool *primalfeasible, SCIP_Bool *dualfeasible)
Definition: lpi_none.c:953
SCIP_RETCODE SCIPlpiFreeNorms(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, SCIP_LPINORMS **lpinorms)
Definition: lpi_none.c:1520
SCIP_RETCODE SCIPlpiDelRows(SCIP_LPI *lpi, int firstrow, int lastrow)
Definition: lpi_none.c:386
SCIP_RETCODE SCIPlpiReadLP(SCIP_LPI *lpi, const char *fname)
Definition: lpi_none.c:1644
SCIP_Bool SCIPlpiWasSolved(SCIP_LPI *lpi)
Definition: lpi_none.c:934
SCIP_Bool SCIPlpiExistsPrimalRay(SCIP_LPI *lpi)
Definition: lpi_none.c:969
SCIP_RETCODE SCIPlpiGetObjval(SCIP_LPI *lpi, SCIP_Real *objval)
Definition: lpi_none.c:1153
SCIP_RETCODE SCIPlpiDelRowset(SCIP_LPI *lpi, int *dstat)
Definition: lpi_none.c:402
#define SCIP_Bool
Definition: def.h:93
SCIP_Bool SCIPlpiHasStateBasis(SCIP_LPI *lpi, SCIP_LPISTATE *lpistate)
Definition: lpi_none.c:1443
SCIP_RETCODE SCIPlpiDelCols(SCIP_LPI *lpi, int firstcol, int lastcol)
Definition: lpi_none.c:300
SCIP_RETCODE SCIPlpiWriteState(SCIP_LPI *lpi, const char *fname)
Definition: lpi_none.c:1466
SCIP_Real SCIPlpiInfinity(SCIP_LPI *lpi)
Definition: lpi_none.c:1611
SCIP_RETCODE SCIPlpiChgCoef(SCIP_LPI *lpi, int row, int col, SCIP_Real newval)
Definition: lpi_none.c:497
SCIP_Bool SCIPlpiIsDualFeasible(SCIP_LPI *lpi)
Definition: lpi_none.c:1065
SCIP_RETCODE SCIPlpiGetState(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, SCIP_LPISTATE **lpistate)
Definition: lpi_none.c:1390
SCIP_Bool SCIPlpiIsDualInfeasible(SCIP_LPI *lpi)
Definition: lpi_none.c:1055
SCIP_RETCODE SCIPlpiGetRowNames(SCIP_LPI *lpi, int firstrow, int lastrow, char **rownames, char *namestorage, int namestoragesize, int *storageleft)
Definition: lpi_none.c:671
#define LPIINFINITY
Definition: lpi_none.c:39
SCIP_RETCODE SCIPlpiSetBase(SCIP_LPI *lpi, const int *cstat, const int *rstat)
Definition: lpi_none.c:1263
#define LPINAME
Definition: lpi_none.c:38
int iterations
Definition: lpi_cpx.c:166
SCIP_Bool SCIPlpiIsOptimal(SCIP_LPI *lpi)
Definition: lpi_none.c:1075
SCIP_Bool SCIPlpiHasPrimalSolve(void)
Definition: lpi_none.c:130
SCIP_RETCODE SCIPlpiChgBounds(SCIP_LPI *lpi, int ncols, const int *ind, const SCIP_Real *lb, const SCIP_Real *ub)
Definition: lpi_none.c:448
SCIP_Bool SCIPlpiIsTimelimExc(SCIP_LPI *lpi)
Definition: lpi_none.c:1121
SCIP_Real * r
Definition: circlepacking.c:59
SCIP_RETCODE SCIPlpiGetRows(SCIP_LPI *lpi, int firstrow, int lastrow, SCIP_Real *lhs, SCIP_Real *rhs, int *nnonz, int *beg, int *ind, SCIP_Real *val)
Definition: lpi_none.c:634
SCIP_RETCODE SCIPlpiStrongbranchInt(SCIP_LPI *lpi, int col, SCIP_Real psol, int itlim, SCIP_Real *down, SCIP_Real *up, SCIP_Bool *downvalid, SCIP_Bool *upvalid, int *iter)
Definition: lpi_none.c:872
SCIP_RETCODE SCIPlpiSolveBarrier(SCIP_LPI *lpi, SCIP_Bool crossover)
Definition: lpi_none.c:792
SCIP_RETCODE SCIPlpiGetPrimalRay(SCIP_LPI *lpi, SCIP_Real *ray)
Definition: lpi_none.c:1184
SCIP_RETCODE SCIPlpiEndStrongbranch(SCIP_LPI *lpi)
Definition: lpi_none.c:812
SCIP_RETCODE SCIPlpiLoadColLP(SCIP_LPI *lpi, SCIP_OBJSEN objsen, int ncols, const SCIP_Real *obj, const SCIP_Real *lb, const SCIP_Real *ub, char **colnames, int nrows, const SCIP_Real *lhs, const SCIP_Real *rhs, char **rownames, int nnonz, const int *beg, const int *ind, const SCIP_Real *val)
Definition: lpi_none.c:212
SCIP_RETCODE SCIPlpiScaleRow(SCIP_LPI *lpi, int row, SCIP_Real scaleval)
Definition: lpi_none.c:533
SCIP_RETCODE SCIPlpiGetSides(SCIP_LPI *lpi, int firstrow, int lastrow, SCIP_Real *lhss, SCIP_Real *rhss)
Definition: lpi_none.c:731
SCIP_Bool SCIPlpiHasDualRay(SCIP_LPI *lpi)
Definition: lpi_none.c:1035
public methods for message output
SCIP_RETCODE SCIPlpiGetBInvACol(SCIP_LPI *lpi, int c, SCIP_Real *coef, int *inds, int *ninds)
Definition: lpi_none.c:1362
SCIP_RETCODE SCIPlpiGetObj(SCIP_LPI *lpi, int firstcol, int lastcol, SCIP_Real *vals)
Definition: lpi_none.c:701
SCIP_Bool SCIPlpiIsObjlimExc(SCIP_LPI *lpi)
Definition: lpi_none.c:1101
#define SCIP_Real
Definition: def.h:186
SCIP_Bool SCIPlpiIsPrimalFeasible(SCIP_LPI *lpi)
Definition: lpi_none.c:1011
#define BMSallocMemory(ptr)
Definition: memory.h:120
#define SCIP_INVALID
Definition: def.h:206
SCIP_RETCODE SCIPlpiChgObj(SCIP_LPI *lpi, int ncols, const int *ind, const SCIP_Real *obj)
Definition: lpi_none.c:519
SCIP_Bool SCIPlpiExistsDualRay(SCIP_LPI *lpi)
Definition: lpi_none.c:1023
SCIP_MESSAGEHDLR * messagehdlr
Definition: lpi_cpx.c:184
SCIP_RETCODE SCIPlpiInterrupt(SCIP_LPI *lpi, SCIP_Bool interrupt)
Definition: lpi_none.c:1590
SCIP_Bool SCIPlpiIsIterlimExc(SCIP_LPI *lpi)
Definition: lpi_none.c:1111
SCIP_RETCODE SCIPlpiGetCoef(SCIP_LPI *lpi, int row, int col, SCIP_Real *val)
Definition: lpi_none.c:746
struct BMS_BlkMem BMS_BLKMEM
Definition: memory.h:439
SCIP_RETCODE SCIPlpiChgObjsen(SCIP_LPI *lpi, SCIP_OBJSEN objsen)
Definition: lpi_none.c:509
SCIP_RETCODE SCIPlpiGetBInvRow(SCIP_LPI *lpi, int r, SCIP_Real *coef, int *inds, int *ninds)
Definition: lpi_none.c:1294
#define SCIP_ALLOC(x)
Definition: def.h:404
#define SCIPABORT()
Definition: def.h:365
const char * SCIPlpiGetSolverName(void)
Definition: lpi_none.c:95
char name[200]
Definition: lpi_xprs.c:90
int * cstat
Definition: lpi_clp.cpp:107
SCIP_RETCODE SCIPlpiIgnoreInstability(SCIP_LPI *lpi, SCIP_Bool *success)
Definition: lpi_none.c:1141
SCIP_RETCODE SCIPlpiGetRealpar(SCIP_LPI *lpi, SCIP_LPPARAM type, SCIP_Real *dval)
Definition: lpi_none.c:1567
SCIP_RETCODE SCIPlpiDelColset(SCIP_LPI *lpi, int *dstat)
Definition: lpi_none.c:316