2012-10-15 15 views
0

在我的項目中,我面臨一個場景,其中具有多個輸入的功能。在某個時候,我得到了一個結果,我需要找到一個生成結果的輸入組合。根據可變整數輸入,我可以使用什麼算法來查找任何有效結果

下面是一些僞代碼說明了這個問題:

雙Y = F(X_0,...,x_n)

我提供y和我需要找到任何組合這符合輸入。

我在紙上嘗試了幾件事情,可能會生成一些東西,但是我的每個參數都有6.5 x 10^9個可能值的範圍 - 所以我想要獲得最佳執行時間。

有人可以命名一個算法或一個對我有用的主題,所以我可以讀取其他人如何解決simmilar問題。

我正在考慮從輸入和判斷中創建一個向量,這個向量適合問題有多好。這聽起來很像NN,但沒有可用的訓練階段。

編輯: 謝謝大家的反饋意見。評論總結了我所遇到的問題,我會嘗試一些沿着爬山的路線。

+1

我不明白你想達到什麼目的。你是否試圖找到可能產生期望輸出的輸入?在不知道函數是什麼的情況下 - 即使您可以無限次地採樣函數,也不可能知道。但是,如果對'f'有一些瞭解 - 可能會完成(例如:它是多項式嗎?) – amit

+1

您試圖做什麼的一個觀點是解決*反問題*。另一種觀點是,你正試圖選擇一個「x」值的矢量來最小化計算的「y」和目標「y」之間的差異,這使你成爲一個*優化問題*。有很多算法可以解決這些問題,但是如果沒有關於問題的更多信息,就不會有好的建議。 –

+0

你似乎在問一個方程求解器。它很大程度上取決於'f'的種類和'x_i'的域選擇哪種方法。例如,如果「y」和「x_i」的域是實數,而「f」是多項式(實數),則需要多項式根找到器。 –

回答

1

您的問題的一般情況可能無法解決,但有些情況下有數值方法可以幫助您解決問題。

例如,在一維空間中,如果能找到一個數字,是較小然後y和一個是高於y - 可以以數值找到「根」使用數值方法regula-falsi(其你的情況是y,只需調用f(x) -y的方法)。
找到根源其它數值的方法是newton-raphson
我承認,我不熟悉如何應用在多維空間這些方法 - 但它可能是首發。如果我是你,我會爲這些搜索文獻。
注意:使用這種方法幾乎總是需要一些關於函數的知識。

另一種可能的解決方案是採取g(X) = |f(X) - y)|,並使用一些啓發式算法,以便找到的g最小值。與啓發式方法的問題是,他們將讓你「足夠接近」 - 但很少會得到你到底給目標(除非該功能是convex

一些優化算法有:Genethic AlgorithmHill ClimbingGradient Descent(在那裏你可以numerically find the gradient

相關問題