Python 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 第一部分不起作用。有什么建议吗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)
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
内部会认为其初始猜测已经是最小值