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
5using namespace soplex;
6
7/** creates new SoPlex struct **/
9{
10 SoPlex* so = new SoPlex();
11 return so;
12}
13
14/** frees SoPlex struct **/
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 **/
22int 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 **/
29int 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 **/
36int 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);
71 so->setIntParam(SoPlex::READMODE, SoPlex::READMODE_RATIONAL);
72 so->setIntParam(SoPlex::SOLVEMODE, SoPlex::SOLVEMODE_RATIONAL);
73 so->setIntParam(SoPlex::CHECKMODE, SoPlex::CHECKMODE_RATIONAL);
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 **/
80void 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 **/
87void 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 **/
94void 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 **/
101int 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 **/
108void 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 **/
125void SoPlex_removeColReal(void* soplex, int colidx)
126{
127 SoPlex* so = (SoPlex*)(soplex);
128 so->removeColReal(colidx);
129}
130
131/** adds a single rational column **/
132void 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 **/
166void 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 **/
183void SoPlex_removeRowReal(void* soplex, int rowidx)
184{
185 SoPlex* so = (SoPlex*)(soplex);
186 so->removeRowReal(rowidx);
187}
188
189/** adds a single rational row **/
190void 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 **/
221void 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 **/
257void 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 **/
264void 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 **/
299void 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 **/
307void 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 **/
328void 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 **/
336void 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 **/
343void 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 **/
364void 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 **/
372void 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 **/
379void 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 **/
388void 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 **/
395void 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 **/
416void 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 **/
451void 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 **/
460void 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 **/
467void 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 **/
486void 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 **/
494void 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 **/
501void 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 **/
513void 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 **/
525void 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 **/
533void 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 **/
540void 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 **/
558int 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 **/
573int 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 **/
581void 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 **/
598void 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 **/
624void 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 **/
633void 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}
Preconfigured SoPlex LP-solver.
Dynamic sparse vectors.
Definition: dsvectorbase.h:53
void add(const SVectorBase< S > &vec)
Append nonzeros of sv.
Definition: dsvectorbase.h:228
(In)equality for LPs.
Definition: lprowbase.h:55
const SVectorBase< R > & rowVector() const
Constraint row vector.
Definition: lprowbase.h:270
Exception base class.
Definition: exceptions.h:42
int & index(int n)
Reference to index of n 'th nonzero.
Definition: svectorbase.h:246
R & value(int n)
Reference to value of n 'th nonzero.
Definition: svectorbase.h:264
int size() const
Number of used indices.
Definition: svectorbase.h:164
RealParam
real parameters
Definition: soplex.h:1390
IntParam
integer parameters
Definition: soplex.h:1050
BoolParam
boolean parameters
Definition: soplex.h:965
Everything should be within this namespace.
SoPlexBase< Real > SoPlex
Definition: soplex.h:2590
LPRowBase< Real > LPRow
Definition: lprow.h:36
LPColBase< Rational > LPColRational
Definition: lpcol.h:40
number< gmp_rational, et_off > Rational
Definition: rational.h:29
LPRowBase< Rational > LPRowRational
Definition: lprow.h:38
LPColBase< Real > LPCol
Definition: lpcol.h:38
Preconfigured SoPlex LP solver.
void SoPlex_getPrimalReal(void *soplex, double *primal, int dim)
void SoPlex_changeRowRhsReal(void *soplex, int rowidx, double rhs)
int SoPlex_optimize(void *soplex)
int SoPlex_readSettingsFile(void *soplex, const char *filename)
void SoPlex_addRowRational(void *soplex, long *rownums, long *rowdenoms, int rowsize, int nnonzeros, 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)
void SoPlex_clearLPReal(void *soplex)
void SoPlex_getRowVectorRational(void *soplex, int i, int *nnonzeros, long *indices, long *coefsnum, long *coefsdenom)
int SoPlex_getStatus(void *soplex)
void SoPlex_changeVarLowerReal(void *soplex, int colidx, double lb)
void SoPlex_changeLhsRational(void *soplex, long *lhsnums, long *lhsdenoms, int dim)
void SoPlex_getRowBoundsRational(void *soplex, int i, long *lbnum, long *lbdenom, long *ubnum, long *ubdenom)
void SoPlex_getRowVectorReal(void *soplex, int i, int *nnonzeros, long *indices, double *coefs)
char * SoPlex_getPrimalRationalString(void *soplex, int dim)
void SoPlex_changeRowLhsReal(void *soplex, int rowidx, double lhs)
void SoPlex_addRowReal(void *soplex, double *rowentries, int rowsize, int nnonzeros, double lb, double ub)
void SoPlex_changeRhsRational(void *soplex, long *rhsnums, long *rhsdenoms, int dim)
char * SoPlex_objValueRationalString(void *soplex)
void SoPlex_changeRangeReal(void *soplex, double *lhs, double *rhs, int dim)
void SoPlex_setRealParam(void *soplex, int paramcode, double paramvalue)
double SoPlex_objValueReal(void *soplex)
void SoPlex_removeColReal(void *soplex, int colidx)
int SoPlex_numRows(void *soplex)
int SoPlex_basisColStatus(void *soplex, int colidx)
void SoPlex_changeVarBoundsReal(void *soplex, int colidx, double lb, double ub)
void SoPlex_getLowerReal(void *soplex, double *lb, int dim)
void SoPlex_setIntParam(void *soplex, int paramcode, int paramvalue)
void SoPlex_removeRowReal(void *soplex, int rowidx)
int SoPlex_numCols(void *soplex)
int SoPlex_getIntParam(void *soplex, int paramcode)
void SoPlex_changeVarUpperReal(void *soplex, int colidx, 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_changeObjReal(void *soplex, double *obj, int dim)
void SoPlex_free(void *soplex)
void SoPlex_getRedCostReal(void *soplex, double *rc, int dim)
void SoPlex_getDualReal(void *soplex, double *dual, int dim)
void SoPlex_changeLhsReal(void *soplex, double *lhs, int dim)
void SoPlex_changeRhsReal(void *soplex, double *rhs, int dim)
void SoPlex_changeObjRational(void *soplex, long *objnums, long *objdenoms, int dim)
void SoPlex_changeRowRangeReal(void *soplex, int rowidx, double lhs, double rhs)
void * SoPlex_create()
void SoPlex_changeUpperReal(void *soplex, double *ub, int dim)
void SoPlex_writeFileReal(void *soplex, char *filename)
void SoPlex_changeBoundsReal(void *soplex, double *lb, double *ub, int dim)
int SoPlex_getNumIterations(void *soplex)
void SoPlex_setRational(void *soplex)
void SoPlex_getRowBoundsReal(void *soplex, int i, double *lb, double *ub)
void SoPlex_setBoolParam(void *soplex, int paramcode, int paramvalue)
void SoPlex_getUpperReal(void *soplex, double *ub, int dim)
int SoPlex_readBasisFile(void *soplex, const char *filename)
int SoPlex_basisRowStatus(void *soplex, int rowidx)
void SoPlex_changeLowerReal(void *soplex, double *lb, int dim)
void SoPlex_getObjReal(void *soplex, double *obj, int dim)
int SoPlex_readInstanceFile(void *soplex, const char *filename)
void SoPlex_changeVarBoundsRational(void *soplex, int colidx, long lbnum, long lbdenom, long ubnum, long ubdenom)
double SoPlex_getSolvingTime(void *soplex)