> The function tolerance between iterations is set to 1e-25 (I'll get to
> the importance of this in my next post).
Is this the only termination criterion? If so, why are we seeing
apparently normal optimisations terminating with chi2 >> 1e-25 ?
I guess another possibly related question is why is this only happening
for the BFGS and Newton optimisation tests - is there something special
about these algorithms that makes chi2 poorly determined in these test
cases?
No, relax uses by default the function tolerance (default of 1e-25)
and the maximum number of iterations (default of 1e7). As the tests
in the test suite use noise-free relaxation data back-calculated from
known model-free parameter values, the chi-squared value in these
cases at the minimum is zero (to infinite precision!). However as
collected relaxation data is noisy, the chi-squared value should not
be zero (an exception is when the number of parameters of the model is
greater than or equal to the number of relaxation data points).
The failure of the BFGS and Newton tests is likely to be because of
the high level functions (Numeric/LAPACK matrix operations in this
case) mentioned by Gary in his post at
https://mail.gna.org/public/relax-devel/2006-10/msg00117.html
(Message-id: <[EMAIL PROTECTED]>).
> The test is to be within
> 'value +/- value*error' where the error is 1e-8. This equation
> removes the problem of the different scaling between the model-free
> parameters (the 1e12 difference between S2 and te, etc.).
This is fine for finite values like S2 and te. The issue here is that
the expected value for chi2 in these tests is 0 (assuming a perfect
optimisation). It seems to me that the best way to ensure that
optimisation is behaving correctly in these cases is to test for the
following:
1) The optimised values are correct to within some tolerance (1e-8
relative error seems about right here)
2) Termination is normal. ie. the optimiser has thrown no errors or
warnings, and has not reached its maximum number of iterations.
Good point! This currently isn't tested. Errors are caught but
optimisation warnings (in self.relax.data.res[run][i].warning) aren't.
3) Chi2 is small ( <= 1e-20 seems about right based on the few values
reported so far, but something less restrictive might be required)
That test value should work ok for this noise-free data. Would you
like to have a go changing this value?
On reflection, it is probably worth having at least some tests where we
expect a finite chi2. Testing for that value then should be much easier
to deal with.
I could add some noisy synthetic data for the tests. For testing the
ensemble of algorithms and the myriad of combinations, I don't know if
this is worth the extra effort. It could be useful for testing the
default algorithms though.
Edward
_______________________________________________
relax (http://nmr-relax.com)
This is the relax-devel mailing list
[email protected]
To unsubscribe from this list, get a password
reminder, or change your subscription options,
visit the list information page at
https://mail.gna.org/listinfo/relax-devel