2017-03-15 4 views
-2

私の非線形最適化問題にNLoptを使いたい。チュートリアルページenter link description here、C++のサンプルコードでサンプルコードをテストします。それは良い作品です。しかし、最小化したい関数はベクトルを返すべきです。それはベクトルをアウトポットとして設定する、nlopt

double minf; 
nlopt::result result = opt.optimize(x, minf); 
printf("found minimum at f(%g,%g) = %g ", x[0],x[1],minf); 

を持っているのチュートリアルページでは、どちらが私はMINFがベクトルであると思いますので、私はただのテストのための一次元ベクトルに変更します。

std::vector<double> minf(1); 
nlopt::result result = opt.optimize(x, minf); 
printf("found minimum at f(%g,%g) = %g ", x[0],x[1],minf[0]); 

そして、それはnltest2.cpp:44:44: error: no matching function for call to ‘nlopt::opt::optimize(std::vector<double>&, std::vector<double>&)’

が、私はそれがベクトルをrecturnさせることができますどのような方法がありますエラーを持っていますか? さらに詳しいことができます(答えがわからない方はOKです)。私はarmadillo matrix libraryを使用したいと考えています。より良い私は

mat minf(1,1); 
nlopt::result result = opt.optimize(x, minf); 
printf("found minimum at f(%g,%g) = %g ", x[0],x[1],minf(1,1)); 

これは当然のエラーが発生し...あなたの答えのための

おかげで(私は時間必要なファイルが含まれている)ことができれば!

答えて

0

実際にベクトルを最適化する場合、これは多目的最適化問題になります。 NLoptがそうすることができるかどうかはわかりません。ベクトルを最適化するときにできる適切な方法の1つは、ベクトルをスカラーに変更することです。たとえば、[x、y]を最適化したい場合は、z = x + yを使用してzを最適化することができます。これは間違っているように見えるかもしれませんが、時々動作しますまたは、「パレートフロント」と呼ばれるより高度な方法を使用してください。次のスライドをご覧ください。 change a vector to a scalar

関連する問題