我有一個編程搜索問題,我想知道是否有任何算法,類,公式或過程,可以根據過去的結果產生良好的搜索位置。 (我猜這是在某個地方。)或者,我扔掉的解決方案會不會有好的?算法或公式來尋找良好的搜索調整值
讓我試着用一個簡單的例子來解釋:假設有一個2×2米深3米的池塘。我基本上可以把魚餌放在x,y,z位置(2 X 2 X 3 = 27個位置)。假設我在每個地點釣魚了一個小時(測試池塘),並且在27個地點的每一個地點都撿起了不同數量的魚。現在,在我這樣做之後,邏輯上最好的地方是捕魚最多的地方,但僅僅因爲我捕獲了最多的魚,並不意味着它是最好的地方。我本來可以很幸運。在這個位置花費我大部分時間可能會更好,但仍然冒出一小部分時間來確認這是最好的地方。
一個簡單的(而且不好的)解決方案就是在每個地點釣魚10小時,並且在大多數魚被捕獲的地方可能是一個很好的位置,但這將浪費很多時間(270小時)。如果我在某些x,y,z上完成15並且在x2,y2,z2沒有完成,那麼我不應該花太多時間在x2,y2,z2上。
我想到的第二個解決方案是保持每個地點花費的時間和總捕獲的魚的數量。然後這樣做:(簡單的例子)
float catchesByLocation[2,2,3] = {1}; //init all to 1
float totalTimeSpentByLocation[2,2,3] = {1}; //init all to 1
While(true) //never really ends
{
Do x = 0 to 2
Do y = 0 to 2
Do z = 0 to 3 //depth
{
float timeToSpendAtThisLoc = catchesByLocation[x,y,z]/totalTimeSpentByLocation[x,y,z];
float catches = GoFishing(x,y,z);
catchesByLocation[x,y,z] = catchesByLocation[x,y,z] + catches;
totalTimeSpentByLocation[x,y,z] = totalTimeSpentByLocation[x,y,z] + timeToSpendAtThisLoc;
}
}
通過這一解決方案,一定量的時間總是會花費就不好了位置,但隨着時間的推移壞的位置將得到總的非常小的一部分時間。
所以我有這個問題 - 是否有一些合乎邏輯的方法來做到這一點?也許甚至有一個確切的正確方法來解決這個使用數學?有什麼想法來解決這個問題?對不起,我想不出如何標題,並開放給我建議。感謝您閱讀我的問題。
1)做一些抽象。將(x,y,z)合併到一個位置。 2)'GoFishing(location,timeToSpendAtThisLoc)'3)修正數學運算,讓你使用適當的權重,數字有意義(單位!)4)你是否假設概率分佈是固定的?如果是這樣,過了一段時間,你不需要檢查不好的地方。如果沒有,您需要該流程才能忘記舊數據。 – 2014-10-26 20:54:07
謝謝Karoly的意見。發行量會發生變化,但我認爲最好不要將我的問題留在這裏,以便縮短髮布時間。我喜歡你對抽象部分的想法。我猜整個3維的東西並不適用,因爲每個區塊都是獨立的。我會花一些時間考慮這個問題,只需要一些大小無關的桶。 – Sunsetquest 2014-10-28 04:18:58