3

我有五個值,A,B,C,d和E算法多維優化/求根/東西

鑑於約束A + B + C + d + E = 1,以及五個功能F(A),F(B),F(C),F(D),F(E),我需要求解A到E,使得F(A)= F(B)= F(C)= F(D)= F(E)。

這是最好的算法/方法是什麼?我不在乎自己是否必須自己寫,我只想知道在哪裏看。

編輯:這些是非線性函數。除此之外,他們不能被定性。其中一些最終可能會從數據表中插入。

+0

您需要指定它們的功能類型。線性,二次型,指數型,三角型等 – 2009-08-21 05:45:18

+5

爲了不使人混淆,你應該給你的函數名稱不同。 – starblue 2009-08-21 09:44:41

+1

你的價值觀A ... E也被限制爲非負面的?在許多問題中,當值被限制爲1時,它們也被限制爲不是負面的。還有其他限制嗎? – 2009-08-21 11:51:26

回答

4

這個問題沒有一般的答案。找不到解決方案任何方程。正如蘭斯羅伯茨所說,你必須更多地瞭解這些功能。只是幾個例子

  • 如果函數是二次可微,你可以計算出一階導數,你可以嘗試的Newton-Raphson
  • 變體有一個看看Lagrange Multiplier Method來實施約束。
  • 如果函數F是連續的(它可能是,如果它是插值),也可以嘗試二分法,這很像二分搜索。

在你能解決問題之前,你真的需要更多地瞭解你正在學習的功能。

+2

一個連續函數,即沒有派生或過於複雜的應該用brents方法來完成。它是拋物線插值和黃金二分法的組合,可以適應最小和最大優化,代碼非常簡單,請查看C語言中的NUMERICAL RECIPES以獲取更多用途和優化方法。 – nlucaroni 2009-08-25 14:18:19

+1

感謝nlucaroni提出了另一種方法(我不知道)。 – Martijn 2009-08-26 07:08:04

+2

@nlucaroni:布倫特方法僅限1D。順便說一句,C中的NR是15歲。考慮升級到(真棒)第3版。 – 2010-12-11 23:38:25

1

一種解決方案是採取A,B,C,d和E都等於1/5。不知道是否雖然這是你想要的...

新增約翰的評論(感謝!)

假設第二個公式應爲F1(A)= F2(B)= F3(C)後, = F4(D)= F5(E),我會用Newton-Raphson方法(參見Martijn的答案)。您可以通過設置E = 1 - A - B - C - D來消除一個變量。在迭代的每一步中,您都需要解出一個4x4系統。最大的問題可能是從哪裏開始迭代。一種可能是從一個隨機點開始,做一些迭代,如果你沒有到達任何地方,選擇另一個隨機點並重新開始。

請記住,如果你真的不知道有關該功能的任何內容,那麼就不需要解決方案。

+2

解決了問題的問題,但不是這意味着什麼。這聽起來像問題應該說F_1(A)+ F_2(B)+ ... – 2009-08-21 11:44:15

-1

我會先嚐試粒子羣優化。這是很容易實施和調整。請參閱Wiki頁面。

2

正如其他人已經發布,我們確實需要一些關於功能的更多信息。但是,鑑於此,我們仍然可以嘗試使用標準的非線性編程工具箱解決以下問題。

min k
st。
A + B + C + d + E = 1
F1(A) - K = 0
F2(B) - K = 0
F3(C)-k = 0
F4(d) - K = 0
F5(E)-k = 0

現在,我們可以在我們希望,如罰方法的任何方式解決這個

分鐘K +畝*總和(FI(X_I) - k)的^ 2 st
A + B + C + D + E = 1

或簡單的SQP或內點法。

更多細節,我可以幫助建議一個好方法。

m

+0

+1。我喜歡這種方法。 – 2010-12-11 23:39:16

0

Google OPTIF9 or ALLUNC。我們使用這些來進行一般優化。

0

您可以像其他人提到的那樣使用標準搜索技術。在搜索時可以使用它進行一些優化。首先,你只需要解決A,B,C,D,因爲1-E = A + B + C + D。 (A)= F(B)= F(C)= F(D),那麼你可以搜索A.一旦你得到F(A),你可以求解B,C,如果可能的話。如果無法解決這些功能,則需要繼續搜索每個變量,但是現在您的搜索範圍有限,因爲A + B + C + D < = 1.

如果您的搜索是離散的並且有限,上述優化應該工作得很好。

2

這些函數都是隨着它們的參數單調增加的。除此之外,他們不能被定性。結果表明:

1)以A = B = C = D = E = 1/5開始
2)計算F1(A)到F5(E),並重新計算A到E使每個函數等於該總和除以5(平均值)。
3)通過E重新縮放新的A,以使它們總和爲1,並通過F5重新計算F1。
4)重複,直到滿意。

它收斂速度驚人快 - 只是幾次迭代。當然,每次迭代都需要步驟2的5個根發現。