我想使用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)?
谢谢你, 基督教
答案 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)。