I noticed that the L-BFGS-B calls function evaluations outside the constraints. Looking at the code, I see that the MoreThuente::linesearch calls cvsrch, but the cvsrch function only has hard-coded min/max-step sizes. The L-BFGS-P paper mentions that the line search step size should be capped to respect the boundaries (bottom of page 17).
I noticed that the L-BFGS-B calls function evaluations outside the constraints. Looking at the code, I see that the MoreThuente::linesearch calls cvsrch, but the cvsrch function only has hard-coded min/max-step sizes. The L-BFGS-P paper mentions that the line search step size should be capped to respect the boundaries (bottom of page 17).