Python Scipy:嵌套优化不起作用

Python Scipy:嵌套优化不起作用,python,optimization,scipy,Python,Optimization,Scipy,我编写的嵌套优化函数工作不正常。具体来说,myget_v_1总是返回初始猜测。所有其他功能都正常工作 该守则应按如下方式运作: 1-get_v_1将v和w的初始猜测作为输入。它应该使用scipy.fmin_slsqp查找v,以便v最小化get_v_0函数 2-get_v_0将get_v_1中的v作为输入,对于该值,它会找到w,因此w(v)最小化函数w_rss的rss 第一部分不起作用。有什么建议吗 def w_rss(w, v, x0, x1, z0, z1): k = len(x1)

我编写的嵌套优化函数工作不正常。具体来说,myget_v_1总是返回初始猜测。所有其他功能都正常工作

该守则应按如下方式运作:

1-get_v_1将vw的初始猜测作为输入。它应该使用scipy.fmin_slsqp查找v,以便v最小化get_v_0函数

2-get_v_0将get_v_1中的v作为输入,对于该值,它会找到w,因此w(v)最小化函数w_rss的rss

第一部分不起作用。有什么建议吗

def w_rss(w, v, x0, x1, z0, z1):
    k = len(x1)
    importance = np.zeros((len(x0),len(x0)))
    np.fill_diagonal(importance, 1.0/len(x0))
    predictions = np.dot(x0, w)
    errors = x1 - predictions
    weighted_errors = np.dot(errors.transpose(), importance)
    weighted_rss = np.dot(weighted_errors,errors).item(0)
    return weighted_rss

def v_rss(w, z0, z1):
    predictions = np.dot(z0,w)
    errors = z1 - predictions
    rss = sum(errors**2)
    return rss

def w_constraint(w, v, x0, x1, z0, z1):
    return np.sum(w) - 1

def get_w(w, v, x0, x1, z0, z1):
    result = fmin_slsqp(w_rss, w, f_eqcons=w_constraint, bounds=[(0.0, 1.0)]*len(w),
             args=(v, x0, x1, z0, z1), disp=False, full_output=True)
    weights = result[0]
    return weights

def get_v_0(v, w, x0, x1, z0, z1):
    weights = fmin_slsqp(w_rss, w, f_eqcons=w_constraint, bounds=[(0.0, 1.0)]*len(w),
             args=(v, x0, x1, z0, z1), disp=False, full_output=True)[0]
    rss = v_rss(weights, z0, z1)
    return rss

def get_v_1(v, w, x0, x1, z0, z1):
    #result = minimize(get_v_0, v, args=(w, x0, x1, z0, z1), bounds=[(0.0, 1.0)]*len(v))
    result = fmin_slsqp(get_v_0, v, bounds=[(0.0, 1.0)]*len(v),
             args=(w, x0, x1, z0, z1), disp=False, full_output=True)
    importance = result[0]
    return importance  

我认为问题在于该算法使用目标函数的雅可比矩阵来估计下一个测试参数。在您的例子中,在
get_v_1
中调用
fmin_slsqp
,并将
get_v_0
作为其目标函数。依次,
get_v_0
返回一个值,该值取决于
w_rss
的最小化过程


很明显,您无法解析地获得
get_v_0
的雅可比矩阵,因此,雅可比矩阵将通过调用
get_v_0
进行数值估计,参数差异非常小,被最小化。由于
get_v_0
的输出取决于最小化,因此
get_v_0
可能会为非常相似的输入参数值返回相同的值。这将产生一个零值雅可比矩阵,而
get\u v_1
内部的
fmin\u slsqp
会认为其初始猜测已经是最小值。

我认为问题在于算法使用目标函数的雅可比矩阵来估计下一个测试参数。在您的例子中,在
get_v_1
中调用
fmin_slsqp
,并将
get_v_0
作为其目标函数。依次,
get_v_0
返回一个值,该值取决于
w_rss
的最小化过程

很明显,您无法解析地获得
get_v_0
的雅可比矩阵,因此,雅可比矩阵将通过调用
get_v_0
进行数值估计,参数差异非常小,被最小化。由于
get_v_0
的输出取决于最小化,因此
get_v_0
可能会为非常相似的输入参数值返回相同的值。这将产生一个零值雅可比矩阵,
get\u v_1
fmin\u slsqp
内部会认为其初始猜测已经是最小值