二次规划 CPLEX
Quadratic Programming CPLEX
我正在尝试使用 CPLEX 的 Python API 实现一个简单的二次规划。 CPLEX 提供的样本文件 qpex1 对此进行了讨论。 qpex.lp 中提到的问题是
Maximize
obj: x1 + 2 x2 + 3 x3 + [ - 33 x1 ^2 + 12 x1 * x2 - 22 x2 ^2 + 23 x2 * x3
- 11 x3 ^2 ] / 2
Subject To
c1: - x1 + x2 + x3 <= 20
c2: x1 - 3 x2 + x3 <= 30
Bounds
0 <= x1 <= 40
End
问题在 python 中实现时,接收一个矩阵 qmat,它实现 objective 函数的二次部分。矩阵是:
qmat = [[[0, 1], [-33.0, 6.0]],
[[0, 1, 2], [6.0, -22.0, 11.5]],
[[1, 2], [11.5, -11.0]]]
p.objective.set_quadratic(qmat)
谁能解释一下这个矩阵的结构?正在使用的数据结构中有哪些部分?有哪些成分等等。
第一个列表是索引集,第二个列表是对应值的集合,所以qmat
矩阵是:
-33 6 0
6 -22 11.5
0 11.5 -11
导致:
| -33 6 0 | x1
x1 x2 x3 | 6 -22 11.5 | x2 = - 33 x1 ^2 + 12 x1 * x2 - 22 x2 ^2 + 23 x2 * x3 - 11 x3 ^2
| 0 11.5 -11 | x3
我正在尝试使用 CPLEX 的 Python API 实现一个简单的二次规划。 CPLEX 提供的样本文件 qpex1 对此进行了讨论。 qpex.lp 中提到的问题是
Maximize
obj: x1 + 2 x2 + 3 x3 + [ - 33 x1 ^2 + 12 x1 * x2 - 22 x2 ^2 + 23 x2 * x3
- 11 x3 ^2 ] / 2
Subject To
c1: - x1 + x2 + x3 <= 20
c2: x1 - 3 x2 + x3 <= 30
Bounds
0 <= x1 <= 40
End
问题在 python 中实现时,接收一个矩阵 qmat,它实现 objective 函数的二次部分。矩阵是:
qmat = [[[0, 1], [-33.0, 6.0]],
[[0, 1, 2], [6.0, -22.0, 11.5]],
[[1, 2], [11.5, -11.0]]]
p.objective.set_quadratic(qmat)
谁能解释一下这个矩阵的结构?正在使用的数据结构中有哪些部分?有哪些成分等等。
第一个列表是索引集,第二个列表是对应值的集合,所以qmat
矩阵是:
-33 6 0
6 -22 11.5
0 11.5 -11
导致:
| -33 6 0 | x1
x1 x2 x3 | 6 -22 11.5 | x2 = - 33 x1 ^2 + 12 x1 * x2 - 22 x2 ^2 + 23 x2 * x3 - 11 x3 ^2
| 0 11.5 -11 | x3