plfit icon indicating copy to clipboard operation
plfit copied to clipboard

L-BFGS optimization signaled an error

Open mvngu opened this issue 12 years ago • 7 comments

The error message is

Error at /home/mvngu/apps/plfit/src/plfit.c:401 : L-BFGS optimization signaled an error (error code = -1000), Failed Aborted

The data that produced the error are available at

https://bitbucket.org/mvngu/misc/downloads/lifespan-seq.dat.bz2

mvngu avatar Apr 08 '12 09:04 mvngu

What parameters are you running plfit with? It seems to work for me with no command line arguments apart from the filename:

../data/lifespan-seq.dat:
    Discrete MLE
    alpha =      1.72162
    xmin  =      3.00000
    L     = -110576.40443
    D     =      0.11863
    p     =      0.00000

ntamas avatar Apr 08 '12 10:04 ntamas

I didn't run plfit with any paramters other than the file name. On a fresh compile, I think the problem might lie with cmake not able to locate emmintrin.h on my system. See this transcript:

$ git clone https://github.com/ntamas/plfit.git
Cloning into plfit...
remote: Counting objects: 350, done.
remote: Compressing objects: 100% (173/173), done.
remote: Total 350 (delta 231), reused 291 (delta 172)
Receiving objects: 100% (350/350), 133.88 KiB | 33 KiB/s, done.
Resolving deltas: 100% (231/231), done.
$ cd plfit/
$ mkdir build
$ cd build/
$ cmake ..
-- The C compiler identification is GNU
-- The CXX compiler identification is GNU
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Looking for include files HAVE_EMMINTRIN_H
-- Looking for include files HAVE_EMMINTRIN_H - not found.
-- Looking for include files HAVE_MALLOC_H
-- Looking for include files HAVE_MALLOC_H - found
-- Configuring done
-- Generating done
-- Build files have been written to: /home/mvngu/plfit/build
$ make
<SNIP>
$ cd src/
$ ./plfit ~/lifespan-seq.dat 
Error at /home/mvngu/plfit/src/plfit.c:401 : L-BFGS optimization signaled an error (error code = -1000), Failed
Aborted

Notice the line

-- Looking for include files HAVE_EMMINTRIN_H - not found.

That is strange because

$ locate emmintrin.h
/usr/lib/clang/2.9/include/emmintrin.h
/usr/lib/gcc/i686-linux-gnu/4.6/include/emmintrin.h

mvngu avatar Apr 08 '12 11:04 mvngu

emmintrin.h is optional; the L-BFGS optimizer will use SSE/SSE2 instructions if possible and that's why it is looking for emmintrin.h, but plfit is perfectly fine without it.

Am I right to assume that this is a 32-bit Linux machine? I have just tried it on a 64-bit Ubuntu box (with and without SSE) and it worked fine, so my only bet right now is that this bug is specific for 32-bit machines only.

ntamas avatar Apr 08 '12 18:04 ntamas

You're right. I'm using a 32-bit Linux machine. I think this issue can be closed now.

mvngu avatar Apr 09 '12 04:04 mvngu

I'm gonna install a minimal 32-bit Linux system on a virtual machine and check this out when I get some free time. Leaving this open for the time being so I don't forget it.

ntamas avatar Apr 09 '12 20:04 ntamas

The line search in the L-BFGS-B optimization routine reaches its minimum step length and L-BFGS-B bails out with an error code. I have experimented with different line search backtracking algorithms that are built-in into L-BFGS-B, but it seems that either they fall into an infinite loop or they reach the minimum step length. The error happens with xmin=27. I will try to dig deeper into this when I have more time.

ntamas avatar Apr 14 '12 20:04 ntamas

It is also quite strange that running plfit through valgrind does not result in an error, only when plfit is run "alone", and only for xmin=27.

ntamas avatar Apr 14 '12 21:04 ntamas