2012-06-02 32 views
1

我有三個值X,Y和Z.這些值的取值範圍在0到1之間(包括0和1)。當我調用一個函數f(X,Y,Z)時,它返回一個值V(0到1之間的值)。我的目標是選擇X,Y,Z,以便返回值V儘可能接近1.在不確定條件下求函數的最大值

選擇過程應該是自動化的,並且X,Y,Z的正確值是未知的。

由於我的用例,可以將Y和Z設置爲1(值1對輸出沒有任何影響)並搜索X的最佳值。然後,我可以用X代替X值並且對Y執行相同的操作。Z的操作相同。

如何查找「最大值」?是否有某種「漸變下降」或爬山算法或類似的東西? 整個模塊是用Perl編寫的,所以也許有一個perl包可以解決這個問題?

+0

我們可以說,對於X,Y和四個小數的值Z足夠。另外,每個計算都很耗時,所以只需幾步即可完成。 – Tyzak

+0

這與查找* f(x,y,z)*的偏微分的根源相同,可以使用[Newton-Raphson方法](http://en.wikipedia.org/wiki/牛頓%27s_method)如果功能可以區分。告訴我們更多關於這個功能。 – Borodin

+0

不確定性部分在哪裏? – ziggystar

回答

2

您可以使用模擬退火。它是一種多變量優化技術。它也被用來爲旅遊銷售人員問題獲得部分解決方案。它也是Peter Norvig的AI入門書中提到的搜索算法之一。

它是一個依賴隨機變量的爬山算法。也不一定會給你'最佳'的答案。根據您的計算/時間需求,您還可以改變它所需的迭代次數。

http://en.wikipedia.org/wiki/Simulated_annealing http://www1bpt.bridgeport.edu/sed/projects/449/Fall_2000/fangmin/chapter2.htm

+0

很好,謝謝,這就是我正在尋找:) – Tyzak

1

我建議你看看Math::Amoeba,它實現了Nelder-Mead方法用於找到函數的固定點。

相關問題