R中的CVX-esque凸优化?

wal*_*lky 6 optimization r convex-optimization

我需要解决(很多次,对于大量数据,以及其他一些东西)我认为归结为二阶锥形程序.它可以在CVX中简洁地表达,如下所示:

cvx_begin
    variable X(2000);
    expression MX(2000);
    MX = M * X;
    minimize( norm(A * X - b) + gamma * norm(MX, 1) )
  subject to
    X >= 0
    MX((1:500) * 4 - 3) == MX((1:500) * 4 - 2)
    MX((1:500) * 4 - 1) == MX((1:500) * 4)
cvx_end
Run Code Online (Sandbox Code Playgroud)

显示的数据长度和等式约束模式只是来自某些测试数据的任意值,但一般形式将大致相同,有两个客观术语 - 一个最小化错误,另一个是令人鼓舞的稀疏性 - 以及大量的等式约束关于优化变量的转换版本的元素(本身被约束为非负的).

这看起来效果非常好,比我之前的方法好得多,后者捏造了腐烂的约束.麻烦的是,围绕这一切的所有其他事情都发生在R中,将它移植到Matlab会非常麻烦.所以在R中这样做是否可行,如果是这样的话怎么样?

这真的归结为两个不同的问题:

1)这有什么好的R资源吗?据我所知,从CRAN任务页面可以看出,SOCP包选项是CLSCOPDWD,它包括一个SOCP求解器作为其分类器的附件.两者都有相似但相当不透明的接口,并且在文档和示例上有点薄,这使我们:

2)在这些包使用的约束块格式中表示上述问题的最佳方法是什么?上面的CVX语法隐藏了很多关于额外变量等等的繁琐工作,我可以看到自己花费数周的时间来试图做到这一点,所以任何提示或指针向我推进正确的方向都会非常受欢迎......

小智 2

您可能会发现 R 包CVXfromR很有用。这使您可以将优化问题从 R 传递到 CVX,并将解返回给 R。