ROOTデータ分析フレームワークの一部である Minuit2 ミニマイザーを使用して、物理的な制限を持つパラメーターの等高線図を作成しようとしています。残念ながら、Minuit2 は、等高線図を作成しようとすると、パラメーターを制限外の領域にドリフトさせようとしているようです。
>>> from minuit2 import Minuit2
>>> def f(x,y):
... if x < 0 or y < 0:
... print 'x = %.2f, y = %.2f' % (x,y)
... raise Exception
... return x**2 + y**2
...
>>> m = Minuit2(f)
>>> m.limits['x'] = 0, 10
>>> m.limits['y'] = 0, 10
>>> m.migrad()
>>> xy = m.contour('x','y',3)
Info in <Minuit2>: MnMinos UP value has changed, need to update FunctionMinimum class
x = -9.95, y = 0.00
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 4, in f
Exception
他の誰かがこれまたは同様の問題に対処しましたか? 回避策はありますか?
私はすでにROOT フォーラムでこの質問をしましたが、これまたは同様の問題に対処したスタック オーバーフロー ユーザーもいるかもしれないと思いました。