Minuit Failing to Find Proper Minimum

I’m trying to use Minuit to minimize a function with respect to four input parameters. Long story short, it is commonly (but not always) failing to find the correct minimum, and we believe that this could be related to the step sizes. The parameters are SlopeX, ConstX, SlopeY, ConstY, and it’s trying to minimize Chi2. In the attached image, you can see every step that Minuit takes. Not only is the minimum not the true minimum (which is not obvious from the image, but rather other checks), shockingly, it seems to wobble around a tiny radius for a while, make a massive jump, then wobble around that other point before returning.

We have checked, and Minuit believes that the fit is ok, as in the fit status is 0, and the CovMatrixStatus is 3. Edm is also 0. We’ve been setting the step sizes with the following lines, but clearly you can see that the steps are smaller than this. It’s unclear why a small step size (without running out of iterations) would lead to the incorrect minimum, but perhaps it is a sign of a deeper issue. Is there anything being done incorrectly here?

m_minimizer->SetVariableStepSize(0, 0.01);    // ConstX
m_minimizer->SetVariableStepSize(1, 0.001);  // SlopeX
m_minimizer->SetVariableStepSize(2, 10);       // ConstY
m_minimizer->SetVariableStepSize(3, 0.1);      // SlopeY

The initial step sizes are mainly used to compute the derivatives and the approximate Hessian at the beginning of the minimization that it is used then to compute the actual iteration step.
Varying them should not affect very much the sub-sequent minimization. It is often much better trying instead to use different initial parameter values and use as step size what you would expect as error in the parameters.


This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.