I think we should check the return value of `fmin_l_bfgs_b` to ensure proper convergence.

The function returns

```
Returns
-------
x : array_like
    Estimated position of the minimum.
f : float
    Value of `func` at the minimum.
d : dict
    Information dictionary.

    * d['warnflag'] is

      - 0 if converged,
      - 1 if too many function evaluations,
      - 2 if stopped for another reason, given in d['task']

    * d['grad'] is the gradient at the minimum (should be 0 ish)
    * d['funcalls'] is the number of function calls made.
```

Checking `d['warnflag']==0` is probably a good idea. Some of the other info, like `d['funcalls']` might be reasonable to print out to the logger in verbose mode.