我需要编写一个约束优化器。我正在尝试最小化包含变量 rho 的函数 sub 。 rho 是一个n矢量,需要满足约束0 <= rho <= 1。我收到错误“ LSQ子问题中的奇异矩阵C”,这使我认为我没有正确定义约束函数。我只知道COBYLA支持不平等约束的方法,但我不知道如何以这种形式编写它。我已经为方法SLSQP使用了“ eq”。请帮帮我!
def inequality(rho):
return np.sum(np.logical_or((rho < 0), (rho > 1)))
cons = [{'type':'eq', 'fun': inequality}]
def opt2(sub):
res2 = minimize(sub, rho(9), method='SLSQP', jac=gradient_ext, constraints=cons)
return res2
optimize2 = opt2(subroutine_ext)
print(optimize2)
答案 0 :(得分:0)
在不了解函数sub
及其雅可比性的情况下,很难正确地提供帮助,无论如何,在您的情况下无需使用任何约束。提供变量minimize
的范围就足够了。假设rho
是一个numpy数组:
bnds = [(0,1) for _ in range(len(rho))]
def opt2(sub):
res2 = minimize(sub, x0=your_starting_point, bounds=bnds, jac=gradient_ext)
return res2
optimize2 = opt2(subroutine_ext)
print(optimize2)