在 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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...