[Soplex] Inquiry about using quad precision with SOPLEX

Wang Wenyuan wenyuan.wang at naist.ac.jp
Fri Sep 27 11:41:16 CEST 2024


Dear Soplex developers,

This is Wenyuan (Mike) Wang, currently working as an Associate Professor 
in Information Science at Nara Institute of Science and Technology in 
Japan. I work on quantum information (especially quantum cryptography) 
and in our field we often run into linear programming or 
semidefinite-programming problems that require numerical solvers.

Previously we mainly used Gurobi for LP problems and Mosek for SDP (and 
some LP), which are rather fast and work reasonably accurately. However, 
recently we are visiting some more numerically challenging LP problems. 
Particularly, say in the form of Ax<=B, A can have a size as large as 
2000x2000, and the largest vs smallest coefficients in A can have as 
many as 15 orders-of-magnitude differences. This makes Gurobi struggle a 
lot with reaching an accurate solution. Therefore, we are hoping to find 
some solvers with even higher precision (such as quad-precision, 
arbitrary-precision, or even rational exact solvers) to see if they 
might help with our problem.

I have followed the README and INSTALL instructions in the soplex 
package (version 711) and have successfully compiled it in Linux 
environment (AMD x86_64 CPU with Windows WSL Ubuntu) and macos 
environment (M2 Max with Rosetta emulated x86). I compiled with makefile 
flags such as GMP=true, QUADMATH=true/false, MPFR=true (quadmath option 
is not available for Apple Silicon, while gmp and mpfr works on both 
platforms). With dependencies including gmp, boost::quadmath, zlib set 
up, I was also able to link Soplex to my C++ project (CLion) and run the 
simple real number and rational number test programs in 
https://soplex.zib.de/doc/html/example_8cpp_source.php.

However, my question is, when using the library, how should I turn on 
the 80-bit (or float_128 in quadmath?) quad precision as described in 
the Soplex main page? I looked through the parameter list, but it seems 
there is no option for switching the internal precision, and while in 
the changelog https://soplex.zib.de/doc-7.1.1/html/CHANGELOG.php it 
mentions that there're two run-time command line options "solvemode" and 
"arithmetic", unfortunately they seem to only work in standalone mode 
but do not seem to be available for the library with the setIntParam 
API.

The only parameters I can find that relate to precision seem to be 
ADAPT_TOLS_TO_MULTIPRECISION, PRECISION_BOOSTING, MULTIPRECISION_LIMIT, 
and PRECISION_BOOSTING_FACTOR. However, they seem to be related to MPFR 
(since when I set e.g. PRECISION_BOOSTING to true, the program will 
automatically output a warning if mpfr is not installed) but not 
boost::quadmath.

May I ask if there is any specific argument to enable quadmath (or does 
linking to the Soplex library compiled with quadmath=true automatically 
enable it)? Or, is the quad-precision option already deprecated? Also, 
if one instead hopes to use the arbitrary-precision MPFR instead, may I 
ask what might be the recommended settings for the above four 
precision-related parameters, and is setting up those parameters at the 
beginning of the program all one needs to do (without any API function 
call change)?

Looking forward to your kind suggestions. Many thanks for your kind help 
in advance.

Regards,
Mike


More information about the SoPlex mailing list