Hi,
I’m using SteepestDescent method on a 7 parameter function. Clipped code below:
ROOT::Math::Minimizer* min = ROOT::Math::CreateMinimizer(“GSLMultiMin”, “SteepestDescent”);
ROOT::Math::Functor f(this,&TF::total3viewEnergy,7);
min->SetLimitedVariable(0,“energyPerPlane”,variable[0], step[0], m_minTrackEnergyPerPlane, m_maxTrackEnergyPerPlane );
min->SetLimitedVariable(1,“vtx_x”, variable[1], step[1], m_boxXmin, m_boxXmax );
min->SetLimitedVariable(2,“vtx_y”, variable[2], step[2], m_boxYmin, m_boxYmax );
min->SetLimitedVariable(3,“vtx_z”, variable[3], step[3], zUpstream-m_zAddBox, zDownstream+m_zAddBox );
min->SetLimitedVariable(4,“end_x”, variable[4], step[4], m_boxXmin, m_boxXmax );
min->SetLimitedVariable(5,“end_y”, variable[5], step[5], m_boxYmin, m_boxYmax );
min->SetLimitedVariable(6,“end_z”, variable[6], step[6], zUpstream-m_zAddBox, zDownstream+m_zAddBox );
double TF::total3viewEnergy( const double *par )
When I monitor the log file, I find that GSL is only changing one parameter (the [0] out of the vector of 7). Out of curiosity, I changed the assignment of par[0] to a different variable (vtx_x) and it is now the only one being varied:
----------> Iteration 0
FVAL = 1561675.36144889938
X Values : energyPerPlane = 2 vtx_x = 1 vtx_y = 0 vtx_z = 7619.61 end_x = 0 end_y = 0 end_z = 9088.08
…
----------> Iteration 4
FVAL = 1561380.44705637125
X Values : energyPerPlane = 2 vtx_x = 0.966 vtx_y = 0 vtx_z = 7619.61 end_x = 0 end_y = 0 end_z = 9088.08
…
I also see the same behavior with ConjugateFR in GSL.
I originally tried to use Minuit2 (so that I could use my parameter boundaries) but it crashes with the following:
minuit2/src/MnUserTransformation.cxx:381: unsigned int ROOT::Minuit2::MnUserTransformation::Index(const char*) const: Assertion `ipar != fParameters.end()’ failed.
I understand that I can utilize the Minuit2::SinParameterTransformation class to implement my own parameter boundaries with GSL, but first I would simply like to know why it will only vary one of my parameters! Is there some setting I don’t know about that is causing GSL to treat my problem as 1-dimensional?
Thanks!