我正在尝试执行最小化,其中某些参数必须使用PyMinuit求和为1。我想知道是否有一种标准方法来实现这种事情?
如果不满足约束,通常会将函数设置为某个较大的值吗? 例如
def f(params):
if params.sum() != 1:
return 1e6
else:
... compute actual value ...
每轮标准化参数是一个非常糟糕的主意吗? e.g。
if params.sum() != 1:
for param in params:
param = param / params.sum()
谢谢!
答案 0 :(得分:1)
我认为你可能想要改变一些事情,以便将约束条件融入到最小化中。如果没有关于你正在做什么的更多细节,我会尝试引入一个Lagrange multiplier。在新生微积分课程中这是很常见的事情,所以你应该能够在网上找到很多例子。
PS:你在使用PyMinuit,因为你正在做粒子物理学吗?