如何解决在 scipy.optimize.minimize 中的 NonlinearConstraint 中指定 hessian 的问题
我无法在 scipy.optimize.minimize
中指定我自己的 Hessian。我创建了一个最小的问题来仔细检查,但我也无法让它工作。有人会碰巧知道是什么问题吗?
这是我的例子:
import numpy as np
import jax.numpy as jnp
import scipy
from scipy.optimize import minimize
from scipy.optimize import NonlinearConstraint
from jax import grad,jit,vmap,jacrev,hessian
size_overall = 4
constr_size= size_overall
x0 = np.dot(2,np.ones((size_overall)))
def cost_func(x):
return jnp.dot(x,x)
def cost_func_grad(x):
return jnp.dot(2,x)
def test(x):
return x-np.ones(constr_size)
def jac_func(x):
return np.array(jacrev(test)(x0))
def hess_func(x,v):
temp = hessian(test)(x0)
temp0 = temp[0]
for i in range(0,constr_size):
temp0 = np.concatenate((temp0,temp[i]))
return temp0
print(hess_func(x0,0))
print(hess_func(x0,0).shape)
nonlinear_constraint = NonlinearConstraint(test,np.size(constr_size),jac_func,hess_func)
res2 = minimize(cost_func,x0,method='trust-constr',jac=cost_func_grad,constraints=[nonlinear_constraint],options={'disp': True})
解决方法
请参阅我上面的评论以获得答案。
这似乎解决了问题:
.
我想可能是因为它想要的Hessian的形状与Hessian本身的标准定义不同,而且H(x,v)实际上是一个和,见:https://docs.scipy.org/doc/scipy/reference/tutorial/optimize.html#constrained-minimization-of-multivariate-scalar-functions-minimize。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。