|
Loading...
Searching...
No Matches
Frequently asked questions about SoPlex -
Please have a look at the INSTALL file.
-
Please report
bugs and problems.
In fact, a couple of improvements of SoPlex are
possible. If you are interested in helping please contact
us.
-
To just read LPs from a file and solve them without modifying the LPs,
compile SoPlex and use it on the command line. Calling the binary
without parameters gives you some usage information. To use SoPlex as a
callable library, see src/example.cpp or src/soplexmain.cpp (from which
the SoPlex binary is compiled) on how to construct an LP, solve it, and
extract the solution. For further details, you have to consult the doxygen
documentation of the code (or even the code itself).
Another good starting point might also be
the SoPlex interface of SCIP.
-
Yes, but the corresponding software needs an interface.
Currently, the following frameworks have an
interface to SoPlex.
-
SCIP - Solving
Constraint Integer Programs.
-
ABACUS
has an older interface to 1.2.1 only.
-
There is also an interface to COIN
OSI.
-
Because there is no realloc with new/delete. Because malloc
is faster. And we only use it for builtin types or so called
"Data Objects" .
If you do not like this decision, it is quite easy to change
spxalloc.h such as to use new/delete.
-
No. You need an IP-Solver for this. Most IP-Solver use LP-Solvers
as a subroutine and do some kind of Branch-and-Bound. For
instance, you can use SCIP (Solving Constraint Integer Programs)
together with SoPlex to solve IPs. SCIP can be obtained at
here.
-
The code is tested to compile under Microsoft Visual Studio 2008 and 2010.
It should also be possible to create a Windows version by compiling it
with the GCC under Cygwin or minGW
-
SoPlex implements a composite simplex, i.e., it switches between primal and dual
simplex and the user can only specify the starting algorithm via the integer
parameter "int:algorithm = 0 (primal) / 1 (dual)".
When using the low-level class SPxSolver, you can specify to use the
ENTERing and LEAVEing algorithm and COLUMN and ROW representation.
| ENTER | LEAVE |
COLUMN | Primal | Dual |
ROW | Dual | Primal |
COLUMN oriented is the "usual" representation.
Then Entering is the Primal and Leaving is the Dual algorithm.
In ROW oriented representation, we have in principle the
explicit dual and then the algorithms are reversed.
-
If all of the test instances from Netlib work, but your LP gives this
problem, mail your LP in as an gzip'ed MPS of LP file and we will
check. If you have this problem also with the test instances, check your
stack space: ulimit -s will report the current size in kilobytes.
Try a higher value. If this doesn't help, maybe your compiler is broken.
Try compiling without optimization.
-
Such messages are an indication of numerical trouble, which may happen
from time to time especially on LPs with weird numbers. If the problem
occurs with the binary, try using another scaler (call soplex without
parameters to see how to specify this). If the problem occurs while using
the callable library of SoPlex, you can try to add a scaler and a
preprocessor yourself (see the SoPlex class) unless you solve the same LP
repeatedly with small changes (as in a Branch-and-cut process, for
instance). If you send us an LP or MPS file with the offending linear
program together with a description of your settings, we may have a
closer look at it to see if we can do something about it.
-
Yes, the binary version allows to read and write basis files using the
options --readbas= and writebas= , respectively. The library
version allows to read or write a basis file from within the code as well.
This can be useful for debugging. If you cannot reconstruct an error occurring
in the library code with the binary version, try to save a basis and try again.
Note that the LP needs to be in MPS format in order to ensure compatability of the
basis and the LP (the LP format cannot store ranged rows).
-
-
-
You can use ZIMPL, for example.
It takes a (human readable) file
describing the linear program together with a data file as input and
generates LPs or MIPs in LP- or MPS-format.
-
In the default setting SoPlex presolves the given LP in order to
simplify the problem as far as possible by removing rows,
columns, and bounds. Moreover, infeasibility or unboundedness may
be detected. The simplification cannot be undone, but given a
primal/dual solution for the simplified LP, the simplifier can
reconstruct the primal/dual solution and basis of the
unsimplified LP.
Handled are:
- empty rows / columns
- unconstrained rows
- row singletons
- forcing rows
- zero objective column singletons
- (implied) free column singletons
- doubleton equations combined with a column singleton
- (implicitly) fixed columns
- redundant lhs / rhs
- redundant variable bounds
- variables that are free in one direction
- (weakly) dominated columns
- duplicate rows / columns
The preprocessing can be switched off by using the option -s0 .
|