我有一个编程搜索问题,我想知道是否有任何算法,类,公式或过程,可以根据过去的结果产生良好的搜索位置。 (我猜这是在某个地方。)或者,我扔掉的解决方案会不会有好的?算法或公式来寻找良好的搜索调整值
让我试着用一个简单的例子来解释:假设有一个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