python - CVXOPT二次编程接口(interface)

标签 python convex-optimization cvxopt quadratic-programming

为 CVXOPT 提供的 QP 求解器可解决以下形式的问题(请参阅 http://cvxopt.org/userguide/coneprog.html#quadratic-programming ):

Minimize 
           (1/2)*x.t*P*x + q.T*x
Subject to
           G*x <= h
           A*x  = b

这工作得很好,但是当想要解决两侧不等式约束的问题时,它会变得有点尴尬:

Minimize 
           (1/2)*x.t*P*x + q.T*x
Subject to
           G1*x <= h1
           G2*x >= h2
            A*x  = b

我可以将第二个问题重新定义为第一个问题,方法是将维度数量加倍并要求 new_x成为old_x堆叠在自身之上:

new_x = [old_x]
        [old_x]

我认为我可以通过为A找到合适的形式来强制执行上述条件。 。然后我可以对 h1 进行编码和h2不平等进入new_G * new_x <= new_h通过设置new_h成为h1堆积在 h2new_G是一个对角矩阵 n连续 1 s 后跟 n连续 -1 s 在对角线上。

无论如何,上面的方法非常笨拙,它使我的问题的维度加倍,甚至可能不起作用。

在 CVXOPT 中是否有更好的方式来表达第二个问题?

最佳答案

Minimize 
           (1/2)*x.T*P*x + q.T*x
Subject to
           new_G * x <= new_h
               A * x  = b

哪里

           new_G = [G1;-G2],
           new_h = [h1;-h2].

          (G1 - matrix m1*n, G2 - matrix m2*n, new_G - matrix (m1 + m2)*n) 

new_G = numpy.concatenate( ( G1, -G2 ), axis = 0 )
new_h = numpy.concatenate( ( h1, -h2 ), axis = 1 )

`

关于python - CVXOPT二次编程接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27376572/

相关文章:

optimization - SVM和神经网络中的成本函数优化有何不同

algorithm - 有没有一个简单的算法来计算凸多边形的最大内切圆?

machine-learning - 向线性 SVM/逻辑回归目标函数添加仿射项

python - Django 支持的图书馆借阅系统

python - 在 pandas df 中提取带有包含空格的子字符串的行

python - 在字典中找到一个值然后得到键

python - 如何在 Windows 7 上安装适用于 Python 3.5 的 cvxopt

Python:CVXPY 解算器错误

java - 需要帮助解决具有一些已知值的最小稀疏线性问题

python - 将两列中的数字组合起来创建一个数组