2017-06-28 12 views
0

Rcppで制約付き最適化を実装する必要がある問題が発生しました。誰もこれを行う方法についていくつかのヒントを提供できますか?Rcppの制約付き最適化

1)現在のRcppパッケージを検索しましたが、(線形)制約で最適化できるものが見つかりませんでした。

2)私はRcppでR関数optim()を呼び出すことを考えていましたが、RcppでR関数を繰り返し呼び出すのは良い考えではないという情報がありました。

3)dlibライブラリ(Rパッケージ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と初心者だと誰かが正しい方向に私を指すことができると思います。ありがとう!

答えて

0

nloptrパッケージを使用すると、Rの線形制約条件で最適化を行うことができます。また、必要なときに拡張できるRcppパッケージです。

CRAN Task View on Optmizationも役立ちます。

+0

ありがとうございました!しかし、「あなたが伸ばすことができるRcppパッケージでもある」ということについてもっと説明できますか?私の問題はEMアルゴリズムがあり、各反復で最適化を実行する必要があるため、ループ全体をRcppに入れたいと思っています。しかし、私はそれを行う方法を理解することはできません...私はdlibライブラリを使って私の試みを質問に追加しましたが、最初は固執しました。 – Vivian

+0

あなたの質問をよりよく説明してくれてありがとう。これは重複しています。あなたが求めているものがこれまでに答えられているので、そのような答えの1つにリンクしています。 –

関連する問題