2017-03-15 17 views
-2

我想爲我的非線性優化問題使用NLopt。我在教程頁enter link description here,C++示例中測試示例代碼。它運作良好。但是我想最小化的函數應該返回一個向量。這是在教程頁面有將向量設置爲outpot,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的載體? 更重要的是(如果你不能回答這個問題)。我希望使用犰狳矩陣庫。該更好,如果我可以(我已經包括所需要的.h文件)

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是否可以做到這一點。當你想要優化一個矢量時,你可以做的一種正確的方法是將你的矢量變成標量。例如你想優化[x,y],你可以使用z = x + y並優化z。這看起來可能是錯誤的,但有時它可以工作。或者使用更高級的方式稱爲「帕累託前線」。請看下面的幻燈片 change a vector to a scalar