2011-03-25 604 views
2

我們目前正在使用Matlab的fmincon函數爲我正在處理的項目進行非線性優化。我們需要將項目的這部分移植到C++中,以便將其與項目的其他部分集成。有沒有一種很好的方法將函數編譯成我們可以在C++中使用的庫?或者,是否已經有一個庫可用於實施fmincon在C++中實現Matlab的fmincon函數

如果以上都不是一個選項,那麼有什麼優化庫可以很容易地從轉換到fmincon

背景信息:

我們正在努力優化無人機的航點的飛行路徑沿着沿地面指定航點相機路徑儘可能地接近。兩條路徑之間的航路點在時間上對應,所以當無人機到達第i個航路點時,攝像機萬向節將指向第n個攝像機航點。由於無人機以恆定速度飛行,所以飛行路徑段將全部是相同的長度。轉彎半徑也受上限限制。攝像機路徑沒有限制,因此其分段可能比飛行路徑段更長或更短,並且可能有急轉彎。成本函數是相應航班航點與相機航點之間的平方和距(忽略高度差)。

+1

如果你沒有得到任何好的答案,你可能想谷歌「fmincon在C++」有一個瘋狂的點擊量! – stefan 2011-03-25 23:57:59

+1

如果有人想知道,我們決定使用MIT的[NLopt](http://ab-initio.mit.edu/wiki/index.php/NLopt)庫。 – Brandon 2011-06-09 01:34:21

+0

@Brandon,NLopt中的哪些優化器是否嘗試過/哪個最適合您的問題? – denis 2012-07-27 13:40:46

回答

5

大多數情況下,圖書館不會嘗試成爲像fmincon這樣的黑盒子魔術般的通用優化工具,而是他們會要求您提供更多的細節和更多選擇你自己的,這對他們來說更簡單,並且應該導致你的軟件更快。您當然可以使用MATLAB Engine或MATLAB Compiler從您的程序調用fmincon,但是如果您可以使用更多有關該結構的知識,那麼很可能您的軟件運行速度會更快(並且您可以避免購買MATLAB Compiler)優化問題已經並且調用適當的算法。

你的背景信息沒有描述你在做什麼 - 特別是。你可行的設置是什麼 - 對我來說顯然足以讓你告訴你要使用什麼,所以我能做的就是將你指向相關資源的方向。

Wikipedia's page on optimization指向優化軟件列表的鏈接 - 最重要的是,它描述了更具體的優化問題類型(例如,您可以將問題描述爲帶線性約束的二次規劃?)以及適用於每種情況的軟件。

Boyd's book on convex optimization和相關課程資料&視頻真的是很好的資源。