I am trying to fit a 5 parameter (a, b, c, d, e) model, where one of the parameters is constrained by another, let's say,
0< d < 1
e < |d|
I am currently using zfit which as far as I know, uses iMinuit
I have only created the zfit.Parameters
and put the limits such that the ranges accessible to them are valid, again, let's say:
d = zfit.Parameter('d', value=0.5, lower_limit=0.3, upper_limit=1.0, step_size=0.01)
e = zfit.Parameter('e', value=0.1, lower_limit=0.0, upper_limit=0.3, step_size=0.01)
It has been working well so far, but I think it is not the right way to do it.
So my question is, what is the correct way to deal with this kind of constraint?
Cheers
I would use this limits with caution, as they block the variables, ideally, they should be far off the final value.
There are two ways to achieve what you want:
tf.cast(tf.greater(d, 1), tf.float64) * 100.
). Maybe make also sure that minuit is run with use_minuit_grad.