scipy를 사용하여 Newton-CG 최소화 함수의 이상한 동작 : 목적 함수 계산을 호출 할 때마다 값을 출력하십시오. 나는 종종 미니멀라이저가 결국보고를 끝내는 것보다 낮은 값을 발견한다는 것을 알게됩니다. 예제 출력은 아래와 같습니다. "Iter"는 최소화 함수의 반복 수이고 "call"은 최소화 함수가 목적 함수 "J"의 계산을 호출 한 시간입니다. "dJ"는 J가 이전 호출에서 얼마나 변경되었는지입니다. "F"는 콜백 함수 'iternum'을 포함하여 모든 계산을 포함하는 객체 클래스 그러나scipy.optimize.minimize ('Newton-CG')는 항상 가장 낮은 목적 함수를 반환하지 않습니다
res=scipy.optimize.minimize(f.J,f.z,args=(F),tol=1.e-4,method='Newton-CG', \
jac=f.Jacobian,hessp=f.Hessian, callback=f.iternum)
Iter 1 , call 30 J=3.73e+09 dJ=3.58e+09
Iter 1 , call 31 J=1.78e+09 dJ=-1.95e+09
Iter 1 , call 32 J=5.23e+08 dJ=-1.26e+09
Iter 1 , call 33 J=1.76e+08 dJ=-3.47e+08
Iter 1 , call 34 J=1.33e+08 dJ=-4.29e+07
Iter 1 , call 35 J=1.44e+08 dJ=1.14e+07
Iter 2 , call 36 J=1.42e+08 dJ=-1.85e+06
Iter 2 , call 37 J=1.42e+08 dJ=5.19e+04
res.fun = 1.42e+08
가장 낮은 J 값이 실제로 + 08 1.33e되어 있습니다 때문에, 그 변수와 그 목적 함수 값이 반환되어야합니다. 다른 사람이 이것을 경험합니까? 아이디어?
죄송합니다. 나는 J = 1.33e + 08의 적합성을 받아들이고 대신 이러한 매개 변수를 반환 할 것으로 예상했습니다. 나는 이것을 말할 수있는 글을 편집했다. – AstroBen
솔루션이 경계/제약 조건을 충족시키지 못하거나 그라디언트를 계산하기 위해 함수가 호출 된 상황에서이 문제가 주로 발생했습니다. 그러나 귀하의 경우에는 적용되지 않습니다. – kazemakase
지금은 간단히 if-then 문을 사용하여 목적 함수의 최상의 값을위한 매개 변수를 항상 저장합니다.이 매개 변수는 결국 자신을 반환합니다. 아직도, 꽤 성가신; 내가 그것을 버그라고 생각해야하고, scipy와 함께 깃대로 달리게하는지 궁금하게 생각한다. – AstroBen