2014-07-12 56 views
2

通常我使用Mathematica,但現在試圖轉移到python,所以這個問題可能是一個微不足道的,所以我很抱歉。參數在優化間隔內

不管怎樣,python中是否有任何內置函數,它類似於Mathematica中名爲區間[{min,max}]的函數?鏈接是:http://reference.wolfram.com/language/ref/Interval.html

我想要做的是,我有一個函數,我想盡量減少它,但它是一個約束最小化,我的意思是,該函數的參數只允許在一些特定間隔。

對於一個非常簡單的例子,讓我們說F(X)是與參數X函數和我尋找的X其功能,但X最小化是一個間隔內的約束的值(最小,最大)。 [很明顯,實際問題並不是一維而是多維的優化,因此不同的參數可能會有不同的間隔。 ]

由於這是一個優化問題,所以當然我不想從間隔中隨機選取參數。

任何幫助將不勝感激,謝謝!

+0

如果您的問題是凸的和連續的領域,你可以簡單地構建一個廣義梯度下降解決方法與約束即,你的間隔。 – hnk

+0

我不太確定你的意思。實際上,手中的問題是高度非線性的多維問題,我會去尋求不需要梯度的最小化單純形法。我只需要限制參數間隔。 – string

+0

你將如何使用單純的高度非線性問題? – hnk

回答

0

如果這是一個高度非線性問題,則需要使用算法,如廣義縮減梯度法(GRG)。

廣義減小梯度算法(GRG)的想法是解決的子問題的序列,其中的每一個使用的約束的線性近似。 (Ref

您需要確保符合KKT條件等特定條件,但對於具有合理約束條件的大多數連續問題,您將能夠應用此算法。

This對於提供的幾個例子來說是一個很好的參考。參考。皮克。 104.

關於實施:

雖然我不熟悉Python,我一直在使用的模板以及使用函數指針,所以你可以在函數傳遞(爲目標,以及以C求解庫++作爲約束條件)作爲求解器的參數,你會得到你的結果 - 希望在多項式時間出現凸起問題或初始值合理的情況下。

如果在Python中存在這樣做的能力,那麼建立一個廣義GRG求解器應該不會很困難。

Python的解決方案:

編輯:這裏是Python解決問題的方法:Python constrained non-linear optimization

+0

我不知道這個GRG方法。以前我在Mathematica中使用Simplex方法,這實際上是Nelder-Mead算法。無論如何,我認爲我的問題應該有一個直接的答案,通過定義參數的時間間隔(忘記最小化問題)。現在看起來似乎一切都如此牽扯。順便說一句,感謝您的鏈接,我不知道這些方法,所以我會詳細查看它們,並找出它是否有幫助。 – string

+0

嗯,我很驚訝你可以使用普通的單純形來處理高度非線性的問題(除非問題在間隔內近似線性,因此simplex給出了足夠接近的答案)。但是如果你想使用Nelder Mead方法,下面是Excel中的一個參考例子,你可以學習和實現:http://www.personal.soton.ac.uk/rchc/NATCOR/Examples/NelderMeadDemo.xls – hnk