【Python】使用CVXOPT库求解QP问题

用CVXOPT求解QP问题

在MPC中需要计算目标函数(cost function)的最小值,计算时可以将目标函数转化为QP问题,再用求解器算出

步骤:

1、导入CVXOPT库 2、创建matrix 3、导入求解器

1. 导入CVXOPT

// 一般计算矩阵要引入以下库
import math
import numpy as np
from cvxopt import solvers, matrix

2. 创建matrix

QP问题的标准格式如下:

// 将numpy算出的array/ndarray转化为CVXOPT的matrix
mat_q = matrix(q)
mat_p = matrix(p)
mat_g = matrix(g)
mat_h = matrix(h)

3. 导入求解器

// 求解器计算格式如下
sol = solvers.qp(mat_p,mat_q,G=mat_g,h=mat_h)

// 计算结果例如:
     pcost       dcost       gap    pres   dres
 0:  0.0000e+00 -8.9344e+00  9e+00  0e+00  0e+00
 1:  0.0000e+00 -8.9344e-02  9e-02  3e-16  0e+00
 2:  0.0000e+00 -8.9344e-04  9e-04  3e-16  0e+00
 3:  0.0000e+00 -8.9344e-06  9e-06  2e-16  0e+00
 4:  0.0000e+00 -8.9344e-08  9e-08  7e-17  0e+00
Optimal solution found.

// 查看最优解
print(sol[x])
print(sol[primal objective])

// 写求解器前,不显示运算过程
solvers.options[show_progress] = False

有时会遇到类似 TypeError: G must be a d matrix of size (24, 9) 这种错误,是由于矩阵的维数没有算对导致的

经验分享 程序员 微信小程序 职场和发展