Rcpp中的约束优化

时间:2017-06-28 04:32:13

标签: rcpp

我遇到了一个需要在Rcpp中实现约束优化的问题。任何人都可以提供一些关于如何做到这一点的提示吗?

1)我搜索了当前的Rcpp软件包,但没有找到可以用(线性)约束进行优化的软件包。

2)我想在Rcpp中调用R函数optim()但是被告知在迭代中调用Rcpp中的R函数不是一个好主意。

3)我尝试使用dlib库(由R package dlib提供),但在定义http://dlib.net/optimization_ex.cpp.html中给出的示例函数时出错。

我的Rcpp代码:

#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::plugins(cpp11)]]
// [[Rcpp::depends(dlib)]]
#include <dlib/optimization.h>

using namespace dlib;
using namespace std;

typedef matrix<double,0,1> column_vector;

// [[Rcpp::export]]
double rosen (const column_vector& m)
{
  const double x = m(0);
  const double y = m(1);
  double res = 100.0*pow(y - x*x,2) + pow(1 - x,2);
  return(res);

}

错误消息:

no matching constructor for initialization of 
'dlib::matrix<double,0,1,dlib::memory_manager_stateless_kernel_1,
dlib::row_major_layout>'

我是Rcpp的初学者,希望有人能指出我正确的方向。谢谢!

1 个答案:

答案 0 :(得分:0)

nloptr包允许您在R的线性约束下进行优化,它也是一个Rcpp包,您可以根据需要进行扩展。

CRAN Task View on Optmization也很有帮助。