Scippy

SoPlex

Sequential object-oriented simPlex

soplex_interface.cpp
Go to the documentation of this file.
1 #include "soplex.h"
2 #include "soplex_interface.h"
3 #include <iostream>
4 
5 using namespace soplex;
6 
7 /** creates new SoPlex struct **/
8 void* SoPlex_create()
9 {
10  SoPlex* so = new SoPlex();
11  return so;
12 }
13 
14 /** frees SoPlex struct **/
15 void SoPlex_free(void* soplex)
16 {
17  SoPlex* so = (SoPlex*)(soplex);
18  delete so;
19 }
20 
21 /** reads LP file in LP or MPS format according to READMODE parameter; returns true on success **/
22 int SoPlex_readInstanceFile(void* soplex, const char* filename)
23 {
24  SoPlex* so = (SoPlex*)(soplex);
25  return so->readFile(filename);
26 }
27 
28 /** reads basis information from filename and returns true on success **/
29 int SoPlex_readBasisFile(void* soplex, const char* filename)
30 {
31  SoPlex* so = (SoPlex*)(soplex);
32  return so->readBasisFile(filename);
33 }
34 
35 /** reads settings from filename and returns true on success **/
36 int SoPlex_readSettingsFile(void* soplex, const char* filename)
37 {
38  SoPlex* so = (SoPlex*)(soplex);
39  return so->loadSettingsFile(filename);
40 }
41 
42 /** clears the (floating point) LP **/
44 {
45  SoPlex* so = (SoPlex*)(soplex);
46  so->clearLPReal();
47 }
48 
49 /** returns number of rows **/
51 {
52  SoPlex* so = (SoPlex*)(soplex);
53  return so->numRows();
54 }
55 
56 /** returns number of columns **/
58 {
59  SoPlex* so = (SoPlex*)(soplex);
60  return so->numCols();
61 }
62 
63 /** enables rational solving mode **/
65 {
66 #ifndef SOPLEX_WITH_BOOST
67  throw SPxException("Rational functions cannot be used when built without Boost.");
68 #endif
69  /* coverity[unreachable] */
70  SoPlex* so = (SoPlex*)(soplex);
74  so->setIntParam(SoPlex::SYNCMODE, SoPlex::SYNCMODE_AUTO);
75  so->setRealParam(SoPlex::FEASTOL, 0.0);
76  so->setRealParam(SoPlex::OPTTOL, 0.0);
77 }
78 
79 /** sets boolean parameter value **/
80 void SoPlex_setBoolParam(void* soplex, int paramcode, int paramvalue)
81 {
82  SoPlex* so = (SoPlex*)(soplex);
83  so->setBoolParam((SoPlex::BoolParam)paramcode, paramvalue);
84 }
85 
86 /** sets integer parameter value **/
87 void SoPlex_setIntParam(void* soplex, int paramcode, int paramvalue)
88 {
89  SoPlex* so = (SoPlex*)(soplex);
90  so->setIntParam((SoPlex::IntParam)paramcode, paramvalue);
91 }
92 
93 /** sets real parameter value **/
94 void SoPlex_setRealParam(void* soplex, int paramcode, double paramvalue)
95 {
96  SoPlex* so = (SoPlex*)(soplex);
97  so->setRealParam((SoPlex::RealParam)paramcode, paramvalue);
98 }
99 
100 /** returns value of integer parameter **/
101 int SoPlex_getIntParam(void* soplex, int paramcode)
102 {
103  SoPlex* so = (SoPlex*)(soplex);
104  return so->intParam((SoPlex::IntParam)paramcode);
105 }
106 
107 /** adds a single (floating point) column **/
108 void SoPlex_addColReal(void* soplex, double* colentries, int colsize, int nnonzeros, double objval,
109  double lb, double ub)
110 {
111  SoPlex* so = (SoPlex*)(soplex);
112  DSVector col(nnonzeros);
113 
114  /* add nonzero entries to column vector */
115  for(int i = 0; i < colsize; ++i)
116  {
117  if(colentries[i] != 0.0)
118  col.add(i, colentries[i]);
119  }
120 
121  so->addColReal(LPCol(objval, col, ub, lb));
122 }
123 
124 /** removes a single (floating point) column **/
125 void SoPlex_removeColReal(void* soplex, int colidx)
126 {
127  SoPlex* so = (SoPlex*)(soplex);
128  so->removeColReal(colidx);
129 }
130 
131 /** adds a single rational column **/
132 void SoPlex_addColRational(void* soplex, long* colnums, long* coldenoms, int colsize, int nnonzeros,
133  long objvalnum, long objvaldenom, long lbnum, long lbdenom, long ubnum, long ubdenom)
134 {
135 #ifndef SOPLEX_WITH_BOOST
136  throw SPxException("Rational functions cannot be used when built without Boost.");
137 #endif
138  /* coverity[unreachable] */
139  SoPlex* so = (SoPlex*)(soplex);
140  DSVectorRational col(nnonzeros);
141 
142  /* get rational lower bound */
143  Rational lower(lbnum, lbdenom);
144 
145  /* get rational upper bound */
146  Rational upper(ubnum, ubdenom);
147 
148  /* get rational objective value */
149  Rational objval(objvalnum, objvaldenom);
150 
151  /* add nonzero entries to column vector */
152  for(int i = 0; i < colsize; ++i)
153  {
154  if(colnums[i] != 0)
155  {
156  /* get rational nonzero entry */
157  Rational colentry(colnums[i], coldenoms[i]);
158  col.add(i, colentry);
159  }
160  }
161 
162  so->addColRational(LPColRational(objval, col, upper, lower));
163 }
164 
165 /** adds a single (floating point) row **/
166 void SoPlex_addRowReal(void* soplex, double* rowentries, int rowsize, int nnonzeros, double lb,
167  double ub)
168 {
169  SoPlex* so = (SoPlex*)(soplex);
170  DSVector row(nnonzeros);
171 
172  /* add nonzero entries to row vector */
173  for(int i = 0; i < rowsize; ++i)
174  {
175  if(rowentries[i] != 0.0)
176  row.add(i, rowentries[i]);
177  }
178 
179  so->addRowReal(LPRow(lb, row, ub));
180 }
181 
182 /** removes a single (floating point) row **/
183 void SoPlex_removeRowReal(void* soplex, int rowidx)
184 {
185  SoPlex* so = (SoPlex*)(soplex);
186  so->removeRowReal(rowidx);
187 }
188 
189 /** adds a single rational row **/
190 void SoPlex_addRowRational(void* soplex, long* rownums, long* rowdenoms, int rowsize, int nnonzeros,
191  long lbnum, long lbdenom, long ubnum, long ubdenom)
192 {
193 #ifndef SOPLEX_WITH_BOOST
194  throw SPxException("Rational functions cannot be used when built without Boost.");
195 #endif
196  /* coverity[unreachable] */
197  SoPlex* so = (SoPlex*)(soplex);
198  DSVectorRational row(nnonzeros);
199 
200  /* get rational lower bound */
201  Rational lower(lbnum, lbdenom);
202 
203  /* get rational upper bound */
204  Rational upper(ubnum, ubdenom);
205 
206  /* add nonzero entries to row vector */
207  for(int i = 0; i < rowsize; ++i)
208  {
209  if(rownums[i] != 0)
210  {
211  /* get rational nonzero entry */
212  Rational rowentry(rownums[i], rowdenoms[i]);
213  row.add(i, rowentry);
214  }
215  }
216 
217  so->addRowRational(LPRowRational(lower, row, upper));
218 }
219 
220 /** gets primal solution **/
221 void SoPlex_getPrimalReal(void* soplex, double* primal, int dim)
222 {
223  SoPlex* so = (SoPlex*)(soplex);
224  so->getPrimalReal(primal, dim);
225 }
226 
227 /** Returns rational primal solution in a char pointer.
228 * The caller needs to ensure the char array is freed.
229 **/
231 {
232 #ifndef SOPLEX_WITH_BOOST
233  throw SPxException("Rational functions cannot be used when built without Boost.");
234 #endif
235  /* coverity[unreachable] */
236  SoPlex* so = (SoPlex*)(soplex);
237  VectorRational primal(dim);
238  std::string primalstring;
239  char* rawstring;
240  long unsigned int stringlength;
241 
242  so->getPrimalRational(primal);
243 
244  for(int i = 0; i < dim; ++i)
245  {
246  primalstring.append(primal[i].str());
247  primalstring.append(" ");
248  }
249 
250  stringlength = strlen(primalstring.c_str()) + 1;
251  rawstring = new char[stringlength];
252  strncpy(rawstring, primalstring.c_str(), stringlength);
253  return rawstring;
254 }
255 
256 /** gets dual solution **/
257 void SoPlex_getDualReal(void* soplex, double* dual, int dim)
258 {
259  SoPlex* so = (SoPlex*)(soplex);
260  so->getDualReal(dual, dim);
261 }
262 
263 /** gets reduced cost vector **/
264 void SoPlex_getRedCostReal(void* soplex, double* rc, int dim)
265 {
266  SoPlex* so = (SoPlex*)(soplex);
267  so->getRedCostReal(rc, dim);
268 }
269 
270 /** optimizes the given LP **/
272 {
273  SoPlex* so = (SoPlex*)(soplex);
274  return so->optimize();
275 }
276 
277 /** returns the current solver status **/
279 {
280  SoPlex* so = (SoPlex*)(soplex);
281  return so->status();
282 }
283 
284 /** returns the time spent in last call to solve **/
286 {
287  SoPlex* so = (SoPlex*)(soplex);
288  return so->solveTime();
289 }
290 
291 /** returns the number of iteration in last call to solve **/
293 {
294  SoPlex* so = (SoPlex*)(soplex);
295  return so->numIterations();
296 }
297 
298 /** changes objective function vector to obj **/
299 void SoPlex_changeObjReal(void* soplex, double* obj, int dim)
300 {
301  SoPlex* so = (SoPlex*)(soplex);
302  Vector objective(dim, obj);
303  so->changeObjReal(objective);
304 }
305 
306 /** changes rational objective function vector to obj **/
307 void SoPlex_changeObjRational(void* soplex, long* objnums, long* objdenoms, int dim)
308 {
309 #ifndef SOPLEX_WITH_BOOST
310  throw SPxException("Rational functions cannot be used when built without Boost.");
311 #endif
312  /* coverity[unreachable] */
313  SoPlex* so = (SoPlex*)(soplex);
314  Rational* objrational = new Rational [dim];
315 
316  /* create rational objective vector */
317  for(int i = 0; i < dim; ++i)
318  {
319  Rational objentry(objnums[i], objdenoms[i]);
320  objrational[i] = objentry;
321  }
322 
323  VectorRational objective(dim, objrational);
324  so->changeObjRational(objective);
325 }
326 
327 /** changes left-hand side vector for constraints to lhs **/
328 void SoPlex_changeLhsReal(void* soplex, double* lhs, int dim)
329 {
330  SoPlex* so = (SoPlex*)(soplex);
331  Vector lhsvec(dim, lhs);
332  so->changeLhsReal(lhsvec);
333 }
334 
335 /** changes left-hand side of a row to lhs **/
336 void SoPlex_changeRowLhsReal(void* soplex, int rowidx, double lhs)
337 {
338  SoPlex* so = (SoPlex*)(soplex);
339  so->changeLhsReal(rowidx, lhs);
340 }
341 
342 /** changes rational left-hand side vector for constraints to lhs **/
343 void SoPlex_changeLhsRational(void* soplex, long* lhsnums, long* lhsdenoms, int dim)
344 {
345 #ifndef SOPLEX_WITH_BOOST
346  throw SPxException("Rational functions cannot be used when built without Boost.");
347 #endif
348  /* coverity[unreachable] */
349  SoPlex* so = (SoPlex*)(soplex);
350  Rational* lhsrational = new Rational [dim];
351 
352  /* create rational lhs vector */
353  for(int i = 0; i < dim; ++i)
354  {
355  Rational lhsentry(lhsnums[i], lhsdenoms[i]);
356  lhsrational[i] = lhsentry;
357  }
358 
359  VectorRational lhs(dim, lhsrational);
360  so->changeLhsRational(lhs);
361 }
362 
363 /** changes right-hand side vector for constraints to rhs **/
364 void SoPlex_changeRhsReal(void* soplex, double* rhs, int dim)
365 {
366  SoPlex* so = (SoPlex*)(soplex);
367  Vector rhsvec(dim, rhs);
368  so->changeRhsReal(rhsvec);
369 }
370 
371 /** changes right-hand side of a row to rhs **/
372 void SoPlex_changeRowRhsReal(void* soplex, int rowidx, double rhs)
373 {
374  SoPlex* so = (SoPlex*)(soplex);
375  so->changeRhsReal(rowidx, rhs);
376 }
377 
378 /** changes both sides for constraints to given lhs and rhs **/
379 void SoPlex_changeRangeReal(void* soplex, double* lhs, double* rhs, int dim)
380 {
381  SoPlex* so = (SoPlex*)(soplex);
382  Vector lhsvec(dim, lhs);
383  Vector rhsvec(dim, rhs);
384  so->changeRangeReal(lhsvec, rhsvec);
385 }
386 
387 /** changes both sides of a row to given lhs and rhs **/
388 void SoPlex_changeRowRangeReal(void* soplex, int rowidx, double lhs, double rhs)
389 {
390  SoPlex* so = (SoPlex*)(soplex);
391  so->changeRangeReal(rowidx, lhs, rhs);
392 }
393 
394 /** changes rational right-hand side vector for constraints to rhs **/
395 void SoPlex_changeRhsRational(void* soplex, long* rhsnums, long* rhsdenoms, int dim)
396 {
397 #ifndef SOPLEX_WITH_BOOST
398  throw SPxException("Rational functions cannot be used when built without Boost.");
399 #endif
400  /* coverity[unreachable] */
401  SoPlex* so = (SoPlex*)(soplex);
402  Rational* rhsrational = new Rational [dim];
403 
404  /* create rational rhs vector */
405  for(int i = 0; i < dim; ++i)
406  {
407  Rational rhsentry(rhsnums[i], rhsdenoms[i]);
408  rhsrational[i] = rhsentry;
409  }
410 
411  VectorRational rhs(dim, rhsrational);
412  so->changeRhsRational(rhs);
413 }
414 
415 /** write LP to file; LP or MPS format is chosen from the extension in filename **/
416 void SoPlex_writeFileReal(void* soplex, char* filename)
417 {
418  SoPlex* so = (SoPlex*)(soplex);
419  so->writeFile(filename);
420 }
421 
422 /** returns the objective value if a primal solution is available **/
424 {
425  SoPlex* so = (SoPlex*)(soplex);
426  return so->objValueReal();
427 }
428 
429 /** Returns the rational objective value (as a string) if a primal solution is available.
430 * The caller needs to ensure the char array is freed.
431 **/
433 {
434 #ifndef SOPLEX_WITH_BOOST
435  throw SPxException("Rational functions cannot be used when built without Boost.");
436 #endif
437  /* coverity[unreachable] */
438  long unsigned int stringlength;
439  char* value;
440  std::string objstring;
441  SoPlex* so = (SoPlex*)(soplex);
442 
443  stringlength = strlen(objstring.c_str()) + 1;
444  objstring = so->objValueRational().str();
445  value = new char[stringlength];
446  strncpy(value, objstring.c_str(), stringlength);
447  return value;
448 }
449 
450 /** changes vectors of column bounds to lb and ub **/
451 void SoPlex_changeBoundsReal(void* soplex, double* lb, double* ub, int dim)
452 {
453  SoPlex* so = (SoPlex*)(soplex);
454  Vector lbvec(dim, lb);
455  Vector ubvec(dim, ub);
456  so->changeBoundsReal(lbvec, ubvec);
457 }
458 
459 /** changes bounds of a column to lb and ub **/
460 void SoPlex_changeVarBoundsReal(void* soplex, int colidx, double lb, double ub)
461 {
462  SoPlex* so = (SoPlex*)(soplex);
463  so->changeBoundsReal(colidx, lb, ub);
464 }
465 
466 /** changes rational bounds of a column to lbnum/lbdenom and ubnum/ubdenom **/
467 void SoPlex_changeVarBoundsRational(void* soplex, int colidx, long lbnum, long lbdenom, long ubnum,
468  long ubdenom)
469 {
470 #ifndef SOPLEX_WITH_BOOST
471  throw SPxException("Rational functions cannot be used when built without Boost.");
472 #endif
473  /* coverity[unreachable] */
474  SoPlex* so = (SoPlex*)(soplex);
475 
476  /* get rational lower bound */
477  Rational lower(lbnum, lbdenom);
478 
479  /* get rational upper bound */
480  Rational upper(ubnum, ubdenom);
481 
482  so->changeBoundsRational(colidx, lower, upper);
483 }
484 
485 /** changes vector of lower bounds to lb **/
486 void SoPlex_changeLowerReal(void* soplex, double* lb, int dim)
487 {
488  SoPlex* so = (SoPlex*)(soplex);
489  Vector lbvec(dim, lb);
490  so->changeLowerReal(lbvec);
491 }
492 
493 /** changes lower bound of column to ub **/
494 void SoPlex_changeVarLowerReal(void* soplex, int colidx, double lb)
495 {
496  SoPlex* so = (SoPlex*)(soplex);
497  so->changeLowerReal(colidx, lb);
498 }
499 
500 /** gets lower bound vector of columns into lb **/
501 void SoPlex_getLowerReal(void* soplex, double* lb, int dim)
502 {
503  SoPlex* so = (SoPlex*)(soplex);
504  Vector lbvec(dim);
505 
506  so->getLowerReal(lbvec);
507 
508  for(int i = 0; i < dim; ++i)
509  lb[i] = lbvec[i];
510 }
511 
512 /** gets objective vector into obj **/
513 void SoPlex_getObjReal(void* soplex, double* obj, int dim)
514 {
515  SoPlex* so = (SoPlex*)(soplex);
516  Vector objvec(dim);
517 
518  so->getObjReal(objvec);
519 
520  for(int i = 0; i < dim; ++i)
521  obj[i] = objvec[i];
522 }
523 
524 /** changes vector of upper bounds to ub **/
525 void SoPlex_changeUpperReal(void* soplex, double* ub, int dim)
526 {
527  SoPlex* so = (SoPlex*)(soplex);
528  Vector ubvec(dim, ub);
529  so->changeUpperReal(ubvec);
530 }
531 
532 /** changes upper bound of column to ub **/
533 void SoPlex_changeVarUpperReal(void* soplex, int colidx, double ub)
534 {
535  SoPlex* so = (SoPlex*)(soplex);
536  so->changeUpperReal(colidx, ub);
537 }
538 
539 /** gets upper bound vector of columns into ub **/
540 void SoPlex_getUpperReal(void* soplex, double* ub, int dim)
541 {
542  SoPlex* so = (SoPlex*)(soplex);
543  Vector ubvec(dim);
544 
545  so->getUpperReal(ubvec);
546 
547  for(int i = 0; i < dim; ++i)
548  ub[i] = ubvec[i];
549 }
550 
551 /** returns status of row
552  * 0 -> row is set to its upper bound
553  * 1 -> row is set to its lower bound
554  * 2 -> row is fixed to its identical bounds
555  * 4 -> row is basic
556  * 5 -> nothing known about basis status
557  **/
558 int SoPlex_basisRowStatus(void* soplex, int rowidx)
559 {
560  SoPlex* so = (SoPlex*)(soplex);
561 
562  return so->basisRowStatus(rowidx);
563 }
564 
565 /** returns status of column
566  * 0 -> column is set to its upper bound
567  * 1 -> column is set to its lower bound
568  * 2 -> column is fixed to its identical bounds
569  * 3 -> column is free and fixed to zero
570  * 4 -> column is basic
571  * 5 -> nothing known about basis status
572  **/
573 int SoPlex_basisColStatus(void* soplex, int colidx)
574 {
575  SoPlex* so = (SoPlex*)(soplex);
576 
577  return so->basisColStatus(colidx);
578 }
579 
580 /** get non-zero entries and indices of row i **/
581 void SoPlex_getRowVectorReal(void* soplex, int i, int* nnonzeros, long* indices, double* coefs)
582 {
583  SoPlex* so = (SoPlex*)(soplex);
584  DSVector row;
585 
586  so->getRowVectorReal(i, row);
587 
588  *nnonzeros = row.size();
589 
590  for(int j = 0; j < *nnonzeros; ++j)
591  {
592  coefs[j] = row.value(j);
593  indices[j] = row.index(j);
594  }
595 }
596 
597 /** get non-zero entries and indices of rational row i **/
598 void SoPlex_getRowVectorRational(void* soplex, int i, int* nnonzeros, long* indices, long* coefsnum,
599  long* coefsdenom)
600 {
601 #ifndef SOPLEX_WITH_BOOST
602  throw SPxException("Rational functions cannot be used when built without Boost.");
603 #else
604  SoPlex* so = (SoPlex*)(soplex);
605  LPRowRational lprow;
606  SVectorRational row;
607 
608  so->getRowRational(i, lprow);
609  row = lprow.rowVector();
610 
611  *nnonzeros = row.size();
612 
613  for(int j = 0; j < *nnonzeros; ++j)
614  {
615  coefsnum[j] = (long int) numerator(row.value(j));
616  coefsdenom[j] = (long int) denominator(row.value(j));
617  indices[j] = row.index(j);
618  }
619 
620 #endif
621 }
622 
623 /** get lower and upper bounds of row i **/
624 void SoPlex_getRowBoundsReal(void* soplex, int i, double* lb, double* ub)
625 {
626  SoPlex* so = (SoPlex*)(soplex);
627 
628  *lb = so->lhsReal(i);
629  *ub = so->rhsReal(i);
630 }
631 
632 /** get rational lower and upper bounds of row i **/
633 void SoPlex_getRowBoundsRational(void* soplex, int i, long* lbnum, long* lbdenom, long* ubnum,
634  long* ubdenom)
635 {
636 #ifndef SOPLEX_WITH_BOOST
637  throw SPxException("Rational functions cannot be used when built without Boost.");
638 #else
639  SoPlex* so = (SoPlex*)(soplex);
640 
641  *lbnum = (long int) numerator(so->lhsRational(i));
642  *lbdenom = (long int) denominator(so->lhsRational(i));
643  *ubnum = (long int) numerator(so->rhsRational(i));
644  *ubdenom = (long int) denominator(so->rhsRational(i));
645 #endif
646 }
int SoPlex_readBasisFile(void *soplex, const char *filename)
void SoPlex_getRowBoundsRational(void *soplex, int i, long *lbnum, long *lbdenom, long *ubnum, long *ubdenom)
int SoPlex_getStatus(void *soplex)
void SoPlex_setBoolParam(void *soplex, int paramcode, int paramvalue)
number< gmp_rational, et_off > Rational
Definition: rational.h:29
void SoPlex_getUpperReal(void *soplex, double *ub, int dim)
int SoPlex_numRows(void *soplex)
void SoPlex_clearLPReal(void *soplex)
void SoPlex_setRational(void *soplex)
LPRowBase< Rational > LPRowRational
Definition: lprow.h:38
int size() const
Number of used indices.
Definition: svectorbase.h:164
void SoPlex_getObjReal(void *soplex, double *obj, int dim)
void SoPlex_getRowVectorRational(void *soplex, int i, int *nnonzeros, long *indices, long *coefsnum, long *coefsdenom)
int SoPlex_readSettingsFile(void *soplex, const char *filename)
void SoPlex_changeLhsRational(void *soplex, long *lhsnums, long *lhsdenoms, int dim)
void SoPlex_changeRowRangeReal(void *soplex, int rowidx, double lhs, double rhs)
const SVectorBase< R > & rowVector() const
Constraint row vector.
Definition: lprowbase.h:270
dual feasibility tolerance
Definition: soplex.h:1385
Dynamic sparse vectors.Class DSVectorBase implements dynamic sparse vectors, i.e. SVectorBases with a...
Definition: dsvectorbase.h:52
void SoPlex_setRealParam(void *soplex, int paramcode, double paramvalue)
RealParam
real parameters
Definition: soplex.h:1379
void SoPlex_removeRowReal(void *soplex, int rowidx)
void SoPlex_changeLowerReal(void *soplex, double *lb, int dim)
void SoPlex_changeObjReal(void *soplex, double *obj, int dim)
R & value(int n)
Reference to value of n &#39;th nonzero.
Definition: svectorbase.h:264
void SoPlex_changeUpperReal(void *soplex, double *ub, int dim)
void SoPlex_addRowRational(void *soplex, long *rownums, long *rowdenoms, int rowsize, int nnonzeros, long lbnum, long lbdenom, long ubnum, long ubdenom)
int SoPlex_optimize(void *soplex)
void SoPlex_free(void *soplex)
mode for a posteriori feasibility checks
Definition: soplex.h:1096
void add(const SVectorBase< S > &vec)
Append nonzeros of sv.
Definition: dsvectorbase.h:228
void SoPlex_getLowerReal(void *soplex, double *lb, int dim)
void SoPlex_writeFileReal(void *soplex, char *filename)
void SoPlex_addRowReal(void *soplex, double *rowentries, int rowsize, int nnonzeros, double lb, double ub)
LPRowBase< Real > LPRow
Definition: lprow.h:36
void SoPlex_removeColReal(void *soplex, int colidx)
void SoPlex_changeRowRhsReal(void *soplex, int rowidx, double rhs)
void SoPlex_getPrimalReal(void *soplex, double *primal, int dim)
void SoPlex_changeObjRational(void *soplex, long *objnums, long *objdenoms, int dim)
int SoPlex_basisColStatus(void *soplex, int colidx)
int SoPlex_getNumIterations(void *soplex)
int & index(int n)
Reference to index of n &#39;th nonzero.
Definition: svectorbase.h:246
void SoPlex_changeVarLowerReal(void *soplex, int colidx, double lb)
primal feasibility tolerance
Definition: soplex.h:1382
void SoPlex_changeRhsRational(void *soplex, long *rhsnums, long *rhsdenoms, int dim)
void SoPlex_getDualReal(void *soplex, double *dual, int dim)
void SoPlex_getRedCostReal(void *soplex, double *rc, int dim)
automatic sync of real and rational LP
Definition: soplex.h:1297
BoolParam
boolean parameters
Definition: soplex.h:951
IntParam
integer parameters
Definition: soplex.h:1039
void SoPlex_changeVarBoundsRational(void *soplex, int colidx, long lbnum, long lbdenom, long ubnum, long ubdenom)
void SoPlex_changeVarUpperReal(void *soplex, int colidx, double ub)
int SoPlex_basisRowStatus(void *soplex, int rowidx)
void SoPlex_changeLhsReal(void *soplex, double *lhs, int dim)
(In)equality for LPs.Class LPRowBase provides constraints for linear programs in the form where a is...
Definition: lprowbase.h:54
LPColBase< Rational > LPColRational
Definition: lpcol.h:40
Preconfigured SoPlex LP solver.
Preconfigured SoPlex LP-solver.
char * SoPlex_getPrimalRationalString(void *soplex, int dim)
void SoPlex_changeBoundsReal(void *soplex, double *lb, double *ub, int dim)
Exception base class.This class implements a base class for our SoPlex exceptions We provide a what()...
Definition: exceptions.h:41
Everything should be within this namespace.
mode for iterative refinement strategy
Definition: soplex.h:1093
void SoPlex_getRowVectorReal(void *soplex, int i, int *nnonzeros, long *indices, double *coefs)
mode for reading LP files
Definition: soplex.h:1090
int SoPlex_getIntParam(void *soplex, int paramcode)
int SoPlex_readInstanceFile(void *soplex, const char *filename)
LPColBase< Real > LPCol
Definition: lpcol.h:38
SoPlexBase< Real > SoPlex
Definition: soplex.h:2579
void SoPlex_changeVarBoundsReal(void *soplex, int colidx, double lb, double ub)
void SoPlex_changeRhsReal(void *soplex, double *rhs, int dim)
double SoPlex_getSolvingTime(void *soplex)
void SoPlex_setIntParam(void *soplex, int paramcode, int paramvalue)
void * SoPlex_create()
void SoPlex_changeRangeReal(void *soplex, double *lhs, double *rhs, int dim)
int SoPlex_numCols(void *soplex)
mode for synchronizing real and rational LP
Definition: soplex.h:1087
void SoPlex_changeRowLhsReal(void *soplex, int rowidx, double lhs)
void SoPlex_getRowBoundsReal(void *soplex, int i, double *lb, double *ub)
void SoPlex_addColRational(void *soplex, long *colnums, long *coldenoms, int colsize, int nnonzeros, long objvalnum, long objvaldenom, long lbnum, long lbdenom, long ubnum, long ubdenom)
void SoPlex_addColReal(void *soplex, double *colentries, int colsize, int nnonzeros, double objval, double lb, double ub)
force iterative refinement
Definition: soplex.h:1323
double SoPlex_objValueReal(void *soplex)
char * SoPlex_objValueRationalString(void *soplex)