2013-02-20 29 views
0

我有一些功能(例如,雙功能(雙值)),和一些範圍(例如,從A到B)。我需要在這個範圍內計算函數的最大值。有沒有圖書館?請給我建議。如何計算範圍內功能的最大值?

+1

不清楚的問題。請添加一個好問題stmt。 – Arpit 2013-02-20 15:53:58

+0

你需要更多關於'function'的具體信息。例如,如果它是一個隨機數生成器,由'value'植入呢?那麼,有什麼細節可以保證嗎? – Dancrumb 2013-02-20 15:56:32

+0

如果函數本質上是一個「黑盒子」,那麼唯一的辦法就是檢查每一個可能的double值。現在有很多獲得估計最大值的技術,例如爬山,各種遺傳算法等。 – NominSim 2013-02-20 15:56:44

回答

2

如果函數需要處理浮點值,你將不得不使用像Golden section search。請注意,對於此特定方法,可以處理的功能有很大的限制(具體而言,它必須是unimodal)。有一些adjustments你可以使算法擴展到更多的功能,特別是這些修改將允許它工作的連續功能。

+0

我相信輸入有限制(OP提到的範圍「A到B」)。你是對的,黃金分割搜索是單峯函數,這就是爲什麼我在最後一句中給出了資格。 – 808sound 2013-02-20 16:12:02

+0

輸入是雙重的,所以它很可能是x∈R而不僅是x∈N。 – 2013-02-20 16:12:03

+0

@KhoaNghiem我同意,我只是在想,OP可能會改變/簡化他們的算法/函數來處理整數。 – 808sound 2013-02-20 16:14:13

0

這是一個連續函數,還是一組離散值?如果是離散值,則可以遍歷所有值,並將最大/最小標誌設置爲808sound建議的值,或者可以將所有值加載到數組中。

如果它是一個連續函數,那麼您可以在離散輸入處填充函數值的數組,然後找到上述最大值,或者如果它是可微分的,那麼您可以使用基本微積分來查找df (x)/ dx是0.後者的情況稍微抽象一些,可能比你想要的更復雜,但是?

一個快速谷歌搜索使我這個: http://code.google.com/p/javacalculus/

但我從來沒有使用過它自己,所以我不知道如果實現所需的功能。儘管它有微分方程,所以我認爲他們會有像基本差異這樣的「寶貝東西」。

0

我不知道Java中是否有針對您的問題的庫。 但我知道你可以很容易地用MatLab(或開放源代碼的Octave)做到這一點。

0

如果你不具備的功能,內部工作是什麼任何跡象(即函數是一個黑盒子,它接受輸入,併產生一個輸出),沒有「簡單」的方式找到全球最大。

對於您的輸入(技術上)有無限的選擇點,所以「迭代所有可能的輸入」在數學上是不可行的。

有多種算法,會給你估計最大值INA功能是這樣的:

hill climbing algorithm,和firefly algorithm是兩個,但還有更多。這是一個相當有據可查的/研究過的計算機科學問題,網上有很多材料可供您查看。我建議先從爬山算法開始,並可能擴展到其他全局優化算法。

注:這些算法不保證其結果是最大的,但提供其價值的估計值。 *