Hi Edward.
I get:
Verify, without constraints, C code BFGS
Traceback (most recent call last):
File "profiling_relax_fit.py", line 401, in <module>
main()
File "profiling_relax_fit.py", line 177, in main
cProfile.run('verify(min_algor="BFGS",
constraints=%s)'%(constraints), filename)
File
"/Applications/Canopy.app/appdata/canopy-1.4.0.1938.macosx-x86_64/Canopy.app/Contents/lib/python2.7/cProfile.py",
line 29, in run
prof = prof.run(statement)
File
"/Applications/Canopy.app/appdata/canopy-1.4.0.1938.macosx-x86_64/Canopy.app/Contents/lib/python2.7/cProfile.py",
line 135, in run
return self.runctx(cmd, dict, dict)
File
"/Applications/Canopy.app/appdata/canopy-1.4.0.1938.macosx-x86_64/Canopy.app/Contents/lib/python2.7/cProfile.py",
line 140, in runctx
exec cmd in globals, locals
File "<string>", line 1, in <module>
File "profiling_relax_fit.py", line 323, in verify
results = generic_minimise(func=func, dfunc=dfunc, d2func=d2func,
args=(), x0=x0, min_algor=E.min_algor, min_options=E.min_options,
func_tol=E.func_tol, grad_tol=E.grad_tol, maxiter=E.max_iterations,
A=E.A, b=E.b, full_output=True, print_flag=E.verbosity)
File
"/Users/tlinnet/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/minfx/generic.py",
line 322, in generic_minimise
results = bfgs(func=func, dfunc=dfunc, args=args, x0=x0,
min_options=min_options, func_tol=func_tol, grad_tol=grad_tol,
maxiter=maxiter, full_output=full_output, print_flag=print_flag,
print_prefix=print_prefix)
File
"/Users/tlinnet/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/minfx/bfgs.py",
line 49, in bfgs
results = min.minimise()
File
"/Users/tlinnet/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/minfx/base_classes.py",
line 299, in minimise
self.update()
File
"/Users/tlinnet/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/minfx/bfgs.py",
line 151, in update_bfgs
yk = self.dfk_new - self.dfk
TypeError: unsupported operand type(s) for -: 'list' and 'list'
Best
Troels
2014-08-26 19:52 GMT+02:00 Edward d'Auvergne <edward@xxxxxxxxxxxxx>:
The exponential curve-fitting Hessian from the
target_functions.relax_fit.d2func() function is bug free and fully
functional.
Regards,
Edward
On 26 August 2014 19:24, Edward d'Auvergne <edward@xxxxxxxxxxxxx> wrote:
Oh well, I had some time between frame order calculations and decided
to practice my C coding a little. The full exponential curve Hessian
is now implemented. It may still need debugging. But you can now use
the full Newton algorithm in your timing tests and comparisons to
Scipy.
Regards,
Edward
On 26 August 2014 13:32, Edward d'Auvergne <edward@xxxxxxxxxxxxx> wrote:
Test it and see ;) And if you are interested in the speed up in this
part of the analysis, you can take it one more step and implement the
Hessian in the C modules and then time the Newton algorithm!
Regards,
Edward
On 26 August 2014 13:26, Troels Emtekær Linnet <tlinnet@xxxxxxxxxxxxx>
wrote:
Should this be used instead then in R2eff minimisation?
Is it faster than simplex?
Best
Troels
2014-08-26 13:04 GMT+02:00 Edward d'Auvergne <edward@xxxxxxxxxxxxx>:
Oh, I forgot to mention, but I also converted the
Relax_fit.test_curve_fitting_height and
Relax_fit.test_curve_fitting_volume system tests to use BFGS
optimisation. This is one of the best optimisation techniques when
only the function and gradient are present, as it tries to numerically
approximate the Hessian matrix, updating it as the algorithm moves
along. It is fast and performs incredibly well, so it is a widely
used algorithm. The system tests using BFGS demonstrate that the
gradient works very well for optimisation. It isn't as fast as Newton
optimisation however.
Regards,
Edward
On 26 August 2014 13:00, Edward d'Auvergne <edward@xxxxxxxxxxxxx>
wrote:
Hi Troels,
I've now implemented the exponential curve-fitting dfunc() function
for calculating the gradient. This includes:
- The Python wrapper function
specific_analyses.relax_fit.optimisation.dfunc_wrapper(),
- The target_functions/c_chi2.c function dchi2(),
- The target_functions/exponential.c functions exponential_dI0() and
exponential_dR(),
- The target_functions.relax_fit C module dfunc() Python function.
I have tested the gradient using the numerical integration in the
test_suite/shared_data/curve_fitting/numeric_gradient/integrate.py
file to determine what the chi-squared gradient should be at different
parameter combinations. And this has been converted into a few unit
tests. As this works, that means that the jacobian() function of the
C module should also be correct and bug-free, hence you should be able
to use it to obtain the covariance matrix.
This is all I will do for now. All that is left is to do for the
target_functions.relax_fit C module is simply the same thing, but for
the Hessian. Feel free to give this a go if you are interested. If I
have time in the future, I might add this too.
Regards,
Edward
On 24 August 2014 17:56, Troels E. Linnet
<NO-REPLY.INVALID-ADDRESS@xxxxxxx> wrote:
URL:
<http://gna.org/task/?7822>
Summary: Implement user function to estimate R2eff
and
associated errors for exponential curve fitting.
Project: relax
Submitted by: tlinnet
Submitted on: Sun 24 Aug 2014 03:56:36 PM UTC
Should Start On: Sun 24 Aug 2014 12:00:00 AM UTC
Should be Finished on: Sun 24 Aug 2014 12:00:00 AM UTC
Category: relax's source code
Priority: 5 - Normal
Status: In Progress
Percent Complete: 0%
Assigned to: tlinnet
Open/Closed: Open
Discussion Lock: Any
Effort: 0.00
_______________________________________________________
Details:
A verification script, showed that using scipy.optimize.leastsq
reaches the
exact same parameters as minfx for exponential curve fitting.
The verification script is in:
test_suite/shared_data/curve_fitting/profiling/profiling_relax_fit.py
test_suite/shared_data/curve_fitting/profiling/verify_error.py
The profiling script shows that a 10 X increase in speed can be
reached by
removing
the linear constraints when using minfx.
The profiling also shows that scipy.optimize.leastsq is 10X as fast
as using
minfx, even without linear constraints.
scipy.optimize.leastsq is a wrapper around wrapper around MINPACK's
lmdif and
lmder algorithms.
MINPACK is a FORTRAN90 library which solves systems of nonlinear
equations, or
carries out the least squares minimization of the residual of a set
of linear
or nonlinear equations.
The verification script also shows, that a very heavy and time
consuming
monte carlo simulation of 2000 steps, reaches the same errors as the
errors
reported by scipy.optimize.leastsq.
The return from scipy.optimize.leastsq, gives the estimated
co-variance.
Taking the square root of the co-variance corresponds with 2X error
reported
by minfx after 2000 Monte-Carlo simulations.
This could be an extremely time saving step, when performing model
fitting in
R1rho, where the errors of the R2eff values, are estimated by
Monte-Carlo
simulations.
The following setup illustrates the problem.
This was analysed on a: MacBook Pro, 13-inch, Late 2011.
With no multi-core setup.
Script running is:
test_suite/shared_data/dispersion/Kjaergaard_et_al_2013/2_pre_run_r2eff.py
This script analyses just the R2eff values for 15 residues.
It estimates the errors of R2eff based on 2000 Monte Carlo
simulations.
For each residues, there is 14 exponential graphs.
The script was broken after 35 simulations.
This was measured to 20 minutes.
So 500 simulations would take about 4.8 Hours.
The R2eff values and errors can by scipy.optimize.leastsq can
instead be
calculated in: 15 residues * 0.02 seconds = 0.3 seconds.
_______________________________________________________
Reply to this item at:
<http://gna.org/task/?7822>
_______________________________________________
Message sent via/by Gna!
http://gna.org/
_______________________________________________
relax (http://www.nmr-relax.com)
This is the relax-devel mailing list
relax-devel@xxxxxxx
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