2015-06-05 72 views
0

大家好:)我對優化很陌生,幾乎沒有理解它(準備在弄清楚如何在沒有任何正式學習的情況下編寫目標函數之後撕開我的手腕),並且需要一些工作上的幫助項目。優化工具箱(fmincon) - 如何設置邏輯約束?

當我使用優化工具箱fmincon(使用Trust Region Reflective算法)時,我該如何設置邏輯約束?

我優化5個值(可以稱之爲矩陣OptMat),我想與約束,使得

max(OptMat)/min(OptMat) > 10 

我認爲這將優化5個值OptMat的儘可能低的水平,以優化,而請記住上述約束條件,以便如果OptMat的一組值在較低的OF中找到,並且不會報告這些值,而是報告OptMat值滿足上述約束的下一個最低OF。

爲了記錄,我的下限是[0,0,0,0,0]。我不確定如何將它輸入上限,因爲它只接受雙打,這是合乎邏輯的。我嘗試了活動集算法,並啓用了非線性約束函數框,我想我正處在正確的軌道上。如果是這樣,我不知道什麼語法輸入我想要的約束。我可以想到的另一種方法是,可以使用它作爲上邊界。

[min(OptMat)*10, min(OptMat)*10, min(OptMat)*10, min(OptMat)*10, min(OptMat)*10] 

我再次使用GUI優化工具箱。我沒有看太多的命令行優化(儘管我最終需要將它寫入命令行),並且我認爲我在某處可以設置上邊界,並且它不必是雙重的?

非常感謝你的幫助,如果有人能夠。我很抱歉,如果這是一個真正的nooby問題。

回答

0

你要找的是非線性的限制,fmincon可以處理它(我只知道命令,而不是GUI)的說法nonlcon。欲瞭解更多信息,看看這個指南http://de.mathworks.com/help/optim/ug/fmincon.html

你會如何實現這一點?首先創建一個功能

function [c, ceq] = mycondition(x) 
    c = -max(x)/min(x)/10; 
    ceq = 0; 

我不得不改變方程以匹配正確形式主義,即C(X)< = 0是需要的。 也許你也可以創建一個匿名函數,我不確定(http://de.mathworks.com/help/matlab/matlab_prog/anonymous-functions.html)。

然後使用此功能使用@標誌喂fmincon功能,即在特定位置寫

fmincon(...., @mycondition, ...) 
+0

非常感謝您!目前無法測試,但這似乎正是我所期待的。我最終需要轉向命令行,所以看起來會比以後更快。 – user4976722

+0

不要忘記給予好評,或者如果它解決您的問題,關閉的問題。 – rst

+0

我沒有足夠的聲譽還給予好評,但我接受的回答你的問題;除非靠近你的意思是刪除問題? – user4976722