1

我比较了许多二次规划(QP)求解器,如cvxoptqpoasesosqp,发现 osqp 对我的应用程序工作得更快更好。

现在,我想最小化具有等式和不等式约束的不定二次函数,这些约束可能会因各种因素而被违反。所以我想使用 l1 惩罚方法来惩罚违反约束的行为。

在此处输入图像描述 例如,

我修改了一个示例,以违反约束。

import osqp
import scipy.sparse as sparse
import numpy as np

# Define problem data
P = sparse.csc_matrix([[4., 1.], [1., 2.]])
q = np.array([1., 1.])
A = sparse.csc_matrix([[1., 0.], [0., 1.], [1., 0.], [0., 1.]])
l = np.array([0., 0., 0.2, 1.1])
u = np.array([1., 1., 0.2, 1.1])

# Create an OSQP object
prob = osqp.OSQP()

# Setup workspace and change alpha parameter
prob.setup(P, q, A, l, u, alpha=1.0)

# Solve problem
res = prob.solve()
print res.x

显然,这是一个不可行的问题,所以我们需要改变目标函数来惩罚错误。所以,我需要帮助来制定可以使用 osqp 的 python 接口解决的问题。

或者,请让我知道是否有任何其他 python 接口可用于解决这种约束冲突问题。

4

1 回答 1

2

一般来说,abs函数可能是危险的(它们是不可微的)。处理此问题的标准方法是添加松弛。例如

g(x) <= 0

变成

g(x) <= s
s >= 0

现在为目标添加一个术语mu*s

为了

h(x) = 0

一个可以做

h(x) = s1 - s2
s1, s2 >= 0

并添加mu*(s1+s2)到目标。

像往常一样:这只是一种方法(还有其他公式)。

于 2017-11-01T11:04:37.727 回答