2014-10-26 70 views
1

我有一個編程搜索問題,我想知道是否有任何算法,類,公式或過程,可以根據過去的結果產生良好的搜索位置。 (我猜這是在某個地方。)或者,我扔掉的解決方案會不會有好的?算法或公式來尋找良好的搜索調整值

讓我試着用一個簡單的例子來解釋:假設有一個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

1)做一些抽象。將(x,y,z)合併到一個位置。 2)'GoFishing(location,timeToSpendAtThisLoc)'3)修正數學運算,讓你使用適當的權重,數字有意義(單位!)4)你是否假設概率分佈是固定的?如果是這樣,過了一段時間,你不需要檢查不好的地方。如果沒有,您需要該流程才能忘記舊數據。 – 2014-10-26 20:54:07

+0

謝謝Karoly的意見。發行量會發生變化,但我認爲最好不要將我的問題留在這裏,以便縮短髮布時間。我喜歡你對抽象部分的想法。我猜整個3維的東西並不適用,因爲每個區塊都是獨立的。我會花一些時間考慮這個問題,只需要一些大小無關的桶。 – Sunsetquest 2014-10-28 04:18:58

回答

2

你的魚池問題描述一類問題稱爲探索/開拓算法,或多臂賭博問題的一個實例;見例如http://en.wikipedia.org/wiki/Multi-armed_bandit。有一個龐大的身軀數學理論和算法問題的,但是關鍵的假設大致如下:在該位置

  • 釣魚,我們已經看到的 魚數量最多/小時優化了預期短期回報(如果我們只有一個小時,這就是我們應該做的)。但是,如果我們繼續捕魚一段時間,可能會有更好的地點,但我們沒有足夠的信息。
  • 爲了使這個想法正式化,我們引入了時間折扣(今天捕獲的魚 比明天捕獲的魚更有價值,比如0.8倍)。我們的目標是 最大限度地打折的魚,在一段時間的捕魚, 或無限的地平線。
  • 每隔一小時,我們決定是否在當前最好的位置釣魚,或者獲得更多關於新魚的信息。最簡單的策略(「epsilon-greedy」)會在當前最好看的位置釣魚,例如概率爲90%,並在10%的時間內隨機選擇另一個位置。
  • 更復雜的策略會引入一個概率估計,即一個位置可以比我們當前的最佳位置更好(這取決於估計的預期值及其方差,即花費的總時間和魚/小時)。然後,我們根據這個概率做出決定,做出更明智的選擇(首先探索看起來最有希望的點)。 (x,y,z)可能類似於位置(x-1,y,z),(x,y-1,z)對於魚塘問題,合理的概率模型可能考慮鄰域)等)。
+0

謝謝Stefan!我知道必須有這樣的事情。多武裝強盜問題可能正好描述了我的問題。我會花一些時間研究它。 – Sunsetquest 2015-04-14 03:22:07