Я пытался добавить кеширование в свой минимаксный алгоритм для 4-строчного ИИ, но не смог сделать это правильно. После добавления кеширования алгоритм продолжает ломать и галлюцинировать коэффициенты. Реализация кэширования верна на 100%. Я пытался следовать предложениям из разных веток по одному и тому же вопросу, но не мог понять, как это работает, поэтому спросил в чате, но он дал мне другой ответ, поэтому я не знаю, что делать. Допустим, я закешировал некоторую позицию с ее альфа- и бета-значениями в конце поиска. После некоторых вычислений я попадаю в разумную позицию, но на этот раз у меня уже есть альфа и бета (и, следовательно, результат, в зависимости от того, кто делает ход). Что я должен делать дальше? Очевидно, что если значения одинаковы, я могу просто повторно использовать кэшированное значение, но что мне делать, если они не совпадают. Наверняка есть способ ускорить алгоритм с помощью кешированных значений.
Я пробовал просто загрузить позицию, найденную в кеше, — не сработало.
Я также пробовал кучу разных вещей, тут не повезло.
Хорошо, кто-то закрыл без причины, хотя я описал проблему и задал прямой вопрос. Вот моя минимаксная функция:
struct field
{
long long fir;
long long sec;
bool operator==(const field& other) const {
return sec == other.sec && fir == other.fir;
}
size_t operator()(const field& s) const {
return hash()(s.sec) ^ (hash()(s.fir 4){
auto it = cacheval.find({cfir, csec});
if(it != cacheval.end()){
int index = it->second;
if(resalpha[index] == alpha and resbeta[index] == beta)
return reseval[index];
isfound = true;
alpha = max(alpha, resalpha[index]);
beta = min(beta, resbeta[index]);
}
}
if(left4 > 0)
if(cw4(cfir, left4))
return depth;
if(left3 > 0)
if(cw3(cfir, left3))
return depth;
if(left5 > 0)
if(cw5(cfir, left5))
return depth;
if(left2 > 0)
if(cw2(cfir, left2))
return depth;
if(left6 > 0)
if(cw6(cfir, left6))
return depth;
if(left1 > 0)
if(cw1(cfir, left1))
return depth;
if(left7 > 0)
if(cw7(cfir, left7))
return depth;
if(depth == 0)
return 0;
int res = -100;
depth--;
if(left4 > 0){
int reschild = minimax(depth, false, beta, alpha, cfir | (1LL 0)
if(cw6(csec, left6))
return -depth;
if(left1 > 0)
if(cw1(csec, left1))
return -depth;
if(left7 > 0)
if(cw7(csec, left7))
return -depth;
if(depth == 0)
return 0;
int res = 100;
depth--;
if(left4 > 0){
int reschild = minimax(depth, true, beta, alpha, cfir, csec | (1LL
Подробнее здесь: https://stackoverflow.com/questions/783 ... ta-pruning
Кэширование с помощью минимаксного алгоритма с альфа/бета-обрезкой ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Проблемы с компиляцией алгоритма минимаксного алгоритма в Boost 1.46.1 [закрыто]
Anonymous » » в форуме C++ - 0 Ответы
- 2 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Мне нужна помощь в создании шахматного ИИ с использованием минимаксного алгоритма.
Anonymous » » в форуме Python - 0 Ответы
- 19 Просмотры
-
Последнее сообщение Anonymous
-