REFINER
Built-in layer for arbitrary precision linear programming
In YALMIP
REFINER is invoked by using 'refiner' as solver flag in sdpsettings
Comments
Refiner is a built-in meta solver developed by J-D. Bancal. The module can be used to increase the precision provided by an external linear programming solver.
A = rand(15,5);
x = sdpvar(5,1);
b = rand(15,1);
ops = sdpsettings('solver', 'refiner', 'verbose', 1);
ops = sdpsettings(ops,'refiner.precdigits', 14, 'refiner.internalsolver', 'sedumi');
ops = sdpsettings(ops,'sedumi.eps', 1e-5);
optimize([A*x>=b], sum(x), ops)
In order to reach precisions of more than ~15 digits, refiner requires the GEM high precision matrix library. As an example, the following code provides the solution to a linear program with 200 digits of precision:
gem.workingPrecision(220);
A = gem.rand(15,5);
x = sdpvar(5,1);
b = gem.rand(15,1);
ops = sdpsettings('solver', 'refiner', 'verbose', 1);
ops = sdpsettings(ops,'refiner.precdigits', 200);
optimize([A*x>=b], sum(x), ops)
Note
- Refiner relies on an iterative refinement technique described in A. M. Gleixner, D. E. Steffy, K. Wolter, INFORMS Journal on Computing 28, 449 (2016).