1

我正在尝试拟合一个 5 参数(a、b、c、d、e)模型,其中一个参数受另一个参数的约束,比方说,

0< d < 1

e < |d|

我目前正在使用zfit,据我所知,使用iMinuit

我只创建zfit.Parameters并设置了限制,以便它们可以访问的范围是有效的,再一次,让我们说:

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)

到目前为止它一直运作良好,但我认为这不是正确的方法。

所以我的问题是,处理这种约束的正确方法是什么?

干杯

4

1 回答 1

1

我会谨慎使用这个限制,因为它们会阻塞变量,理想情况下,它们应该远离最终值。

有两种方法可以实现您想要的:

  • 要么在“数学上”施加约束作为逻辑结果,因此使用组合参数(它是其他参数的函数)从另一个参数定义一个参数。如果可能,这应该是首选方式。
  • 另一种选择是通过附加条款施加这种限制。但是,这可能会在您修改可能性时产生影响。最小化器会找到一个最小值,但这可能不是您寻找的最小值。您可以使用 SimpleConstraints 并在违反上述任何一项时为可能性添加一个惩罚项(例如tf.cast(tf.greater(d, 1), tf.float64) * 100.)。也许还要确保使用 use_minuit_grad 运行 minuit。
于 2020-07-11T22:09:33.940 回答