0

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

问题陈述是: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) 呢?

谢谢你,克里斯蒂安

4

1 回答 1

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-calculations 和 co。我强烈建议使用cvxpy(来自同一学术机构),它更易于使用,包括许多功能,例如norm(x-y, 2)等等。如果需要,它还可以使用 cvxopt 作为求解器(但也可以使用其他开源求解器如 ECOS、SCS)。

于 2017-07-11T18:26:25.613 回答