2014-10-26 54 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

相关问题