CVXPY是Python中内置的解决凸优化问题的模块,其可以自动转化问题为标准形式,调用解法器,求解。
从几何上直观地理解凸函数的特点,即凸函数的割线在函数曲线的上方,如下图所示:
本文介绍求解的常见思路方法。
1. 设定变量
cvx.Variable(shape=(), name=None, var_id=None, **kwargs) # 举例 x=cvx.Variable(shape=(10,3), name='cov', symmetric=True)- 参数介绍
2. 设定目标函数
可选cvx.Minimize(最大值)或则和cvx.Maximize(最小值)
如:cvx.Minimize(A@x)(A@x表示A点乘x)
3. 求解
- 定义问题
prob=cvx.Problem(obj,cons)
- 求解
prob.solve()
4. 实例
- 求解问题
$min_x\ \ \frac{1}{2}x_1^2 +x_2^2 -x_1x_2-2x_1-6x_2$
$s.t. \ \ \ \ \ \ x_1 +x_2 \leq 2\\ \ \ \ \ \ \ \ -x_1+2x_2\leq2\\ \ \ \ \ \ \ \ \ \ \ 2x_1+x_2\leq3\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 0\leq x$
- 求解思路
先将目标函数转化为二次规划问题的一般形式:
$minimize\ \frac{1}{2}x^TPx + q^Tx$
$subject\ to\ \ Gx≤h,\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ Ax=b$
可得:$P = \begin{bmatrix}1 & -1\-1&2\end{bmatrix}, f' = \begin{bmatrix}-2\-6\end{bmatrix}$
前三个约束条件可以转化为:$A = \begin{bmatrix}1&1\-1&2\2&1\\end{bmatrix}$然后求解即可。
- 完整代码
- 输出结果
参考链接:https://aistudio.baidu.com/aistudio/projectdetail/2564143