约束优化

时间:2019-11-18 18:40:02

标签: python scipy minimize

我需要编写一个约束优化器。我正在尝试最小化包含变量 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)

1 个答案:

答案 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)