我需要解决(很多时候,要获取大量数据以及许多其他信息)我认为可以归结为second order cone program的问题。可以用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

所示的数据长度和相等约束模式只是来自某些测试数据的任意值,但一般形式将大体相同,具有两个客观术语-一个最小化误差,另一个鼓励稀疏性-以及大量相等约束在优化变量的转换版本的元素上(本身被限制为非负数)。

这似乎工作得很好,比我以前的方法要好得多,前一种方法可以弄乱一些烂掉的约束。麻烦的是,与此相关的所有其他事情都在R中发生,而不得不将其移植到Matlab上将是一件很麻烦的事情。那么在R中这样做是可行的,如果可以的话如何呢?

这实际上归结为两个独立的问题:

1)是否有很好的R资源?据CRAN task page所知,SOCP软件包的选项为CLSCOPDWD,其中包括SOCP求解器作为其分类器的辅助。两者都具有相似但相当不透明的界面,并且在文档和示例上略显薄弱,这使我们能够:

2)用这些软件包使用的约束块格式表示上述问题的最佳方法是什么?上面的CVX语法隐藏了很多多余的变量等繁琐的事情,我只是看到自己花了数周的时间来尝试解决这个问题,因此非常欢迎向正确方向推我的任何提示或指针...

最佳答案

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

关于r - R中的CVX式凸优化?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16243981/

10-12 14:53