Кэширование с помощью минимаксного алгоритма с альфа/бета-обрезкойC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Кэширование с помощью минимаксного алгоритма с альфа/бета-обрезкой

Сообщение Anonymous »

Я пытался добавить кеширование в свой минимаксный алгоритм для 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Negamax с обрезкой альфа-бета в Python
    Anonymous » » в форуме Python
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Шахматный движок с обрезкой альфа-бета
    Anonymous » » в форуме Python
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Проблемы с компиляцией алгоритма минимаксного алгоритма в Boost 1.46.1 [закрыто]
    Anonymous » » в форуме C++
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Объяснение ошибки с использованием таблицы транспонирования в минимаксе с обрезкой альфа-беты [закрыто]
    Anonymous » » в форуме Python
    0 Ответы
    40 Просмотры
    Последнее сообщение Anonymous
  • Мне нужна помощь в создании шахматного ИИ с использованием минимаксного алгоритма.
    Anonymous » » в форуме Python
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»