如何解决Python中的非线性编程问题

时间:2019-11-01 12:16:32

标签: python nonlinear-optimization scipy-optimize-minimize

我想解决非线性编程问题。目标函数是非线性的,约束是线性的。给定一个向量α(dim is n*1),我想找到另一个向量θ( dim also is n*1) 使cos(α,θ)最小化。同时θ有一些约束。约束是A.dot(θ) < 0(零是列向量),暗淡是m*nm < n

问题是,Given α(dim is n*1),昏暗的是m*nm < n

minimize   cos(α, θ) = α^T.dot(θ) /(|α||θ|)
subject to 
           A.dot(θ) < 0  (zero dim m*1)

我尝试使用scipy.optimize.minimize解决问题并输入约束。喜欢

scipy.optimize.minimize(method='SLSQP', constraints=cons)
scipy.optimize.minimize(method='COBYLA', constraints=cons)

方法的结果取决于初始值。我不知道如何获得合理的初始值,因此我将初始值设置为随机值。不出所料,该方法给出的结果错误,结果不符合约束条件。

1 个答案:

答案 0 :(得分:0)

您需要定义不平等约束

def constraint1(A,θ):
    return np.dot(A,θ)

optimization with scipy

对步骤进行了说明

然后您进行顺序最小二乘二次编程。您将看到一个非凸优化问题没有数学上的保证可以解决。