如何在cvxopt

时间:2017-07-11 17:16:00

标签: python numpy mathematical-optimization nonlinear-optimization cvxopt

我想使用python软件cvxopt来解决我遇到的一个小测试问题(如果软件能够解决这个问题,那么我的老板将能够在未来的项目中使用它)。但是,我无法从文档中找出如何编码一些不是Ax = b或Ax<形式的约束。湾

问题陈述是: x是一个numpy数组(1-d)。找到一个数组y,使得:

(1) We minimize ||x-y||^2 
(2) y is increasing throughout (y[k] <= y[k+1] for all k)
(3) the last element of y = the last element of x
(4) y[0] >= 0

我看到编码条件(3)和(4)是如何完成的,但是如何编码条件(2)?

谢谢你, 基督教

1 个答案:

答案 0 :(得分:1)

首先注意:(连续)凸优化中没有A<b,只有A<=b

你的条件(2)只是对邻居的成对约束,如:

y[0] <= y[1]
y[1] <= y[2]
....

以标准格式提交:

y[0] <= y[1]
<=>
y[0] - y[1] <= 0

现在您可以使用A<=b表达式:

A:
1  -1   0   0 ... meaning: y[0] <= y[1] 
0   1  -1   0 ...          y[1] <= y[2]
0   0   1  -1 ...

b:
0
0
0
...

如果您没有使用cvxopt的可能性来调整KKT计算和co。我强烈建议使用cvxpy(来自同一个学术机构),它更容易使用,包括很多函数,如norm(x-y, 2)等等....它还可以使用cvxopt作为求解器需要(还有其他开源解决方案,如ECOS,SCS)。