Dr Gilles,

I tried passing a vector or precision in the following way to defaultsolver but it doesn't work. I presume that defaultsolver only assume one precision for every variable.

double _prec[ ] = {1e-03,1e-08}; Vector prec(2, _prec); solver (system, prec);

The second thing I tried is to build a solver by composing/ simply using FwdBwd contractors.

CtcFwdBwd solver(sys.f); CtcNewton newton(sys.f); CtcCompo compo(fwdBwd,newton); double _prec[]={1, 1e-08}; Vector prec(2,_prec); RoundRobin pr(prec); CellStack buff; Solver s (compo,pr,buff);

It returns me error saying the strategy has not been implemented yet. whereas the following never comes back.

CtcFwdBwd solver(sys.f); double _prec[]={1, 1e-08}; Vector prec(2,_prec); RoundRobin pr(prec); CellStack buff; Solver s(solver,pr,buff);

Is there any way I can change ibex_DefaultSolver.h or cpp or I can pass vector of precision to the composed solver?

- Log in to post comments

gilles chabert

Thu, 08/21/2014 - 18:03

Permalink

## Multiple precision

Yes, for the moment the default solver only accepts a uniform precision. But we will add multiple-precision in the next release (2.1.6) that will be issued very soon.

Can you give me the precise message?

If the precision for the first variable is really large (like 1.0) as compare to the one of the second variable (1e-08), the dependecy effect (pessimism) related to the first variable may prevent the solver from efficiently contracting the domain of the second variable which, then, may result in a computational blow-up.

Different precisions should be given to variables only in concordance with the "sensibility" of variables in the constraints, as the example I give in the documentation with Coulomb's law. Is that the case for your example ?

Best regards,

Gilles