如何嵌套 2 个简单的 CVX 问题?有可能吗?

计算科学 优化 matlab 凸优化 约束优化 简历
2021-12-05 11:40:48

我有未确定的外部优化问题

minx0Axb122+AT(x)b222
使用或在相应的 CVX Matlab 代码中ARm×nm<<n=642

variable x(n) nonnegative
minimize(sum( (A*x-b1).^2 + (A*T(x,p1,p2,p3,p4,p5)-b2).^2 ))

其中p1,...,p5是函数所需的固定参数T里面T还有另一个线性最小化问题 或 Matlab 语法

minc,q1qs.t.DcxqDcxq
DRn×n

function value = T(x,p1,p2,p3,p4,p5)
... something happens ...
cvx_begin
    variable c(n)
    variable q(n)
    minimize sum(q)
    subject to
        D*c-x <= q
        -D*c-x >= -q
cvx_end
... something else happens and calculates return value ...

不幸的是我得到了错误

Undefined function 'newcnstr' for input arguments of type 'cvx'.

Error in cvx/lt (line 22)
b = newcnstr( evalin( 'caller', 'cvx_problem', '[]' ), x, y, '<' );

cvx_end在函数中的行之后T

在处理其他问题时,我曾多次遇到此错误,但这次我无法用内置的 Matlab 函数替换外部优化,因为fmincon速度太慢了。不幸的是,替换内部问题linprog也太慢了。

是否可以嵌套这样的 CVX 优化问题?如果是,如何? 还有其他想法我可以尝试吗?

2个回答

是否可以嵌套这样的 CVX 优化问题?如果是,如何?

我不认为你可以,不。CVX 旨在为凸程序建模;因此,它不能模拟非凸程序(但可以模拟它们的凸松弛)。一般来说,双层线性规划案例可以产生非凸可行集(参见Chris Fricke 的演示文稿,幻灯片 40-44),这将使 CVX 无法正确解决这些问题,因此 CVX 可能不允许这种结构。

还有其他想法我可以尝试吗?

为了尝试其他想法,了解是否是一个平滑函数会有所帮助。T

抱歉,如果我的评论为时已晚,但我刚刚加入了这个社区。

您可以考虑 Bender 分解或 Dantzig-Wolfe 分解.. 我做过类似的事情:min {c'x + E [Q(x)]| x>=0}; 其中 Q(x)= min {q'y|Wy =T(x)-d, y>=0}

我能够使用 Bender 分解有效地解决它。

祝你好运,