首页 > 解决方案 > 如何在 Python 中解决非线性规划问题

问题描述

我想解决一个非线性规划问题。目标函数是非线性的,约束是线性的。给定一个向量α(dim is n*1),我想找到另一个向量θ( dim also is n*1) 使 cos(α, θ) 最小化。同时θ也有一些限制。约束是A.dot(θ) < 0(零是列向量),dim 是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)

方法的结果取决于初始值。我不知道如何得到一个合理的初始值,所以我设置的初始值是随机的。正如预期的那样,该方法给出了错误的结果,结果不符合约束条件。

标签: pythonnonlinear-optimizationscipy-optimize-minimize

解决方案


您需要定义不等式约束

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

这些步骤描述了使用 scipy 进行优化

然后你去顺序最小二乘二次规划。你会看到一个非凸优化问题没有数学保证可以解决。


推荐阅读