У меня проблема с программированием, и мне интересно, есть ли какой-либо алгоритм, класс, формула или процедура, которые могут создавать хорошие поисковые местоположения на основе прошлых результатов. (Я предполагаю, что где-то есть.) Или, было ли решение, которое я выбрал, было хорошо?Алгоритм или формула для поиска хороших значений настройки для поиска
Позвольте мне попытаться объяснить на простом примере: Скажем, есть водоем, который составляет 2 х 2 метра и 3 метра в глубину. Я могу поместить свою приманку для рыбалки в любом месте x, y, z (2 X 2 X 3 = 27 мест). Скажем, я рыбаю в каждом месте в течение одного часа (проверяя пруд), и я собираю другое количество рыбы в каждом из 27 мест. Теперь, после того, как я это сделаю, лучшим местом для логической рыбалки является то место, где я поймал большинство рыб, НО только потому, что я поймал больше всего рыбы там, это не значит, что это лучшее место. Мне просто повезло. Вероятно, было бы лучше потратить большой кусок моего времени в этом месте, но все же приключение в процентах от времени, чтобы подтвердить, что это лучшее место.
Одно простое (и плохое?) Решение состоит в том, чтобы ловить рыбу по 10 часов в каждом месте, и там, где большинство рыбы пойманы, вероятно, будет хорошим местом, но это будет очень много времени (270 часов). Скорее всего, если я закончил ketch 15 на некоторых x, y, z и ни один в 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) сделайте некоторую абстракцию. merge (x, y, z) в одно место. 2) 'GoFishing (location, timeToSpendAtThisLoc)' 3) исправить математику, чтобы вы использовали правильные веса, а числа имеют смысл (единицы!). 4) Вы предполагаете, что распределение вероятности фиксировано? если это так, через некоторое время вам не нужно проверять плохие места. если нет, вам нужен процесс, чтобы иметь возможность забыть старые данные. –
Спасибо, Кароли за вход. Распределение изменится, но я подумал, что лучше оставить это из моего вопроса, чтобы оно было короче. Мне нравятся ваши мысли об абстракции. Я думаю, что все 3-мерная вещь действительно не применяется, поскольку каждый блок независим. Я потрачу некоторое время на размышления о проблеме только с некоторым количеством ведер, где размер не имеет значения. – Sunsetquest